From: Sebastian Ott <sebott@linux.ibm.com>
Date: Thu, 22 Nov 2018 14:08:33 +0100
Subject: s390/pci: gather statistics for floating vs directed irqs
Git-commit: 07e3ec3acb80726f60b7ab924b1b0f1498148b56
Patch-mainline: v5.2-rc1
References: jsc#SLE-5789 FATE#327042 bsc#1134730 LTC#173388
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>
Acked-by: Petr Tesarik <ptesarik@suse.com>
---
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(-)
--- a/arch/s390/include/asm/irq.h
+++ b/arch/s390/include/asm/irq.h
@@ -58,7 +58,8 @@ enum interruption_class {
IRQIO_VIR,
IRQIO_QAI,
IRQIO_APB,
- IRQIO_PCI,
+ IRQIO_PCF,
+ IRQIO_PCD,
IRQIO_MSI,
IRQIO_VAI,
NMI_NMI,
--- a/arch/s390/kernel/irq.c
+++ b/arch/s390/kernel/irq.c
@@ -84,7 +84,8 @@ static const struct irq_class irqclass_s
{.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 = NMI_NMI, .name = "NMI", .desc = "[NMI] Machine Check"},
--- a/arch/s390/pci/pci_irq.c
+++ b/arch/s390/pci/pci_irq.c
@@ -188,11 +188,13 @@ static void zpci_handle_fallback_irq(voi
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(st
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));