From: Francois Romieu - enable Memory Write and Invalidate (disabled after reset); - fix wrong goto. Signed-off-by: Francois Romieu Signed-off-by: Andrew Morton --- 25-akpm/drivers/net/r8169.c | 17 +++++++++++------ 1 files changed, 11 insertions(+), 6 deletions(-) diff -puN drivers/net/r8169.c~r8169-enable-mwi drivers/net/r8169.c --- 25/drivers/net/r8169.c~r8169-enable-mwi 2004-08-24 19:18:37.576334680 -0700 +++ 25-akpm/drivers/net/r8169.c 2004-08-24 19:18:37.581333920 -0700 @@ -32,7 +32,6 @@ VERSION 1.2 <2002/11/30> - Use ether_crc in stock kernel (linux/crc32.h) - Copy mc_filter setup code from 8139cp (includes an optimization, and avoids set_bit use) - */ #include @@ -963,6 +962,10 @@ rtl8169_init_board(struct pci_dev *pdev, goto err_out_free_dev; } + rc = pci_set_mwi(pdev); + if (rc < 0) + goto err_out_disable; + /* save power state before pci_enable_device overwrites it */ pm_cap = pci_find_capability(pdev, PCI_CAP_ID_PM); if (pm_cap) { @@ -973,7 +976,7 @@ rtl8169_init_board(struct pci_dev *pdev, } else { printk(KERN_ERR PFX "Cannot find PowerManagement capability, aborting.\n"); - goto err_out_free_res; + goto err_out_mwi; } // make sure PCI base addr 1 is MMIO @@ -981,20 +984,20 @@ rtl8169_init_board(struct pci_dev *pdev, printk(KERN_ERR PFX "region #1 not an MMIO resource, aborting\n"); rc = -ENODEV; - goto err_out_disable; + goto err_out_mwi; } // check for weird/broken PCI region reporting if (pci_resource_len(pdev, 1) < R8169_REGS_SIZE) { printk(KERN_ERR PFX "Invalid PCI region size(s), aborting\n"); rc = -ENODEV; - goto err_out_disable; + goto err_out_mwi; } rc = pci_request_regions(pdev, MODULENAME); if (rc) { printk(KERN_ERR PFX "%s: could not request regions.\n", pdev->slot_name); - goto err_out_disable; + goto err_out_mwi; } tp->cp_cmd = PCIMulRW | RxChkSum; @@ -1011,7 +1014,6 @@ rtl8169_init_board(struct pci_dev *pdev, } - // enable PCI bus-mastering pci_set_master(pdev); // ioremap MMIO region @@ -1062,6 +1064,9 @@ out: err_out_free_res: pci_release_regions(pdev); +err_out_mwi: + pci_clear_mwi(pdev); + err_out_disable: pci_disable_device(pdev); _