Index: linux_2_4/drivers/net/eepro100.c diff -u linux_2_4/drivers/net/eepro100.c:1.1.1.9 linux_2_4/drivers/net/eepro100.c:1.1.1.9.42.4 --- linux_2_4/drivers/net/eepro100.c:1.1.1.9 Sat Nov 25 15:53:20 2000 +++ linux_2_4/drivers/net/eepro100.c Sat Jan 27 08:27:00 2001 @@ -560,6 +560,9 @@ if (speedo_debug > 0 && did_version++ == 0) printk(version); + if (pci_enable_device(pdev)) + return -EIO; + if (!request_region(pci_resource_start(pdev, 1), pci_resource_len(pdev, 1), "eepro100")) { printk (KERN_ERR "eepro100: cannot reserve I/O ports\n"); @@ -598,9 +601,6 @@ acpi_idle_state = pwr_command & PCI_PM_CTRL_STATE_MASK; } - if (pci_enable_device(pdev)) - goto err_out_free_mmio_region; - pci_set_master(pdev); if (speedo_found1(pdev, ioaddr, cards_found, acpi_idle_state) == 0) @@ -2146,6 +2146,13 @@ struct net_device *dev = pdev->driver_data; struct speedo_private *sp = (struct speedo_private *)dev->priv; long ioaddr = dev->base_addr; + + /* Make sure power state is D0, a.k.a. alive, and also + * make sure PIO and MMIO are active. Apparently some + * cases exist where PCI_COMMAND_{IO,MEM} is not set when + * we return from resume. -jgarzik + */ + pci_enable_device(pdev); /* I'm absolutely uncertain if this part of code may work. The problems are: