s390/pci: gather statistics for floating vs directed irqs
authorSebastian Ott <sebott@linux.ibm.com>
Thu, 22 Nov 2018 13:08:33 +0000 (14:08 +0100)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Mon, 29 Apr 2019 08:47:01 +0000 (10:47 +0200)
Gather statistics to distinguish floating and directed interrupts.

Signed-off-by: Sebastian Ott <sebott@linux.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
arch/s390/include/asm/irq.h
arch/s390/kernel/irq.c
arch/s390/pci/pci_irq.c

index d159439440542504b4190ad831adccbf9d182680..9f75d67b8c20707ed109d4c0ac8da0f368158e76 100644 (file)
@@ -59,7 +59,8 @@ enum interruption_class {
        IRQIO_VIR,
        IRQIO_QAI,
        IRQIO_APB,
-       IRQIO_PCI,
+       IRQIO_PCF,
+       IRQIO_PCD,
        IRQIO_MSI,
        IRQIO_VAI,
        IRQIO_GAL,
index f586f94d39476d34eb7897d0f59f0a7765758ae1..150964f9118335f7ac49b78c521df3900085b659 100644 (file)
@@ -85,7 +85,8 @@ static const struct irq_class irqclass_sub_desc[] = {
        {.irq = IRQIO_VIR,  .name = "VIR", .desc = "[I/O] Virtual I/O Devices"},
        {.irq = IRQIO_QAI,  .name = "QAI", .desc = "[AIO] QDIO Adapter Interrupt"},
        {.irq = IRQIO_APB,  .name = "APB", .desc = "[AIO] AP Bus"},
-       {.irq = IRQIO_PCI,  .name = "PCI", .desc = "[AIO] PCI Interrupt"},
+       {.irq = IRQIO_PCF,  .name = "PCF", .desc = "[AIO] PCI Floating Interrupt"},
+       {.irq = IRQIO_PCD,  .name = "PCD", .desc = "[AIO] PCI Directed Interrupt"},
        {.irq = IRQIO_MSI,  .name = "MSI", .desc = "[AIO] MSI Interrupt"},
        {.irq = IRQIO_VAI,  .name = "VAI", .desc = "[AIO] Virtual I/O Devices AI"},
        {.irq = IRQIO_GAL,  .name = "GAL", .desc = "[AIO] GIB Alert"},
index e7e3eab9a2b8d12bda124b0f19ee46dd720919aa..c73ab855a2ca34ab7364c9ccce1273353d807461 100644 (file)
@@ -188,11 +188,13 @@ static void zpci_handle_fallback_irq(void)
 
 static void zpci_directed_irq_handler(struct airq_struct *airq, bool floating)
 {
-       inc_irq_stat(IRQIO_PCI);
-       if (floating)
+       if (floating) {
+               inc_irq_stat(IRQIO_PCF);
                zpci_handle_fallback_irq();
-       else
+       } else {
+               inc_irq_stat(IRQIO_PCD);
                zpci_handle_cpu_local_irq(true);
+       }
 }
 
 static void zpci_floating_irq_handler(struct airq_struct *airq, bool floating)
@@ -201,7 +203,7 @@ static void zpci_floating_irq_handler(struct airq_struct *airq, bool floating)
        struct airq_iv *aibv;
        int irqs_on = 0;
 
-       inc_irq_stat(IRQIO_PCI);
+       inc_irq_stat(IRQIO_PCF);
        for (si = 0;;) {
                /* Scan adapter summary indicator bit vector */
                si = airq_iv_scan(zpci_sbv, si, airq_iv_end(zpci_sbv));