From: Bjorn Helgaas Add pci_enable_device()/pci_disable_device(). In the past, drivers often worked without this, but it is now required in order to route PCI interrupts correctly. Signed-off-by: Bjorn Helgaas Signed-off-by: Andrew Morton --- 25-akpm/drivers/net/tulip/de4x5.c | 12 ++++++++++-- 1 files changed, 10 insertions(+), 2 deletions(-) diff -puN drivers/net/tulip/de4x5.c~de4x5c-add-missing-pci_enable_device drivers/net/tulip/de4x5.c --- 25/drivers/net/tulip/de4x5.c~de4x5c-add-missing-pci_enable_device Wed Aug 4 16:33:55 2004 +++ 25-akpm/drivers/net/tulip/de4x5.c Wed Aug 4 16:33:55 2004 @@ -2242,8 +2242,13 @@ static int __devinit de4x5_pci_probe (st return -ENODEV; /* Ok, the device seems to be for us. */ - if (!(dev = alloc_etherdev (sizeof (struct de4x5_private)))) - return -ENOMEM; + if (pci_enable_device (pdev)) + return -ENODEV; + + if (!(dev = alloc_etherdev (sizeof (struct de4x5_private)))) { + error = -ENOMEM; + goto disable_dev; + } lp = netdev_priv(dev); lp->bus = PCI; @@ -2327,6 +2332,8 @@ static int __devinit de4x5_pci_probe (st release_region (iobase, DE4X5_PCI_TOTAL_SIZE); free_dev: free_netdev (dev); + disable_dev: + pci_disable_device (pdev); return error; } @@ -2341,6 +2348,7 @@ static void __devexit de4x5_pci_remove ( unregister_netdev (dev); free_netdev (dev); release_region (iobase, DE4X5_PCI_TOTAL_SIZE); + pci_disable_device (pdev); } static struct pci_device_id de4x5_pci_tbl[] = { _