From patchwork Mon Feb 18 10:09:53 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: pci: do not try to assign irq 255 Date: Mon, 18 Feb 2013 00:09:53 -0000 From: Hannes Reinecke X-Patchwork-Id: 221183 Message-Id: <1361182193-31894-1-git-send-email-hare@suse.de> To: linux-kernel@vger.kernel.org Cc: Hannes Reinecke , Frederik Himpe , Oliver Neukum , David Haerdeman , linux-usb@vger.kernel.org, linux-pci@vger.kernel.org The PCI config space reseves a byte for the interrupt line, so irq 255 actually refers to 'not set'. However, the 'irq' field for struct pci_dev is an integer, so the original meaning is lost, causing the system to assign an interrupt '255', which fails. So we should _not_ assign an interrupt value here, and allow upper layers to fixup things. This patch make PCI devices with MSI interrupts only (like the xhci device on certain HP laptops) work properly. Cc: Frederik Himpe Cc: Oliver Neukum Cc: David Haerdeman Cc: linux-usb@vger.kernel.org Cc: linux-pci@vger.kernel.org Signed-off-by: Hannes Reinecke Tested-by: David Härdeman --- To unsubscribe from this list: send the line "unsubscribe linux-pci" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c index 6186f03..a2db887f 100644 --- a/drivers/pci/probe.c +++ b/drivers/pci/probe.c @@ -923,7 +923,8 @@ static void pci_read_irq(struct pci_dev *dev) dev->pin = irq; if (irq) pci_read_config_byte(dev, PCI_INTERRUPT_LINE, &irq); - dev->irq = irq; + if (irq < 255) + dev->irq = irq; } void set_pcie_port_type(struct pci_dev *pdev)