On Mon, Aug 21, 2006 at 11:12:03AM -0700, Auke Kok wrote: > Valerie Henson wrote: > >I'm trying to properly handle pci_enable_device() errors in the resume > >routines of a couple of tulip drivers. I noticed that several drivers > >pay attention to errors from pci_enable_device() in the init routine > >but ignore it on resume; other drivers vary wildly. What's proper > >behavior when resuming? Extant examples: > > > >0. Don't call pci_enable_device() at all (8139too) > >1. Ignore the return value (eepro100, many others) > >2. Check for failure and bail out, but return success (sungem) > > Digging through e1000 I spot that we even pci_enable_device after a PCI > error, so it is good practice I think to make sure the device is up. I > suppose that most people can live without explicit re-enabling the device > (most NICs are on anyway), but if we do enable it explicitly we should > certainly check the result code. Interestingly enough we failed to do this > in e1000, so I'll submit a patch for that later.
For people looking for how to implement this in their own driver, here's how I solved it in tulip (will submit later): --- drivers/net/tulip/tulip_core.c | 5 ++++- drivers/net/tulip/winbond-840.c | 10 +++++++--- 2 files changed, 11 insertions(+), 4 deletions(-) --- a/drivers/net/tulip/tulip_core.c +++ b/drivers/net/tulip/tulip_core.c @@ -1780,7 +1780,10 @@ static int tulip_resume(struct pci_dev * pci_set_power_state(pdev, PCI_D0); pci_restore_state(pdev); - pci_enable_device(pdev); + if ((retval = pci_enable_device(pdev))) { + printk (KERN_ERR "tulip: pci_enable_device failed in resume\n"); + return retval; + } if ((retval = request_irq(dev->irq, &tulip_interrupt, IRQF_SHARED, dev->name, dev))) { printk (KERN_ERR "tulip: request_irq failed in resume\n"); -VAL - To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html