diff options
author | Nicolas Pitre <nicolas.pitre@linaro.org> | 2014-10-01 01:03:29 -0400 |
---|---|---|
committer | Tuukka Tikkanen <tuukka.tikkanen@linaro.org> | 2014-10-08 05:50:40 +0300 |
commit | becfa47c31da7df9440f8776b81f5e6b668a823b (patch) | |
tree | 6c922d6bcf0cd2d801026a4f14dd0e18ee429fe3 | |
parent | 8b5a7bf3d11cf6d1de071e0095e48732dc54ac41 (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.c | 7 |
1 files changed, 4 insertions, 3 deletions
@@ -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)); |