diff options
author | Heiko Carstens <heiko.carstens@de.ibm.com> | 2011-01-05 06:47:28 -0500 |
---|---|---|
committer | Martin Schwidefsky <sky@mschwide.boeblingen.de.ibm.com> | 2011-01-05 06:47:25 -0500 |
commit | 052ff461c8427629aee887ccc27478fc7373237c (patch) | |
tree | 1b2cae2956cc94c5b32730d467e20ff447b8c072 /arch/s390/kernel/time.c | |
parent | 545b288dcbdea58a2ce2afba5f6a8302d31ac459 (diff) |
[S390] irq: have detailed statistics for interrupt types
Up to now /proc/interrupts only has statistics for external and i/o
interrupts but doesn't split up them any further.
This patch adds a line for every single interrupt source so that it
is possible to easier tell what the machine is/was doing.
Part of the output now looks like this;
CPU0 CPU2 CPU4
EXT: 3898 4232 2305
I/O: 782 315 245
CLK: 1029 1964 727 [EXT] Clock Comparator
IPI: 2868 2267 1577 [EXT] Signal Processor
TMR: 0 0 0 [EXT] CPU Timer
TAL: 0 0 0 [EXT] Timing Alert
PFL: 0 0 0 [EXT] Pseudo Page Fault
[...]
NMI: 0 1 1 [NMI] Machine Checks
Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'arch/s390/kernel/time.c')
-rw-r--r-- | arch/s390/kernel/time.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/arch/s390/kernel/time.c b/arch/s390/kernel/time.c index 4c9d72d2e273..9e7b039458da 100644 --- a/arch/s390/kernel/time.c +++ b/arch/s390/kernel/time.c | |||
@@ -15,6 +15,7 @@ | |||
15 | #define KMSG_COMPONENT "time" | 15 | #define KMSG_COMPONENT "time" |
16 | #define pr_fmt(fmt) KMSG_COMPONENT ": " fmt | 16 | #define pr_fmt(fmt) KMSG_COMPONENT ": " fmt |
17 | 17 | ||
18 | #include <linux/kernel_stat.h> | ||
18 | #include <linux/errno.h> | 19 | #include <linux/errno.h> |
19 | #include <linux/module.h> | 20 | #include <linux/module.h> |
20 | #include <linux/sched.h> | 21 | #include <linux/sched.h> |
@@ -160,6 +161,7 @@ static void clock_comparator_interrupt(unsigned int ext_int_code, | |||
160 | unsigned int param32, | 161 | unsigned int param32, |
161 | unsigned long param64) | 162 | unsigned long param64) |
162 | { | 163 | { |
164 | kstat_cpu(smp_processor_id()).irqs[EXTINT_CLK]++; | ||
163 | if (S390_lowcore.clock_comparator == -1ULL) | 165 | if (S390_lowcore.clock_comparator == -1ULL) |
164 | set_clock_comparator(S390_lowcore.clock_comparator); | 166 | set_clock_comparator(S390_lowcore.clock_comparator); |
165 | } | 167 | } |
@@ -170,6 +172,7 @@ static void stp_timing_alert(struct stp_irq_parm *); | |||
170 | static void timing_alert_interrupt(unsigned int ext_int_code, | 172 | static void timing_alert_interrupt(unsigned int ext_int_code, |
171 | unsigned int param32, unsigned long param64) | 173 | unsigned int param32, unsigned long param64) |
172 | { | 174 | { |
175 | kstat_cpu(smp_processor_id()).irqs[EXTINT_TLA]++; | ||
173 | if (param32 & 0x00c40000) | 176 | if (param32 & 0x00c40000) |
174 | etr_timing_alert((struct etr_irq_parm *) ¶m32); | 177 | etr_timing_alert((struct etr_irq_parm *) ¶m32); |
175 | if (param32 & 0x00038000) | 178 | if (param32 & 0x00038000) |