From Bugzilla Helper: User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.7.5) Gecko/20041110 Firefox/1.0 Description of problem: At shutdown/restart I'm getting a kernel oops with the via-rhine driver and the D-Link DFE-530TX card. This happens on two different machines, one with an i386 kernel and one with an x86_64 kernel. For the x86_64 machine I get: Unable to handle kernel paging request at ffffff000001b021 RIP: <ffffffffa00a10ed>:{via_rhine:rhine_shutdown+108} Version-Release number of selected component (if applicable): kernel-2.6.9-1.678_FC3 How reproducible: Always Steps to Reproduce: 1. Shut down with DFE-530TX card installed. Actual Results: Kernel oops Expected Results: Normal shutdown Additional info: The problem seems to be in static struct pci_driver rhine_driver = { .name = DRV_NAME, .id_table = rhine_pci_tbl, .probe = rhine_init_one, .remove = __devexit_p(rhine_remove_one), #ifdef CONFIG_PM .suspend = rhine_suspend, .resume = rhine_resume, #endif /* CONFIG_PM */ .driver = { .shutdown = rhine_shutdown, } }; The last line causes the kernel to call rhine_shutdown when the system is shutting down, and that's where it crashes. If I rem out the .shutdown line, it works. That function seems to be concerned with setting wake-on-lan.
The problem was caused by old non-WOL chipsets. The shutdown routine tried to set it up even if it wasn't supported. The current patch checks first. --- linux-2.6.11.orig/drivers/net/via-rhine.c 2005-03-02 01:38:32.000000000 -0600 +++ linux-2.6.11/drivers/net/via-rhine.c 2005-03-05 12:25:34.000000000 -0600 @@ -1899,6 +1899,9 @@ struct rhine_private *rp = netdev_priv(dev); void __iomem *ioaddr = rp->base; + if (!(rp->quirks & rqWOL)) + return; /* Nothing to do for non-WOL adapters */ + rhine_power_init(dev); /* Make sure we use pattern 0, 1 and not 4, 5 */