lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <251ce5c0-8c10-4b29-9ffb-592e908187fd@163.com>
Date: Fri, 28 Feb 2025 17:04:41 +0800
From: Hans Zhang <18255117159@....com>
To: Thomas Gleixner <tglx@...utronix.de>,
 Manivannan Sadhasivam <manivannan.sadhasivam@...aro.org>
Cc: kw@...ux.com, kwilczynski@...nel.org, bhelgaas@...gle.com,
 cassel@...nel.org, linux-pci@...r.kernel.org, linux-kernel@...r.kernel.org
Subject: Re: [PATCH] genirq/msi: Add the address and data that show MSI/MSIX



On 2025/2/28 01:51, Thomas Gleixner wrote:
> On Thu, Feb 27 2025 at 22:09, Manivannan Sadhasivam wrote:
>> On Fri, Feb 28, 2025 at 12:28:21AM +0800, Hans Zhang wrote:
>>> +	return sysfs_emit(
>>> +		buf,
>>> +		"%s\n address_hi: 0x%08x\n address_lo: 0x%08x\n msg_data: 0x%08x\n",
>>> +		is_msix ? "msix" : "msi", desc->msg.address_hi,
>>> +		desc->msg.address_lo, desc->msg.data);
>>
>> Sysfs is an ABI. You cannot change the semantics of an attribute.
> 
> Correct. Aside of that this is debug information and has no business in
> sysfs.
> 
> The obvious place to expose this is via the existing debugfs irq/*
> mechanism. All it requires is to implement a debug_show() callback in
> the MSI core code and assign it to domain ops::debug_show() on domain
> creation, if it does not provide its own callback.

Hi Thomas(tglx),

Is the following patch OK? Please give me some advice. Thank you very much.

Best regards
Hans


patch:

diff --git a/kernel/irq/debugfs.c b/kernel/irq/debugfs.c
index ca142b9a4db3..447fa24520f4 100644
--- a/kernel/irq/debugfs.c
+++ b/kernel/irq/debugfs.c
@@ -3,6 +3,7 @@

  #include <linux/irqdomain.h>
  #include <linux/irq.h>
+#include <linux/msi.h>
  #include <linux/uaccess.h>

  #include "internals.h"
@@ -56,6 +57,26 @@ static const struct irq_bit_descr irqchip_flags[] = {
         BIT_MASK_DESCR(IRQCHIP_MOVE_DEFERRED),
  };

+static void irq_debug_show_msi_msix(struct seq_file *m, struct irq_data 
*data,
+                                   int ind)
+{
+       struct msi_desc *desc;
+       bool is_msix;
+
+       desc = irq_get_msi_desc(data->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);
+}
+
  static void
  irq_debug_show_chip(struct seq_file *m, struct irq_data *data, int ind)
  {
@@ -178,6 +199,7 @@ static int irq_debug_show(struct seq_file *m, void *p)
         seq_printf(m, "node:     %d\n", irq_data_get_node(data));
         irq_debug_show_masks(m, desc);
         irq_debug_show_data(m, data, 0);
+       irq_debug_show_msi_msix(m, data, 0);
         raw_spin_unlock_irq(&desc->lock);
         return 0;
  }




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:        682          0          0          0          0          0 
         0          0          0          0          0          0 
ITS-MSI 76021761 Edge      nvme0q1
  88:          0        400          0          0          0          0 
         0          0          0          0          0          0 
ITS-MSI 76021762 Edge      nvme0q2
  89:          0          0        246          0          0          0 
         0          0          0          0          0          0 
ITS-MSI 76021763 Edge      nvme0q3
  90:          0          0          0        141          0          0 
         0          0          0          0          0          0 
ITS-MSI 76021764 Edge      nvme0q4
  91:          0          0          0          0        177          0 
         0          0          0          0          0          0 
ITS-MSI 76021765 Edge      nvme0q5
  92:          0          0          0          0          0        173 
         0          0          0          0          0          0 
ITS-MSI 76021766 Edge      nvme0q6
  93:          0          0          0          0          0          0 
       374          0          0          0          0          0 
ITS-MSI 76021767 Edge      nvme0q7
  94:          0          0          0          0          0          0 
         0         62          0          0          0          0 
ITS-MSI 76021768 Edge      nvme0q8
  95:          0          0          0          0          0          0 
         0          0        137          0          0          0 
ITS-MSI 76021769 Edge      nvme0q9
  96:          0          0          0          0          0          0 
         0          0          0        177          0          0 
ITS-MSI 76021770 Edge      nvme0q10
  97:          0          0          0          0          0          0 
         0          0          0          0        403          0 
ITS-MSI 76021771 Edge      nvme0q11
  98:          0          0          0          0          0          0 
         0          0          0          0          0        246 
ITS-MSI 76021772 Edge      nvme0q12
root@...t:/sys/kernel/debug/irq/irqs# cat 86
handler:  handle_fasteoi_irq
device:   0000:91:00.0
status:   0x00000000
istate:   0x00004000
ddepth:   0
wdepth:   0
dstate:   0x31401200
             IRQD_ACTIVATED
             IRQD_IRQ_STARTED
             IRQD_SINGLE_TARGET
             IRQD_AFFINITY_SET
             IRQD_AFFINITY_ON_ACTIVATE
             IRQD_HANDLE_ENFORCE_IRQCTX
node:     0
affinity: 6
effectiv: 6
domain:  :soc@0:interrupt-controller@...01000:its@...50000-3
  hwirq:   0x4880000
  chip:    ITS-MSI
   flags:   0x20
              IRQCHIP_ONESHOT_SAFE
  parent:
     domain:  :soc@0:interrupt-controller@...01000:its@...50000-5
      hwirq:   0x2001
      chip:    ITS
       flags:   0x0
      parent:
         domain:  :soc@0:interrupt-controller@...01000-1
          hwirq:   0x2001
          chip:    GICv3
           flags:   0x15
                      IRQCHIP_SET_TYPE_MASKED
                      IRQCHIP_MASK_ON_SUSPEND
                      IRQCHIP_SKIP_SET_WAKE
msix:
  address_hi: 0x00000000
  address_lo: 0x0e060040
  msg_data: 0x00000000
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
  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
msix:
  address_hi: 0x00000000
  address_lo: 0x0e060040
  msg_data: 0x00000001
root@...t:/sys/kernel/debug/irq/irqs#
root@...t:/sys/kernel/debug/irq/irqs# cat 88
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: 1
effectiv: 1
domain:  :soc@0:interrupt-controller@...01000:its@...50000-3
  hwirq:   0x4880002
  chip:    ITS-MSI
   flags:   0x20
              IRQCHIP_ONESHOT_SAFE
  parent:
     domain:  :soc@0:interrupt-controller@...01000:its@...50000-5
      hwirq:   0x2003
      chip:    ITS
       flags:   0x0
      parent:
         domain:  :soc@0:interrupt-controller@...01000-1
          hwirq:   0x2003
          chip:    GICv3
           flags:   0x15
                      IRQCHIP_SET_TYPE_MASKED
                      IRQCHIP_MASK_ON_SUSPEND
                      IRQCHIP_SKIP_SET_WAKE
msix:
  address_hi: 0x00000000
  address_lo: 0x0e060040
  msg_data: 0x00000002
root@...t:/sys/kernel/debug/irq/irqs# cat 89
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: 2
effectiv: 2
domain:  :soc@0:interrupt-controller@...01000:its@...50000-3
  hwirq:   0x4880003
  chip:    ITS-MSI
   flags:   0x20
              IRQCHIP_ONESHOT_SAFE
  parent:
     domain:  :soc@0:interrupt-controller@...01000:its@...50000-5
      hwirq:   0x2004
      chip:    ITS
       flags:   0x0
      parent:
         domain:  :soc@0:interrupt-controller@...01000-1
          hwirq:   0x2004
          chip:    GICv3
           flags:   0x15
                      IRQCHIP_SET_TYPE_MASKED
                      IRQCHIP_MASK_ON_SUSPEND
                      IRQCHIP_SKIP_SET_WAKE
msix:
  address_hi: 0x00000000
  address_lo: 0x0e060040
  msg_data: 0x00000003




Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ