gianfar: Call netif_carrier_off() prior to registration
authorFabio Estevam <fabio.estevam@freescale.com>
Tue, 3 Jun 2014 22:55:38 +0000 (19:55 -0300)
committerDavid S. Miller <davem@davemloft.net>
Thu, 5 Jun 2014 22:03:46 +0000 (15:03 -0700)
Quoting David Miller:
"At the moment you call register_netdev() the device is visible, notifications
are sent to userspace, and userland tools can try to bring the interface up
and see the incorrect link state, before you do the netif_carrier_off().

Said another way, between the register_netdev() and netif_carrier_off() call,
userspace can see the device in an inconsistent state."

So call netif_carrier_off() prior to register_netdev().

Signed-off-by: Fabio Estevam <fabio.estevam@freescale.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/freescale/gianfar.c

index e2d42475b006aa7a79f16b48ad618580d64c7593..c81625ade4a36b517c32a5cb127376cdac7955f2 100644 (file)
@@ -1373,6 +1373,9 @@ static int gfar_probe(struct platform_device *ofdev)
 
        gfar_hw_init(priv);
 
+       /* Carrier starts down, phylib will bring it up */
+       netif_carrier_off(dev);
+
        err = register_netdev(dev);
 
        if (err) {
@@ -1380,9 +1383,6 @@ static int gfar_probe(struct platform_device *ofdev)
                goto register_fail;
        }
 
-       /* Carrier starts down, phylib will bring it up */
-       netif_carrier_off(dev);
-
        device_init_wakeup(&dev->dev,
                           priv->device_flags &
                           FSL_GIANFAR_DEV_HAS_MAGIC_PACKET);