Hi Bjorn Helgaas, Do you have any comments on this patch? On 2024/1/5 14:22, Chen, Jiqian wrote: > There is a need for some scenarios to use gsi sysfs. > For example, when xen passthrough a device to dumU, it will > use gsi to map pirq, but currently userspace can't get gsi > number. > So, add gsi sysfs for that and for other potential scenarios. > > Co-developed-by: Huang Rui <ray.huang@xxxxxxx> > Signed-off-by: Jiqian Chen <Jiqian.Chen@xxxxxxx> > --- > drivers/acpi/pci_irq.c | 1 + > drivers/pci/pci-sysfs.c | 11 +++++++++++ > include/linux/pci.h | 2 ++ > 3 files changed, 14 insertions(+) > > diff --git a/drivers/acpi/pci_irq.c b/drivers/acpi/pci_irq.c > index 630fe0a34bc6..739a58755df2 100644 > --- a/drivers/acpi/pci_irq.c > +++ b/drivers/acpi/pci_irq.c > @@ -449,6 +449,7 @@ int acpi_pci_irq_enable(struct pci_dev *dev) > kfree(entry); > return 0; > } > + dev->gsi = gsi; > > rc = acpi_register_gsi(&dev->dev, gsi, triggering, polarity); > if (rc < 0) { > diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c > index 2321fdfefd7d..c51df88d079e 100644 > --- a/drivers/pci/pci-sysfs.c > +++ b/drivers/pci/pci-sysfs.c > @@ -71,6 +71,16 @@ static ssize_t irq_show(struct device *dev, > } > static DEVICE_ATTR_RO(irq); > > +static ssize_t gsi_show(struct device *dev, > + struct device_attribute *attr, > + char *buf) > +{ > + struct pci_dev *pdev = to_pci_dev(dev); > + > + return sysfs_emit(buf, "%u\n", pdev->gsi); > +} > +static DEVICE_ATTR_RO(gsi); > + > static ssize_t broken_parity_status_show(struct device *dev, > struct device_attribute *attr, > char *buf) > @@ -596,6 +606,7 @@ static struct attribute *pci_dev_attrs[] = { > &dev_attr_revision.attr, > &dev_attr_class.attr, > &dev_attr_irq.attr, > + &dev_attr_gsi.attr, > &dev_attr_local_cpus.attr, > &dev_attr_local_cpulist.attr, > &dev_attr_modalias.attr, > diff --git a/include/linux/pci.h b/include/linux/pci.h > index dea043bc1e38..0618d4a87a50 100644 > --- a/include/linux/pci.h > +++ b/include/linux/pci.h > @@ -529,6 +529,8 @@ struct pci_dev { > > /* These methods index pci_reset_fn_methods[] */ > u8 reset_methods[PCI_NUM_RESET_METHODS]; /* In priority order */ > + > + unsigned int gsi; > }; > > static inline struct pci_dev *pci_physfn(struct pci_dev *dev) -- Best regards, Jiqian Chen.