aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--idlestat.c9
-rw-r--r--idlestat.h1
2 files changed, 10 insertions, 0 deletions
diff --git a/idlestat.c b/idlestat.c
index 24f90f9..f38f0e9 100644
--- a/idlestat.c
+++ b/idlestat.c
@@ -20,6 +20,7 @@
static char irq_type_name[][8] = {
"irq",
+ "ipi",
};
static char buffer[BUFSIZE];
@@ -320,6 +321,7 @@ static int store_irq(int cpu, int irqid, char *irqname,
}
#define TRACE_IRQ_FORMAT "%*[^[][%d] %*[^=]=%d%*[^=]=%16s"
+#define TRACE_IPIIRQ_FORMAT "%*[^[][%d] %*[^=]=%d%*[^=]=%16s"
#define TRACE_CMD_FORMAT "%*[^]]] %lf:%*[^=]=%u%*[^=]=%d"
#define TRACE_FORMAT "%*[^]]] %*s %lf:%*[^=]=%u%*[^=]=%d"
@@ -336,6 +338,13 @@ static int get_wakeup_irq(struct cpuidle_datas *datas, char *buffer, int count)
return 0;
}
+ if (strstr(buffer, "ipi_handler_entry")) {
+ sscanf(buffer, TRACE_IPIIRQ_FORMAT, &cpu, &irqid, irqname);
+
+ store_irq(cpu, irqid, irqname, datas, count, IPI_IRQ);
+ return 0;
+ }
+
return -1;
}
diff --git a/idlestat.h b/idlestat.h
index 40d5d61..f753dc0 100644
--- a/idlestat.h
+++ b/idlestat.h
@@ -28,6 +28,7 @@ struct cpuidle_cstate {
enum IRQ_TYPE {
HARD_IRQ = 0,
+ IPI_IRQ,
IRQ_TYPE_MAX
};