aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicolas Pitre <nicolas.pitre@linaro.org>2014-10-01 01:03:29 -0400
committerTuukka Tikkanen <tuukka.tikkanen@linaro.org>2014-10-08 05:50:40 +0300
commitbecfa47c31da7df9440f8776b81f5e6b668a823b (patch)
tree6c922d6bcf0cd2d801026a4f14dd0e18ee429fe3
parent8b5a7bf3d11cf6d1de071e0095e48732dc54ac41 (diff)
idlestat: many IRQs may share the same number
This is especially true for IPIs. Without this fix, all IPIs are recorded under the first one to be seen per CPU. Signed-off-by: Nicolas Pitre <nico@linaro.org> Reviewed-by: Tuukka Tikkanen <tuukka.tikkanen@linaro.org>
-rw-r--r--idlestat.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/idlestat.c b/idlestat.c
index e55f69e..ab561c1 100644
--- a/idlestat.c
+++ b/idlestat.c
@@ -854,14 +854,15 @@ static int store_data(double time, int state, int cpu,
return ret;
}
-static struct wakeup_irq *find_irqinfo(struct wakeup_info *wakeinfo, int irqid)
+static struct wakeup_irq *find_irqinfo(struct wakeup_info *wakeinfo, int irqid,
+ const char *irqname)
{
struct wakeup_irq *irqinfo;
int i;
for (i = 0; i < wakeinfo->nrdata; i++) {
irqinfo = &wakeinfo->irqinfo[i];
- if (irqinfo->id == irqid)
+ if (irqinfo->id == irqid && !strcmp(irqinfo->name, irqname))
return irqinfo;
}
@@ -878,7 +879,7 @@ static int store_irq(int cpu, int irqid, char *irqname,
if (cstates->wakeirq != NULL)
return 0;
- irqinfo = find_irqinfo(wakeinfo, irqid);
+ irqinfo = find_irqinfo(wakeinfo, irqid, irqname);
if (NULL == irqinfo) {
irqinfo = realloc(wakeinfo->irqinfo,
sizeof(*irqinfo) * (wakeinfo->nrdata + 1));