From: David Brownell <dbrown...@users.sourceforge.net>

Do spinlock initialization during davinci_emac::probe(), when
the lock is allocated, not each time it's opened.  That's the
correct place to do such work.

More significantly, fix a bug: one of the three spinlocks was
never getting initialized, preventing the system from booting
in some cases (e.g. running with lockdep).

Signed-off-by: David Brownell <dbrown...@users.sourceforge.net>
---
Let this be a reminder to developers:  run lockdep routinely,
if not all the time.  It exposes many more bugs than it hides.

 drivers/net/davinci_emac.c |    7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

--- a/drivers/net/davinci_emac.c
+++ b/drivers/net/davinci_emac.c
@@ -2402,9 +2402,6 @@ static int emac_dev_open(struct net_devi
        for (cnt = 0; cnt <= ETH_ALEN; cnt++)
                ndev->dev_addr[cnt] = priv->mac_addr[cnt];
 
-       spin_lock_init(&priv->tx_lock);
-       spin_lock_init(&priv->rx_lock);
-
        /* Configuration items */
        priv->rx_buf_size = EMAC_DEF_MAX_FRAME_SIZE + EMAC_DEF_EXTRA_RXBUF_SIZE;
 
@@ -2631,6 +2628,10 @@ static int __devinit davinci_emac_probe(
        priv->ndev = ndev;
        priv->msg_enable = netif_msg_init(debug_level, DAVINCI_EMAC_DEBUG);
 
+       spin_lock_init(&priv->tx_lock);
+       spin_lock_init(&priv->rx_lock);
+       spin_lock_init(&priv->lock);
+
        /* MAC addr: from platform_data */
        if (pdev->dev.platform_data) {
                struct emac_platform_data *pdata = pdev->dev.platform_data;

_______________________________________________
Davinci-linux-open-source mailing list
Davinci-linux-open-source@linux.davincidsp.com
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source

Reply via email to