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 /drivers | |
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 'drivers')
-rw-r--r-- | drivers/s390/block/dasd_diag.c | 2 | ||||
-rw-r--r-- | drivers/s390/char/sclp.c | 6 | ||||
-rw-r--r-- | drivers/s390/kvm/kvm_virtio.c | 3 |
3 files changed, 10 insertions, 1 deletions
diff --git a/drivers/s390/block/dasd_diag.c b/drivers/s390/block/dasd_diag.c index 266b34b55403..a3a5db58df18 100644 --- a/drivers/s390/block/dasd_diag.c +++ b/drivers/s390/block/dasd_diag.c | |||
@@ -10,6 +10,7 @@ | |||
10 | 10 | ||
11 | #define KMSG_COMPONENT "dasd" | 11 | #define KMSG_COMPONENT "dasd" |
12 | 12 | ||
13 | #include <linux/kernel_stat.h> | ||
13 | #include <linux/stddef.h> | 14 | #include <linux/stddef.h> |
14 | #include <linux/kernel.h> | 15 | #include <linux/kernel.h> |
15 | #include <linux/slab.h> | 16 | #include <linux/slab.h> |
@@ -238,6 +239,7 @@ static void dasd_ext_handler(unsigned int ext_int_code, | |||
238 | addr_t ip; | 239 | addr_t ip; |
239 | int rc; | 240 | int rc; |
240 | 241 | ||
242 | kstat_cpu(smp_processor_id()).irqs[EXTINT_DSD]++; | ||
241 | switch (ext_int_code >> 24) { | 243 | switch (ext_int_code >> 24) { |
242 | case DASD_DIAG_CODE_31BIT: | 244 | case DASD_DIAG_CODE_31BIT: |
243 | ip = (addr_t) param32; | 245 | ip = (addr_t) param32; |
diff --git a/drivers/s390/char/sclp.c b/drivers/s390/char/sclp.c index 35cc4686b99b..e65572e504ba 100644 --- a/drivers/s390/char/sclp.c +++ b/drivers/s390/char/sclp.c | |||
@@ -7,6 +7,7 @@ | |||
7 | * Martin Schwidefsky <schwidefsky@de.ibm.com> | 7 | * Martin Schwidefsky <schwidefsky@de.ibm.com> |
8 | */ | 8 | */ |
9 | 9 | ||
10 | #include <linux/kernel_stat.h> | ||
10 | #include <linux/module.h> | 11 | #include <linux/module.h> |
11 | #include <linux/err.h> | 12 | #include <linux/err.h> |
12 | #include <linux/spinlock.h> | 13 | #include <linux/spinlock.h> |
@@ -18,8 +19,9 @@ | |||
18 | #include <linux/suspend.h> | 19 | #include <linux/suspend.h> |
19 | #include <linux/completion.h> | 20 | #include <linux/completion.h> |
20 | #include <linux/platform_device.h> | 21 | #include <linux/platform_device.h> |
21 | #include <asm/types.h> | ||
22 | #include <asm/s390_ext.h> | 22 | #include <asm/s390_ext.h> |
23 | #include <asm/types.h> | ||
24 | #include <asm/irq.h> | ||
23 | 25 | ||
24 | #include "sclp.h" | 26 | #include "sclp.h" |
25 | 27 | ||
@@ -402,6 +404,7 @@ static void sclp_interrupt_handler(unsigned int ext_int_code, | |||
402 | u32 finished_sccb; | 404 | u32 finished_sccb; |
403 | u32 evbuf_pending; | 405 | u32 evbuf_pending; |
404 | 406 | ||
407 | kstat_cpu(smp_processor_id()).irqs[EXTINT_SCP]++; | ||
405 | spin_lock(&sclp_lock); | 408 | spin_lock(&sclp_lock); |
406 | finished_sccb = param32 & 0xfffffff8; | 409 | finished_sccb = param32 & 0xfffffff8; |
407 | evbuf_pending = param32 & 0x3; | 410 | evbuf_pending = param32 & 0x3; |
@@ -824,6 +827,7 @@ static void sclp_check_handler(unsigned int ext_int_code, | |||
824 | { | 827 | { |
825 | u32 finished_sccb; | 828 | u32 finished_sccb; |
826 | 829 | ||
830 | kstat_cpu(smp_processor_id()).irqs[EXTINT_SCP]++; | ||
827 | finished_sccb = param32 & 0xfffffff8; | 831 | finished_sccb = param32 & 0xfffffff8; |
828 | /* Is this the interrupt we are waiting for? */ | 832 | /* Is this the interrupt we are waiting for? */ |
829 | if (finished_sccb == 0) | 833 | if (finished_sccb == 0) |
diff --git a/drivers/s390/kvm/kvm_virtio.c b/drivers/s390/kvm/kvm_virtio.c index 375aeeaf9ea5..414427d64a8f 100644 --- a/drivers/s390/kvm/kvm_virtio.c +++ b/drivers/s390/kvm/kvm_virtio.c | |||
@@ -10,6 +10,7 @@ | |||
10 | * Author(s): Christian Borntraeger <borntraeger@de.ibm.com> | 10 | * Author(s): Christian Borntraeger <borntraeger@de.ibm.com> |
11 | */ | 11 | */ |
12 | 12 | ||
13 | #include <linux/kernel_stat.h> | ||
13 | #include <linux/init.h> | 14 | #include <linux/init.h> |
14 | #include <linux/bootmem.h> | 15 | #include <linux/bootmem.h> |
15 | #include <linux/err.h> | 16 | #include <linux/err.h> |
@@ -25,6 +26,7 @@ | |||
25 | #include <asm/kvm_virtio.h> | 26 | #include <asm/kvm_virtio.h> |
26 | #include <asm/setup.h> | 27 | #include <asm/setup.h> |
27 | #include <asm/s390_ext.h> | 28 | #include <asm/s390_ext.h> |
29 | #include <asm/irq.h> | ||
28 | 30 | ||
29 | #define VIRTIO_SUBCODE_64 0x0D00 | 31 | #define VIRTIO_SUBCODE_64 0x0D00 |
30 | 32 | ||
@@ -379,6 +381,7 @@ static void kvm_extint_handler(unsigned int ext_int_code, | |||
379 | u16 subcode; | 381 | u16 subcode; |
380 | u32 param; | 382 | u32 param; |
381 | 383 | ||
384 | kstat_cpu(smp_processor_id()).irqs[EXTINT_VRT]++; | ||
382 | subcode = ext_int_code >> 16; | 385 | subcode = ext_int_code >> 16; |
383 | if ((subcode & 0xff00) != VIRTIO_SUBCODE_64) | 386 | if ((subcode & 0xff00) != VIRTIO_SUBCODE_64) |
384 | return; | 387 | return; |