On 2025/2/27 04:01, Jason Andryuk wrote: > A PCI may not have a legacy IRQ. In that case, do not fail assigning > to the pciback stub. Instead just skip xen_pvh_setup_gsi(). > > This will leave psdev->gsi == -1. In that case, when reading the value > via IOCTL_PRIVCMD_PCIDEV_GET_GSI, return -ENOENT. Userspace can used > this to distinquish from other errors. > > Fixes: b166b8ab4189 ("xen/pvh: Setup gsi for passthrough device") > Cc: stable@xxxxxxxxxxxxxxx > Signed-off-by: Jason Andryuk <jason.andryuk@xxxxxxx> > --- > drivers/xen/acpi.c | 4 ++-- > drivers/xen/xen-pciback/pci_stub.c | 17 ++++++++++------- > 2 files changed, 12 insertions(+), 9 deletions(-) > > diff --git a/drivers/xen/acpi.c b/drivers/xen/acpi.c > index d2ee605c5ca1..d6ab0cb3ba3f 100644 > --- a/drivers/xen/acpi.c > +++ b/drivers/xen/acpi.c > @@ -101,7 +101,7 @@ int xen_acpi_get_gsi_info(struct pci_dev *dev, > > pin = dev->pin; > if (!pin) > - return -EINVAL; > + return -ENOENT; > > entry = acpi_pci_irq_lookup(dev, pin); > if (entry) { > @@ -116,7 +116,7 @@ int xen_acpi_get_gsi_info(struct pci_dev *dev, > gsi = -1; > > if (gsi < 0) > - return -EINVAL; > + return -ENOENT; > > *gsi_out = gsi; > *trigger_out = trigger; > diff --git a/drivers/xen/xen-pciback/pci_stub.c b/drivers/xen/xen-pciback/pci_stub.c > index b616b7768c3b..9715c2f70586 100644 > --- a/drivers/xen/xen-pciback/pci_stub.c > +++ b/drivers/xen/xen-pciback/pci_stub.c > @@ -240,6 +240,9 @@ static int pcistub_get_gsi_from_sbdf(unsigned int sbdf) > if (!psdev) > return -ENODEV; > > + if (psdev->gsi == -1) > + return -ENOENT; > + > return psdev->gsi; > } > #endif > @@ -475,14 +478,14 @@ static int pcistub_init_device(struct pcistub_device *psdev) > #ifdef CONFIG_XEN_ACPI > if (xen_initial_domain() && xen_pvh_domain()) { > err = xen_acpi_get_gsi_info(dev, &gsi, &trigger, &polarity); > - if (err) { > - dev_err(&dev->dev, "Fail to get gsi info!\n"); > - goto config_release; > + if (err && err != -ENOENT) { > + dev_err(&dev->dev, "Failed to get gsi info! %d\n", err); I think here needs " goto config_release;" since it is not ENOENT error. > + } else if (!err) { > + err = xen_pvh_setup_gsi(gsi, trigger, polarity); > + if (err) > + goto config_release; > + psdev->gsi = gsi; > } > - err = xen_pvh_setup_gsi(gsi, trigger, polarity); > - if (err) > - goto config_release; > - psdev->gsi = gsi; > } > #endif > -- Best regards, Jiqian Chen.