diff options
author | Peter Oberparleiter <peter.oberparleiter@de.ibm.com> | 2011-10-30 10:16:04 -0400 |
---|---|---|
committer | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2011-10-30 10:16:15 -0400 |
commit | de400d6b78d15a73023485f050bc6b1709dc7a79 (patch) | |
tree | 2d2e7233a76982db4cf12ff0859054a33e46a911 /arch/s390 | |
parent | ce949717b559709423c1ef716a9db16d1dcadaed (diff) |
[S390] fix mismatch in summation of I/O IRQ statistics
Current IRQ statistics support does not show detail counts for I/O
interrupts which are processed internally only. The result is a
summation count which is way off such as this one:
CPU0 CPU1 CPU2
I/O: 1331 710 442
[...]
QAI: 15 16 16 [I/O] QDIO Adapter Interrupt
QDI: 1 0 0 [I/O] QDIO Interrupt
DAS: 706 645 381 [I/O] DASD
C15: 26 10 0 [I/O] 3215
C70: 0 0 0 [I/O] 3270
TAP: 0 0 0 [I/O] Tape
VMR: 0 0 0 [I/O] Unit Record Devices
LCS: 0 0 0 [I/O] LCS
CLW: 0 0 0 [I/O] CLAW
CTC: 0 0 0 [I/O] CTC
APB: 0 0 0 [I/O] AP Bus
Fix this by moving I/O interrupt accounting into the common I/O layer.
Signed-off-by: Peter Oberparleiter <peter.oberparleiter@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'arch/s390')
-rw-r--r-- | arch/s390/include/asm/ccwdev.h | 3 | ||||
-rw-r--r-- | arch/s390/include/asm/irq.h | 2 | ||||
-rw-r--r-- | arch/s390/kernel/irq.c | 2 |
3 files changed, 5 insertions, 2 deletions
diff --git a/arch/s390/include/asm/ccwdev.h b/arch/s390/include/asm/ccwdev.h index 623f2fb71774..9381c92cc779 100644 --- a/arch/s390/include/asm/ccwdev.h +++ b/arch/s390/include/asm/ccwdev.h | |||
@@ -11,6 +11,7 @@ | |||
11 | #include <linux/device.h> | 11 | #include <linux/device.h> |
12 | #include <linux/mod_devicetable.h> | 12 | #include <linux/mod_devicetable.h> |
13 | #include <asm/fcx.h> | 13 | #include <asm/fcx.h> |
14 | #include <asm/irq.h> | ||
14 | 15 | ||
15 | /* structs from asm/cio.h */ | 16 | /* structs from asm/cio.h */ |
16 | struct irb; | 17 | struct irb; |
@@ -127,6 +128,7 @@ enum uc_todo { | |||
127 | * @restore: callback for restoring after hibernation | 128 | * @restore: callback for restoring after hibernation |
128 | * @uc_handler: callback for unit check handler | 129 | * @uc_handler: callback for unit check handler |
129 | * @driver: embedded device driver structure | 130 | * @driver: embedded device driver structure |
131 | * @int_class: interruption class to use for accounting interrupts | ||
130 | */ | 132 | */ |
131 | struct ccw_driver { | 133 | struct ccw_driver { |
132 | struct ccw_device_id *ids; | 134 | struct ccw_device_id *ids; |
@@ -144,6 +146,7 @@ struct ccw_driver { | |||
144 | int (*restore)(struct ccw_device *); | 146 | int (*restore)(struct ccw_device *); |
145 | enum uc_todo (*uc_handler) (struct ccw_device *, struct irb *); | 147 | enum uc_todo (*uc_handler) (struct ccw_device *, struct irb *); |
146 | struct device_driver driver; | 148 | struct device_driver driver; |
149 | enum interruption_class int_class; | ||
147 | }; | 150 | }; |
148 | 151 | ||
149 | extern struct ccw_device *get_ccwdev_by_busid(struct ccw_driver *cdrv, | 152 | extern struct ccw_device *get_ccwdev_by_busid(struct ccw_driver *cdrv, |
diff --git a/arch/s390/include/asm/irq.h b/arch/s390/include/asm/irq.h index ba7b01c726a3..1f686059f293 100644 --- a/arch/s390/include/asm/irq.h +++ b/arch/s390/include/asm/irq.h | |||
@@ -17,8 +17,8 @@ enum interruption_class { | |||
17 | EXTINT_SCP, | 17 | EXTINT_SCP, |
18 | EXTINT_IUC, | 18 | EXTINT_IUC, |
19 | EXTINT_CPM, | 19 | EXTINT_CPM, |
20 | IOINT_CIO, | ||
20 | IOINT_QAI, | 21 | IOINT_QAI, |
21 | IOINT_QDI, | ||
22 | IOINT_DAS, | 22 | IOINT_DAS, |
23 | IOINT_C15, | 23 | IOINT_C15, |
24 | IOINT_C70, | 24 | IOINT_C70, |
diff --git a/arch/s390/kernel/irq.c b/arch/s390/kernel/irq.c index 1f4050d45f78..d382f9db3df5 100644 --- a/arch/s390/kernel/irq.c +++ b/arch/s390/kernel/irq.c | |||
@@ -42,8 +42,8 @@ static const struct irq_class intrclass_names[] = { | |||
42 | {.name = "SCP", .desc = "[EXT] Service Call" }, | 42 | {.name = "SCP", .desc = "[EXT] Service Call" }, |
43 | {.name = "IUC", .desc = "[EXT] IUCV" }, | 43 | {.name = "IUC", .desc = "[EXT] IUCV" }, |
44 | {.name = "CPM", .desc = "[EXT] CPU Measurement" }, | 44 | {.name = "CPM", .desc = "[EXT] CPU Measurement" }, |
45 | {.name = "CIO", .desc = "[I/O] Common I/O Layer Interrupt" }, | ||
45 | {.name = "QAI", .desc = "[I/O] QDIO Adapter Interrupt" }, | 46 | {.name = "QAI", .desc = "[I/O] QDIO Adapter Interrupt" }, |
46 | {.name = "QDI", .desc = "[I/O] QDIO Interrupt" }, | ||
47 | {.name = "DAS", .desc = "[I/O] DASD" }, | 47 | {.name = "DAS", .desc = "[I/O] DASD" }, |
48 | {.name = "C15", .desc = "[I/O] 3215" }, | 48 | {.name = "C15", .desc = "[I/O] 3215" }, |
49 | {.name = "C70", .desc = "[I/O] 3270" }, | 49 | {.name = "C70", .desc = "[I/O] 3270" }, |