Blob Blame History Raw
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));