Home Home > GIT Browse > SLE15-SP1
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPetr Tesarik <ptesarik@suse.cz>2019-06-07 12:44:54 +0200
committerPetr Tesarik <ptesarik@suse.cz>2019-06-14 17:58:57 +0200
commit7c5f06b49747f3c0d1c967d243a5f301d0821270 (patch)
tree10431f9137632f9a3c27e21d8de2f17cac1af702
parent25b5238e33a9fb3e1fa4ee32bedcf59aa963a64f (diff)
s390: show statistics for MSI IRQs (jsc#SLE-5789 FATE#327042
bsc#1134730 LTC#173388).
-rw-r--r--patches.arch/s390-show-statistics-for-msi-irqs155
-rw-r--r--series.conf1
2 files changed, 156 insertions, 0 deletions
diff --git a/patches.arch/s390-show-statistics-for-msi-irqs b/patches.arch/s390-show-statistics-for-msi-irqs
new file mode 100644
index 0000000000..4585ba99b3
--- /dev/null
+++ b/patches.arch/s390-show-statistics-for-msi-irqs
@@ -0,0 +1,155 @@
+From: Sebastian Ott <sebott@linux.vnet.ibm.com>
+Date: Tue, 14 Feb 2017 18:13:09 +0100
+Subject: s390: show statistics for MSI IRQs
+Git-commit: 914b7dd07ee8713c69c31ddb3e19a76852a846ac
+Patch-mainline: v5.2-rc1
+References: jsc#SLE-5789 FATE#327042 bsc#1134730 LTC#173388
+
+Improve /proc/interrupts on s390 to show statistics for individual
+MSI interrupts.
+
+Signed-off-by: Sebastian Ott <sebott@linux.vnet.ibm.com>
+Acked-by: Heiko Carstens <heiko.carstens@de.ibm.com>
+Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
+Acked-by: Petr Tesarik <ptesarik@suse.com>
+---
+ arch/s390/include/asm/irq.h | 6 ++---
+ arch/s390/kernel/irq.c | 45 ++++++++++++++++++++++++++++++++++++--------
+ arch/s390/pci/pci_irq.c | 2 -
+ drivers/s390/cio/cio.c | 2 -
+ 4 files changed, 42 insertions(+), 13 deletions(-)
+
+--- a/arch/s390/include/asm/irq.h
++++ b/arch/s390/include/asm/irq.h
+@@ -46,7 +46,6 @@ enum interruption_class {
+ IRQEXT_CMC,
+ IRQEXT_FTP,
+ IRQIO_CIO,
+- IRQIO_QAI,
+ IRQIO_DAS,
+ IRQIO_C15,
+ IRQIO_C70,
+@@ -54,12 +53,13 @@ enum interruption_class {
+ IRQIO_VMR,
+ IRQIO_LCS,
+ IRQIO_CTC,
+- IRQIO_APB,
+ IRQIO_ADM,
+ IRQIO_CSC,
++ IRQIO_VIR,
++ IRQIO_QAI,
++ IRQIO_APB,
+ IRQIO_PCI,
+ IRQIO_MSI,
+- IRQIO_VIR,
+ IRQIO_VAI,
+ NMI_NMI,
+ CPU_RST,
+--- a/arch/s390/kernel/irq.c
++++ b/arch/s390/kernel/irq.c
+@@ -72,7 +72,6 @@ static const struct irq_class irqclass_s
+ {.irq = IRQEXT_CMC, .name = "CMC", .desc = "[EXT] CPU-Measurement: Counter"},
+ {.irq = IRQEXT_FTP, .name = "FTP", .desc = "[EXT] HMC FTP Service"},
+ {.irq = IRQIO_CIO, .name = "CIO", .desc = "[I/O] Common I/O Layer Interrupt"},
+- {.irq = IRQIO_QAI, .name = "QAI", .desc = "[I/O] QDIO Adapter Interrupt"},
+ {.irq = IRQIO_DAS, .name = "DAS", .desc = "[I/O] DASD"},
+ {.irq = IRQIO_C15, .name = "C15", .desc = "[I/O] 3215"},
+ {.irq = IRQIO_C70, .name = "C70", .desc = "[I/O] 3270"},
+@@ -80,13 +79,14 @@ static const struct irq_class irqclass_s
+ {.irq = IRQIO_VMR, .name = "VMR", .desc = "[I/O] Unit Record Devices"},
+ {.irq = IRQIO_LCS, .name = "LCS", .desc = "[I/O] LCS"},
+ {.irq = IRQIO_CTC, .name = "CTC", .desc = "[I/O] CTC"},
+- {.irq = IRQIO_APB, .name = "APB", .desc = "[I/O] AP Bus"},
+ {.irq = IRQIO_ADM, .name = "ADM", .desc = "[I/O] EADM Subchannel"},
+ {.irq = IRQIO_CSC, .name = "CSC", .desc = "[I/O] CHSC Subchannel"},
+- {.irq = IRQIO_PCI, .name = "PCI", .desc = "[I/O] PCI Interrupt" },
+- {.irq = IRQIO_MSI, .name = "MSI", .desc = "[I/O] MSI Interrupt" },
+ {.irq = IRQIO_VIR, .name = "VIR", .desc = "[I/O] Virtual I/O Devices"},
+- {.irq = IRQIO_VAI, .name = "VAI", .desc = "[I/O] Virtual I/O Devices AI"},
++ {.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_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"},
+ {.irq = CPU_RST, .name = "RST", .desc = "[CPU] CPU Restart"},
+ };
+@@ -113,6 +113,34 @@ void do_IRQ(struct pt_regs *regs, int ir
+ set_irq_regs(old_regs);
+ }
+
++static void show_msi_interrupt(struct seq_file *p, int irq)
++{
++ struct irq_desc *desc;
++ unsigned long flags;
++ int cpu;
++
++ irq_lock_sparse();
++ desc = irq_to_desc(irq);
++ if (!desc)
++ goto out;
++
++ raw_spin_lock_irqsave(&desc->lock, flags);
++ seq_printf(p, "%3d: ", irq);
++ for_each_online_cpu(cpu)
++ seq_printf(p, "%10u ", kstat_irqs_cpu(irq, cpu));
++
++ if (desc->irq_data.chip)
++ seq_printf(p, " %8s", desc->irq_data.chip->name);
++
++ if (desc->action)
++ seq_printf(p, " %s", desc->action->name);
++
++ seq_putc(p, '\n');
++ raw_spin_unlock_irqrestore(&desc->lock, flags);
++out:
++ irq_unlock_sparse();
++}
++
+ /*
+ * show_interrupts is needed by /proc/interrupts.
+ */
+@@ -125,7 +153,7 @@ int show_interrupts(struct seq_file *p,
+ if (index == 0) {
+ seq_puts(p, " ");
+ for_each_online_cpu(cpu)
+- seq_printf(p, "CPU%d ", cpu);
++ seq_printf(p, "CPU%-8d", cpu);
+ seq_putc(p, '\n');
+ }
+ if (index < NR_IRQS_BASE) {
+@@ -136,9 +164,10 @@ int show_interrupts(struct seq_file *p,
+ seq_putc(p, '\n');
+ goto out;
+ }
+- if (index > NR_IRQS_BASE)
++ if (index < nr_irqs) {
++ show_msi_interrupt(p, index);
+ goto out;
+-
++ }
+ for (index = 0; index < NR_ARCH_IRQS; index++) {
+ seq_printf(p, "%s: ", irqclass_sub_desc[index].name);
+ irq = irqclass_sub_desc[index].irq;
+--- a/arch/s390/pci/pci_irq.c
++++ b/arch/s390/pci/pci_irq.c
+@@ -112,7 +112,7 @@ static int zpci_set_irq_affinity(struct
+ }
+
+ static struct irq_chip zpci_irq_chip = {
+- .name = "zPCI",
++ .name = "PCI-MSI",
+ .irq_unmask = pci_msi_unmask_irq,
+ .irq_mask = pci_msi_mask_irq,
+ .irq_set_affinity = zpci_set_irq_affinity,
+--- a/drivers/s390/cio/cio.c
++++ b/drivers/s390/cio/cio.c
+@@ -634,7 +634,7 @@ static irqreturn_t do_cio_interrupt(int
+ }
+
+ static struct irqaction io_interrupt = {
+- .name = "IO",
++ .name = "I/O",
+ .handler = do_cio_interrupt,
+ };
+
diff --git a/series.conf b/series.conf
index 7b4fb5a46b..99461fb3c2 100644
--- a/series.conf
+++ b/series.conf
@@ -46260,6 +46260,7 @@
patches.arch/s390-pci-clarify-interrupt-vector-usage
patches.arch/s390-airq-provide-cacheline-aligned-ivs
patches.arch/s390-pci-provide-support-for-cpu-directed-interrupts
+ patches.arch/s390-show-statistics-for-msi-irqs
patches.fixes/ACPI-button-reinitialize-button-state-upon-resume.patch
patches.fixes/ACPI-property-restore-_DSD-data-subnodes-GUID-commen.patch
patches.fixes/ACPI-property-fix-handling-of-data_nodes-in-acpi_get.patch