]> granicus.if.org Git - sysstat/commitdiff
A_IRQ: Add new method to create the list of interrupts names
authorSebastien GODARD <sysstat@users.noreply.github.com>
Sun, 6 Feb 2022 07:02:43 +0000 (08:02 +0100)
committerSebastien GODARD <sysstat@users.noreply.github.com>
Sun, 6 Feb 2022 07:02:43 +0000 (08:02 +0100)
Add count_new_int() method to A_IRQ activity structure.
This method will be used to create the list of all the interrupts names
present in file (unless a list has been explicitly entered by the user
on the command line with option "--int=").

Signed-off-by: Sebastien GODARD <sysstat@users.noreply.github.com>
activity.c
sa.h
sadf_misc.c

index 078fd342a923bf7799c56f3bd9dced969bc4f13a..04beaf64a461a572dcaa833883a8c713cb52ade1 100644 (file)
@@ -180,7 +180,7 @@ struct activity irq_act = {
        .f_svg_print    = NULL,
        .f_raw_print    = raw_print_irq_stats,
        .f_pcp_print    = pcp_print_irq_stats,
-       .f_count_new    = NULL,
+       .f_count_new    = count_new_int,
        .item_list      = NULL,
        .desc           = "Interrupts statistics",
 #endif
diff --git a/sa.h b/sa.h
index e53b33e5ca4776b7181e8b4f63b1e2c80384cf78..91c0a2ab1454c7636fa5a30bb8cdd58706149248 100644 (file)
--- a/sa.h
+++ b/sa.h
@@ -1346,6 +1346,8 @@ struct sa_item {
 /*
  * Prototypes used to count new items
  */
+__nr_t count_new_int
+       (struct activity *, int);
 __nr_t count_new_net_dev
        (struct activity *, int);
 __nr_t count_new_net_edev
index 473e5d939b2082edee1aad237e22763a539b6644..698ea5b0569da6c84c9ee8a0407c104c2c8ec55a 100644 (file)
@@ -1626,6 +1626,43 @@ __nr_t count_new_disk(struct activity *a, int curr)
        return nr;
 }
 
+/*
+ ***************************************************************************
+ * Count the number of interrupts in current sample. Add each interrupt name
+ * to the linked list starting at @a->item_list.
+ *
+ * IN:
+ * @a          Activity structure with statistics.
+ * @curr       Index in array for current sample statistics.
+ *
+ * RETURNS:
+ * Number of interrupts added to the list.
+ ***************************************************************************
+ */
+__nr_t count_new_int(struct activity *a, int curr)
+{
+       int i, nr = 0;
+       struct stats_irq *stc_cpuall_irq;
+
+       if (a->item_list)
+               /*
+                * If a list already exists, do nothing. This means that a list has been
+                * explicitly entered on the command line using option "--int=", or that
+                * the list has already been created here (remember that the number of
+                * interrupts cannot change in file: @nr2, the second matrix dimension,
+                * is a constant).
+                */
+               return 0;
+
+       for (i = 0; i < a->nr2; i++) {
+               stc_cpuall_irq = (struct stats_irq *) ((char *) a->buf[curr] + i * a->msize);
+
+               nr += add_list_item(&(a->item_list), stc_cpuall_irq->irq_name, MAX_SA_IRQ_LEN);
+       }
+
+       return nr;
+}
+
 /*
  ***************************************************************************
  * Init custom color palette used to draw graphs (sadf -g).