aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/sysdev/xive/common.c
diff options
context:
space:
mode:
authorCédric Le Goater <clg@kaod.org>2019-09-10 10:18:49 +0200
committerMichael Ellerman <mpe@ellerman.id.au>2019-09-14 00:58:47 +1000
commit5896163f7f91c0560cc41908c808661eee4c4121 (patch)
tree53346bcd1edf5a6ce86f32cce8fd1129818212ae /arch/powerpc/sysdev/xive/common.c
parentpowerpc/mm/radix: remove useless kernel messages (diff)
downloadlinux-dev-5896163f7f91c0560cc41908c808661eee4c4121.tar.xz
linux-dev-5896163f7f91c0560cc41908c808661eee4c4121.zip
powerpc/xmon: Improve output of XIVE interrupts
When looping on the list of interrupts, add the current value of the PQ bits with a load on the ESB page. This has the side effect of faulting the ESB page of all interrupts. Signed-off-by: Cédric Le Goater <clg@kaod.org> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://lore.kernel.org/r/20190910081850.26038-2-clg@kaod.org
Diffstat (limited to '')
-rw-r--r--arch/powerpc/sysdev/xive/common.c29
1 files changed, 26 insertions, 3 deletions
diff --git a/arch/powerpc/sysdev/xive/common.c b/arch/powerpc/sysdev/xive/common.c
index f75a660365e5..b10919f08250 100644
--- a/arch/powerpc/sysdev/xive/common.c
+++ b/arch/powerpc/sysdev/xive/common.c
@@ -258,10 +258,33 @@ notrace void xmon_xive_do_dump(int cpu)
#endif
}
-int xmon_xive_get_irq_config(u32 irq, u32 *target, u8 *prio,
- u32 *sw_irq)
+int xmon_xive_get_irq_config(u32 hw_irq, struct irq_data *d)
{
- return xive_ops->get_irq_config(irq, target, prio, sw_irq);
+ int rc;
+ u32 target;
+ u8 prio;
+ u32 lirq;
+
+ rc = xive_ops->get_irq_config(hw_irq, &target, &prio, &lirq);
+ if (rc) {
+ xmon_printf("IRQ 0x%08x : no config rc=%d\n", hw_irq, rc);
+ return rc;
+ }
+
+ xmon_printf("IRQ 0x%08x : target=0x%x prio=%02x lirq=0x%x ",
+ hw_irq, target, prio, lirq);
+
+ if (d) {
+ struct xive_irq_data *xd = irq_data_get_irq_handler_data(d);
+ u64 val = xive_esb_read(xd, XIVE_ESB_GET);
+
+ xmon_printf("PQ=%c%c",
+ val & XIVE_ESB_VAL_P ? 'P' : '-',
+ val & XIVE_ESB_VAL_Q ? 'Q' : '-');
+ }
+
+ xmon_printf("\n");
+ return 0;
}
#endif /* CONFIG_XMON */