Bug 139977 - Oops in via-rhine at shutdown
Summary: Oops in via-rhine at shutdown
Keywords:
Status: CLOSED CURRENTRELEASE
Alias: None
Product: Fedora
Classification: Fedora
Component: kernel
Version: 3
Hardware: All
OS: Linux
medium
medium
Target Milestone: ---
Assignee: Dave Jones
QA Contact: Brian Brock
URL:
Whiteboard:
Depends On:
Blocks:
TreeView+ depends on / blocked
 
Reported: 2004-11-18 23:40 UTC by Alan Hamilton
Modified: 2015-01-04 22:12 UTC (History)
2 users (show)

Fixed In Version: 2.6.11-1.14_FC3
Doc Type: Bug Fix
Doc Text:
Clone Of:
Environment:
Last Closed: 2005-04-13 05:27:38 UTC
Type: ---
Embargoed:


Attachments (Terms of Use)

Description Alan Hamilton 2004-11-18 23:40:35 UTC
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.

Comment 1 Alan Hamilton 2005-04-13 05:27:38 UTC
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 */


Note You need to log in before you can comment on or make changes to this bug.