[S390] irqstats: split IPI interrupt accounting
authorHeiko Carstens <heiko.carstens@de.ibm.com>
Sun, 30 Oct 2011 14:17:19 +0000 (15:17 +0100)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Sun, 30 Oct 2011 14:16:47 +0000 (15:16 +0100)
We use both the external call and emergency call IPIs to signal remote
cpus. Therefore it makes sense to account them differently withing
/proc/irqstats so we actually know what happened.

Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
arch/s390/include/asm/irq.h
arch/s390/kernel/irq.c
arch/s390/kernel/smp.c

index eadfa9fc03ba2eae21d4afab80dc2de67a93c835..ba6d85f88d50018798b95c697ed5cf75d67b0183 100644 (file)
@@ -8,7 +8,8 @@ enum interruption_class {
        EXTERNAL_INTERRUPT,
        IO_INTERRUPT,
        EXTINT_CLK,
-       EXTINT_IPI,
+       EXTINT_EXC,
+       EXTINT_EMS,
        EXTINT_TMR,
        EXTINT_TLA,
        EXTINT_PFL,
index 30faaef34457ea5237d68ebd5590573546268685..b9a7fdd9c814c95060ae982edbb557cbd2e46a50 100644 (file)
@@ -33,7 +33,8 @@ static const struct irq_class intrclass_names[] = {
        {.name = "EXT" },
        {.name = "I/O" },
        {.name = "CLK", .desc = "[EXT] Clock Comparator" },
-       {.name = "IPI", .desc = "[EXT] Signal Processor" },
+       {.name = "EXC", .desc = "[EXT] External Call" },
+       {.name = "EMS", .desc = "[EXT] Emergency Signal" },
        {.name = "TMR", .desc = "[EXT] CPU Timer" },
        {.name = "TAL", .desc = "[EXT] Timing Alert" },
        {.name = "PFL", .desc = "[EXT] Pseudo Page Fault" },
index 3bde5688ceb50820c2b232de87008169ec549332..3ea872890da219cf6cea900dccdf444a003e35d8 100644 (file)
@@ -187,7 +187,10 @@ static void do_ext_call_interrupt(unsigned int ext_int_code,
 {
        unsigned long bits;
 
-       kstat_cpu(smp_processor_id()).irqs[EXTINT_IPI]++;
+       if (ext_int_code == 0x1202)
+               kstat_cpu(smp_processor_id()).irqs[EXTINT_EXC]++;
+       else
+               kstat_cpu(smp_processor_id()).irqs[EXTINT_EMS]++;
        /*
         * handle bit signal external calls
         */