Patchwork [stable,2.6.27.y] don't take the mdio_lock in atl1e_probe

login
register
mail settings
Submitter Jay Cliburn
Date Oct. 11, 2008, 2:55 p.m.
Message ID <20081011095507.77adc6fd@osprey.hogchain.net>
Download mbox | patch
Permalink /patch/4008/
State Not Applicable
Delegated to: David Miller
Headers show

Comments

Jay Cliburn - Oct. 11, 2008, 2:55 p.m.
From: Matthew Wilcox <matthew@wil.cx>

Upstream commit: f382a0a8e9403c6d7f8b2cfa21e41fefb5d0c9bd

This fixes bug 11736.

http://marc.info/?l=linux-netdev&m=122367387219316&w=2

Lockdep warns about the mdio_lock taken with interrupts enabled then later
taken from interrupt context.  Initially, I considered changing these
to spin_lock_irq/spin_unlock_irq, but then I looked at atl1e_phy_init()
and saw that it calls msleep().  Sleeping while holding a spinlock is
not allowed either.

In the probe path, we haven't registered the interrupt handler, so
it can't poke at this card yet.  It's before we call register_netdev(),
so I don't think any other threads can reach this card either.  If I'm
right, we don't need a spinlock at all.

Signed-off-by: Matthew Wilcox <willy@linux.intel.com>
Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
---
 drivers/net/atl1e/atl1e_main.c |    2 --
 1 files changed, 0 insertions(+), 2 deletions(-)

--
1.5.5.1
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Patch

diff --git a/drivers/net/atl1e/atl1e_main.c b/drivers/net/atl1e/atl1e_main.c
index 7685b99..9b60352 100644
--- a/drivers/net/atl1e/atl1e_main.c
+++ b/drivers/net/atl1e/atl1e_main.c
@@ -2390,9 +2390,7 @@  static int __devinit atl1e_probe(struct pci_dev *pdev,
        }

        /* Init GPHY as early as possible due to power saving issue  */
-       spin_lock(&adapter->mdio_lock);
        atl1e_phy_init(&adapter->hw);
-       spin_unlock(&adapter->mdio_lock);
        /* reset the controller to
         * put the device in a known good starting state */
        err = atl1e_reset_hw(&adapter->hw);