[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <20250302020328.296523-1-18255117159@163.com>
Date: Sun, 2 Mar 2025 10:03:28 +0800
From: Hans Zhang <18255117159@....com>
To: tglx@...utronix.de
Cc: manivannan.sadhasivam@...aro.org,
kw@...ux.com,
kwilczynski@...nel.org,
bhelgaas@...gle.com,
Frank.Li@....com,
cassel@...nel.org,
linux-pci@...r.kernel.org,
linux-kernel@...r.kernel.org,
Hans Zhang <18255117159@....com>,
kernel test robot <lkp@...el.com>
Subject: [v3] genirq/msi: Add the address and data that show MSI/MSIX
The debug_show() callback function is implemented in the MSI core code.
And assign it to the domain ops::debug_show() creation.
cat /sys/kernel/debug/irq/irqs/msi_irq_num, the address and data stored
in the MSI capability or the address and data stored in the MSIX vector
table will be displayed.
e.g.
root@...t:/sys/kernel/debug/irq/irqs# cat /proc/interrupts | grep ITS
85: 0 0 0 0 0 0 0 0 0 0 0 0 ITS-MSI 75497472 Edge PCIe PME, aerdrv
86: 0 30 0 0 0 0 0 0 0 0 0 0 ITS-MSI 76021760 Edge nvme0q0
87: 287 0 0 0 0 0 0 0 0 0 0 0 ITS-MSI 76021761 Edge nvme0q1
88: 0 265 0 0 0 0 0 0 0 0 0 0 ITS-MSI 76021762 Edge nvme0q2
89: 0 0 177 0 0 0 0 0 0 0 0 0 ITS-MSI 76021763 Edge nvme0q3
90: 0 0 0 76 0 0 0 0 0 0 0 0 ITS-MSI 76021764 Edge nvme0q4
91: 0 0 0 0 161 0 0 0 0 0 0 0 ITS-MSI 76021765 Edge nvme0q5
92: 0 0 0 0 0 991 0 0 0 0 0 0 ITS-MSI 76021766 Edge nvme0q6
93: 0 0 0 0 0 0 194 0 0 0 0 0 ITS-MSI 76021767 Edge nvme0q7
94: 0 0 0 0 0 0 0 94 0 0 0 0 ITS-MSI 76021768 Edge nvme0q8
95: 0 0 0 0 0 0 0 0 148 0 0 0 ITS-MSI 76021769 Edge nvme0q9
96: 0 0 0 0 0 0 0 0 0 261 0 0 ITS-MSI 76021770 Edge nvme0q10
97: 0 0 0 0 0 0 0 0 0 0 127 0 ITS-MSI 76021771 Edge nvme0q11
98: 0 0 0 0 0 0 0 0 0 0 0 317 ITS-MSI 76021772 Edge nvme0q12
root@...t:/sys/kernel/debug/irq/irqs#
root@...t:/sys/kernel/debug/irq/irqs# cat 87
handler: handle_fasteoi_irq
device: 0000:91:00.0
status: 0x00000000
istate: 0x00004000
ddepth: 0
wdepth: 0
dstate: 0x31600200
IRQD_ACTIVATED
IRQD_IRQ_STARTED
IRQD_SINGLE_TARGET
IRQD_AFFINITY_MANAGED
IRQD_AFFINITY_ON_ACTIVATE
IRQD_HANDLE_ENFORCE_IRQCTX
node: 0
affinity: 0
effectiv: 0
domain: :soc@0:interrupt-controller@...01000:its@...50000-3
hwirq: 0x4880001
chip: ITS-MSI
flags: 0x20
IRQCHIP_ONESHOT_SAFE
msix:
address_hi: 0x00000000
address_lo: 0x0e060040
msg_data: 0x00000001
parent:
domain: :soc@0:interrupt-controller@...01000:its@...50000-5
hwirq: 0x2002
chip: ITS
flags: 0x0
parent:
domain: :soc@0:interrupt-controller@...01000-1
hwirq: 0x2002
chip: GICv3
flags: 0x15
IRQCHIP_SET_TYPE_MASKED
IRQCHIP_MASK_ON_SUSPEND
IRQCHIP_SKIP_SET_WAKE
Reported-by: kernel test robot <lkp@...el.com>
Closes: https://lore.kernel.org/oe-kbuild-all/202503020812.PKZf7JBa-lkp@intel.com/
Closes: https://lore.kernel.org/oe-kbuild-all/202503020807.c3MhmbJh-lkp@intel.com/
Signed-off-by: Hans Zhang <18255117159@....com>
---
Changes since v2:
https://lore.kernel.org/linux-pci/20250301123953.291675-1-18255117159@163.com/
- Fix implicit declaration of function 'seq_printf'.
- Fix 'const struct irq_domain_ops' has no member named 'debug_show'.
Changes since v1:
https://lore.kernel.org/linux-pci/20250227162821.253020-1-18255117159@163.com/
- According to Thomas(tglx), the debug_show() callback should be added
to the MSI core code.
---
kernel/irq/msi.c | 23 +++++++++++++++++++++++
1 file changed, 23 insertions(+)
diff --git a/kernel/irq/msi.c b/kernel/irq/msi.c
index 396a067a8a56..b1c7fd3b8243 100644
--- a/kernel/irq/msi.c
+++ b/kernel/irq/msi.c
@@ -15,6 +15,7 @@
#include <linux/mutex.h>
#include <linux/pci.h>
#include <linux/slab.h>
+#include <linux/seq_file.h>
#include <linux/sysfs.h>
#include <linux/types.h>
#include <linux/xarray.h>
@@ -756,12 +757,34 @@ static int msi_domain_translate(struct irq_domain *domain, struct irq_fwspec *fw
return info->ops->msi_translate(domain, fwspec, hwirq, type);
}
+#ifdef CONFIG_GENERIC_IRQ_DEBUGFS
+static void msi_domain_debug_show(struct seq_file *m, struct irq_domain *d,
+ struct irq_data *irqd, int ind)
+{
+ struct msi_desc *desc;
+ bool is_msix;
+
+ desc = irq_get_msi_desc(irqd->irq);
+ if (!desc)
+ return;
+
+ is_msix = desc->pci.msi_attrib.is_msix;
+ seq_printf(m, "%*s%s:", ind, "", is_msix ? "msix" : "msi");
+ seq_printf(m, "\n%*saddress_hi: 0x%08x", ind + 1, "", desc->msg.address_hi);
+ seq_printf(m, "\n%*saddress_lo: 0x%08x", ind + 1, "", desc->msg.address_lo);
+ seq_printf(m, "\n%*smsg_data: 0x%08x\n", ind + 1, "", desc->msg.data);
+}
+#endif
+
static const struct irq_domain_ops msi_domain_ops = {
.alloc = msi_domain_alloc,
.free = msi_domain_free,
.activate = msi_domain_activate,
.deactivate = msi_domain_deactivate,
.translate = msi_domain_translate,
+#ifdef CONFIG_GENERIC_IRQ_DEBUGFS
+ .debug_show = msi_domain_debug_show,
+#endif
};
static irq_hw_number_t msi_domain_ops_get_hwirq(struct msi_domain_info *info,
base-commit: 76544811c850a1f4c055aa182b513b7a843868ea
--
2.25.1
Powered by blists - more mailing lists