diff mbox series

[v3] genirq/msi: Add the address and data that show MSI/MSIX

Message ID 20250302020328.296523-1-18255117159@163.com (mailing list archive)
State Superseded
Delegated to: Bjorn Helgaas
Headers show
Series [v3] genirq/msi: Add the address and data that show MSI/MSIX | expand

Commit Message

Hans Zhang March 2, 2025, 2:03 a.m. UTC
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@root:/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@root:/sys/kernel/debug/irq/irqs#
root@root:/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@0e001000:its@0e050000-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@0e001000:its@0e050000-5
     hwirq:   0x2002
     chip:    ITS
      flags:   0x0
     parent:
        domain:  :soc@0:interrupt-controller@0e001000-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@intel.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@163.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(+)


base-commit: 76544811c850a1f4c055aa182b513b7a843868ea

Comments

Thomas Gleixner March 2, 2025, 2:13 p.m. UTC | #1
On Sun, Mar 02 2025 at 10:03, Hans Zhang wrote:

Previous comments still apply.

> Reported-by: kernel test robot <lkp@intel.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/

That's wrong. You are not submitting this patch as a response to a
report from the test robot. Reported/Closes makes only sense for a patch
which fixes something existing, but not for a new feature or functionality.

Thanks,

        tglx
Hans Zhang March 2, 2025, 2:40 p.m. UTC | #2
On 2025/3/2 22:13, Thomas Gleixner wrote:
> On Sun, Mar 02 2025 at 10:03, Hans Zhang wrote:
> 
> Previous comments still apply.
> 
>> Reported-by: kernel test robot <lkp@intel.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/
> 
> That's wrong. You are not submitting this patch as a response to a
> report from the test robot. Reported/Closes makes only sense for a patch
> which fixes something existing, but not for a new feature or functionality.
> 
> Thanks,
> 
>          tglx

Oh, I misunderstood. Thank you for reminding me.

Best regards
Hans
diff mbox series

Patch

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,