From 07e3ec3acb80726f60b7ab924b1b0f1498148b56 Mon Sep 17 00:00:00 2001 From: Sebastian Ott Date: Thu, 22 Nov 2018 14:08:33 +0100 Subject: s390/pci: gather statistics for floating vs directed irqs Gather statistics to distinguish floating and directed interrupts. Signed-off-by: Sebastian Ott Signed-off-by: Martin Schwidefsky --- arch/s390/include/asm/irq.h | 3 ++- arch/s390/kernel/irq.c | 3 ++- arch/s390/pci/pci_irq.c | 10 ++++++---- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/arch/s390/include/asm/irq.h b/arch/s390/include/asm/irq.h index d15943944054..9f75d67b8c20 100644 --- a/arch/s390/include/asm/irq.h +++ b/arch/s390/include/asm/irq.h @@ -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, diff --git a/arch/s390/kernel/irq.c b/arch/s390/kernel/irq.c index f586f94d3947..150964f91183 100644 --- a/arch/s390/kernel/irq.c +++ b/arch/s390/kernel/irq.c @@ -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"}, diff --git a/arch/s390/pci/pci_irq.c b/arch/s390/pci/pci_irq.c index e7e3eab9a2b8..c73ab855a2ca 100644 --- a/arch/s390/pci/pci_irq.c +++ b/arch/s390/pci/pci_irq.c @@ -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)); -- cgit v1.2.3-58-ga151