On Monday, July 15, 2013 10:57:40 AM Prarit Bhargava wrote: > Driver probe's currently do the following > > pci_enable_device(); > /* ... do some other init stuff, and eventually call ... */ > request_irq(); > > After pci_enable_device() is called it is assumed that the device's irq > value (pci_dev->irq) has been appropriately set on success. This value > is passed into the request_irq() call. > > In the case that ACPI is used to determine the irq value, it is possible > that the ACPI IRQ look up for a specific device fails and success is > returned by pci_enable_device(). > > The call sequence is: > > pci_enable_device(); > -> pci_enable_device_flags(); > ->do_pci_enable_device(); > -> pcibios_enable_device() which, if the device > does not use MSI calls > -> pcibios_enable_irq() which maps to > acpi_pci_irq_enable() > -> acpi_pci_irq_lookup() > > If acpi_pci_irq_lookup() cannot map the device's IRQ value it returns NULL > as an error. The error is returned to acpi_pci_irq_enable(), but is not > propagated further. This can result in the driver returning success for > pci_enable_device() and the driver probe attempting to call request_irq() > with dev->irq = 0. > > This patch modifies acpi_pci_irq_enable() to return an error in the case > that an entry is not found in the ACPI tables. Is there any known system on which this leads to observable misbehavior? If so, what's that system? Rafael > Signed-off-by: Prarit Bhargava <prarit@xxxxxxxxxx> > Cc: Len Brown <lenb@xxxxxxxxxx> > Cc: "Rafael J. Wysocki" <rjw@xxxxxxx> > Cc: "Bjorn Helgaas" <bhelgaas@xxxxxxxxxx> > Cc: "Myron Stowe" <mstowe@xxxxxxxxxx> > Cc: linux-pci@xxxxxxxxxxxxxxx > --- > drivers/acpi/pci_irq.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/drivers/acpi/pci_irq.c b/drivers/acpi/pci_irq.c > index 41c5e1b..9681847 100644 > --- a/drivers/acpi/pci_irq.c > +++ b/drivers/acpi/pci_irq.c > @@ -430,6 +430,7 @@ int acpi_pci_irq_enable(struct pci_dev *dev) > } else { > dev_warn(&dev->dev, "PCI INT %c: no GSI\n", > pin_name(pin)); > + return -ENOENT; > } > > return 0; > -- I speak only for myself. Rafael J. Wysocki, Intel Open Source Technology Center. -- To unsubscribe from this list: send the line "unsubscribe linux-acpi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html