]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[netdevice] Call netdev_link_[up|down|err]() only while registered
authorMichael Brown <mcb30@ipxe.org>
Sun, 5 Sep 2010 01:03:31 +0000 (02:03 +0100)
committerMichael Brown <mcb30@ipxe.org>
Sun, 5 Sep 2010 01:51:46 +0000 (02:51 +0100)
Signed-off-by: Michael Brown <mcb30@ipxe.org>
20 files changed:
src/arch/i386/drivers/net/undinet.c
src/drivers/linux/tap.c
src/drivers/net/3c90x.c
src/drivers/net/atl1e.c
src/drivers/net/b44.c
src/drivers/net/e1000/e1000_main.c
src/drivers/net/e1000e/e1000e_main.c
src/drivers/net/eepro100.c
src/drivers/net/efi/snpnet.c
src/drivers/net/etherfabric.c
src/drivers/net/igb/igb_main.c
src/drivers/net/jme.c
src/drivers/net/legacy.c
src/drivers/net/natsemi.c
src/drivers/net/pnic.c
src/drivers/net/rtl8139.c
src/drivers/net/sis190.c
src/drivers/net/skge.c
src/drivers/net/virtio-net.c
src/drivers/net/vxge/vxge_main.c

index 7ec4b50a35865c7d58e1093035fa24cb7e9a5526..e6c084649137935e2d6304935fda9d44514dfe8c 100644 (file)
@@ -548,13 +548,13 @@ int undinet_probe ( struct undi_device *undi ) {
                undinic->hacks |= UNDI_HACK_EB54;
        }
 
-       /* Mark as link up; we don't handle link state */
-       netdev_link_up ( netdev );
-
        /* Register network device */
        if ( ( rc = register_netdev ( netdev ) ) != 0 )
                goto err_register;
 
+       /* Mark as link up; we don't handle link state */
+       netdev_link_up ( netdev );
+
        DBGC ( undinic, "UNDINIC %p added\n", undinic );
        return 0;
 
index c2cb7584ffd999cabe3c100dea0e4197c8780ba7..53bb16a303afaf430e1a8eaf2a92b817254f6f56 100644 (file)
@@ -200,11 +200,11 @@ static int tap_probe(struct linux_device *device, struct linux_device_request *r
        netdev->dev = &device->dev;
        memset(nic, 0, sizeof(*nic));
 
-       netdev_link_up(netdev);
-
        if ((rc = register_netdev(netdev)) != 0)
                goto err_register;
 
+       netdev_link_up(netdev);
+
        /* Look for the mandatory if setting */
        if_setting = linux_find_setting("if", &request->settings);
 
index 760d355223b9b699aee1409f6319c689aeb2f3c7..4db8fbda0f91e79eb2343e4339f7821aa7548121 100644 (file)
@@ -938,15 +938,15 @@ static int a3c90x_probe(struct pci_device *pci,
        HWAddr[4] = inf_3c90x->eeprom[eepromHwAddrOffset + 2] >> 8;
        HWAddr[5] = inf_3c90x->eeprom[eepromHwAddrOffset + 2] & 0xFF;
 
-       /* we don't handle linkstates yet, so we're always up */
-       netdev_link_up(netdev);
-
        if ((rc = register_netdev(netdev)) != 0) {
                DBG("3c90x: register_netdev() failed\n");
                netdev_put(netdev);
                return rc;
        }
 
+       /* we don't handle linkstates yet, so we're always up */
+       netdev_link_up(netdev);
+
        return 0;
 }
 
index 160ad91b3ef3ef0958e9f56a7c800cbade1d57d5..c436783548062f228d0e30d4a1cc60fdc45e7415 100644 (file)
@@ -248,8 +248,6 @@ static int atl1e_sw_init(struct atl1e_adapter *adapter)
        hw->dmar_block = atl1e_dma_req_1024;
        hw->dmaw_block = atl1e_dma_req_1024;
 
-       netdev_link_down(adapter->netdev);
-
        return 0;
 }
 
@@ -1212,8 +1210,6 @@ static int atl1e_probe(struct pci_device *pdev,
                goto err_free_netdev;
        }
 
-       netdev_link_down(netdev);
-
        cards_found++;
        return 0;
 
index a104652cb37529aa8c726c024413d19c626ce3fd..d34bd8a7305feb3fd04fc3eb0d716abbd2c351a0 100644 (file)
@@ -682,9 +682,6 @@ static int b44_probe(struct pci_device *pci, const struct pci_device_id *id)
 
        b44_load_mac_and_phy_addr(bp);
 
-       /* Link management currently not implemented */
-       netdev_link_up(netdev);
-
        rc = register_netdev(netdev);
        if (rc != 0) {
                iounmap(bp->regs);
@@ -692,6 +689,9 @@ static int b44_probe(struct pci_device *pci, const struct pci_device_id *id)
                return rc;
        }
 
+       /* Link management currently not implemented */
+       netdev_link_up(netdev);
+
        b44_chip_reset(bp, B44_CHIP_RESET_FULL);
 
        DBG("b44 %s (%04x:%04x) regs=%p MAC=%s\n", id->name, id->vendor,
index fd2c78b90b9d9db430d4f2739c3c9923c51c2854..dec0858c18a169b42b229a374edb3b274c5f4cb6 100644 (file)
@@ -803,12 +803,12 @@ int e1000_probe ( struct pci_device *pdev,
        /* reset the hardware with the new settings */
        e1000_reset ( adapter );
 
-       /* Mark as link up; we don't yet handle link state */
-       netdev_link_up ( netdev );
-
        if ( ( err = register_netdev ( netdev ) ) != 0)
                goto err_register;
 
+       /* Mark as link up; we don't yet handle link state */
+       netdev_link_up ( netdev );
+
        for (i = 0; i < 6; i++)
                DBG ("%02x%s", netdev->ll_addr[i], i == 5 ? "\n" : ":");
 
index 748f0cb650789b021ddaa1f207c69b1b0aed21c4..1b56f20c68d7dcb0946ee18607082ef35ab81247 100644 (file)
@@ -1155,14 +1155,14 @@ int e1000e_probe ( struct pci_device *pdev,
        /* reset the hardware with the new settings */
        e1000e_reset ( adapter );
 
-       /* Mark as link up; we don't yet handle link state */
-       netdev_link_up ( netdev );
-
        if ( ( err = register_netdev ( netdev ) ) != 0) {
                 DBG ( "err_register\n" );
                goto err_register;
         }
 
+       /* Mark as link up; we don't yet handle link state */
+       netdev_link_up ( netdev );
+
        for (i = 0; i < 6; i++)
                DBG ("%02x%s", netdev->ll_addr[i], i == 5 ? "\n" : ":");
 
index 0912be7c83b478d22dd22d4eaaa7ece258e9a5b8..f350b5c85ab48c45fa5ab5ba04b398e0c4546af4 100644 (file)
@@ -209,11 +209,11 @@ static int ifec_pci_probe ( struct pci_device *pci,
        nvs_read ( &priv->eeprom.nvs, EEPROM_ADDR_MDIO_REGISTER,
                   &priv->mdio_register, 2 );
 
-       netdev_link_up ( netdev );
-
        if ( ( rc = register_netdev ( netdev ) ) != 0 )
                goto error;
 
+       netdev_link_up ( netdev );
+
        DBGP ( "ints\n" );
 
        return 0;
index ba63a01df02cda8c9462dab8d52b7ea9fffa1818..b725d407f206c91fbc214de798564ee055a3f5fa 100644 (file)
@@ -300,13 +300,13 @@ int snpnet_probe ( struct snp_device *snpdev ) {
        memcpy ( netdev->hw_addr, snp->Mode->PermanentAddress.Addr,
                 snp->Mode->HwAddressSize );
 
-       /* Mark as link up; we don't handle link state */
-       netdev_link_up ( netdev );
-
        /* Register network device */
        if ( ( rc = register_netdev ( netdev ) ) != 0 )
                goto err_register;
 
+       /* Mark as link up; we don't handle link state */
+       netdev_link_up ( netdev );
+
        DBGC ( snp, "SNP %p added\n", snp );
        return 0;
 
index bcdd010a48ea85d1aa2513467e0303c7b6b52c16..352cdd99ca5d265e68a4ea6610f3943a16199918 100644 (file)
@@ -4183,10 +4183,10 @@ efab_probe ( struct pci_device *pci,
 
        memcpy ( netdev->hw_addr, efab->mac_addr, ETH_ALEN );
 
-       netdev_link_up ( netdev );
        rc = register_netdev ( netdev );
        if ( rc )
                goto fail4;
+       netdev_link_up ( netdev );
 
        /* Advertise non-volatile storage */
        if ( efab->nvo.nvs ) {
index 9e2b3bf2a08fbaa8ac0b661ef950ca9bffdcb4c4..df5cadc50d405f8a5e3d6508f229c5bdd1e7a6db 100644 (file)
@@ -905,14 +905,14 @@ int igb_probe ( struct pci_device *pdev,
         * driver. */
        igb_get_hw_control(adapter);
 
-       /* Mark as link up; we don't yet handle link state */
-       netdev_link_up ( netdev );
-
        if ( ( err = register_netdev ( netdev ) ) != 0) {
                DBG ( "err_register\n" );
                goto err_register;
        }
 
+       /* Mark as link up; we don't yet handle link state */
+       netdev_link_up ( netdev );
+
        for (i = 0; i < 6; i++) {
                DBG ("%02x%s", netdev->ll_addr[i], i == 5 ? "\n" : ":");
         }
index 1602d547cb5bee2a265be9a4dfdb84809e50d5d8..eaddcb84203ca88fd09e809fa5d60f15760b13f0 100644 (file)
@@ -1249,7 +1249,6 @@ jme_probe(struct pci_device *pci, const struct pci_device_id *id __unused)
         * Bring down phy before interface is opened.
         */
        jme_phy_off(jme);
-       netdev_link_down(netdev);
 
        /*
         * Reset MAC processor and reload EEPROM for MAC Address
index 246a37f722378ff2e00ed9f824f8e06595378dc6..4edbef162362622efb9b35c5c39b82ffca5c87eb 100644 (file)
@@ -114,12 +114,12 @@ int legacy_probe ( void *hwdev,
         */
        dev->desc.irq = nic.irqno;
 
-       /* Mark as link up; legacy devices don't handle link state */
-       netdev_link_up ( netdev );
-
        if ( ( rc = register_netdev ( netdev ) ) != 0 )
                goto err_register;
 
+       /* Mark as link up; legacy devices don't handle link state */
+       netdev_link_up ( netdev );
+
        /* Do not remove this message */
        printf ( "WARNING: Using legacy NIC wrapper on %s\n",
                 netdev->ll_protocol->ntoa ( nic.node_addr ) );
index 2b5375a3d5a4dd7a09c191b3c0ef4be66aa6574d..19c20edd72b3141f623a149a7950ba6bcf25cd15 100644 (file)
@@ -208,12 +208,12 @@ static int natsemi_probe (struct pci_device *pci,
                last = last1;
        }
 
-       /* Mark as link up; we don't yet handle link state */
-       netdev_link_up ( netdev );
-
        if ((rc = register_netdev (netdev)) != 0)
                goto err_register_netdev;
 
+       /* Mark as link up; we don't yet handle link state */
+       netdev_link_up ( netdev );
+
        return 0;
 
 err_register_netdev:
index ced13971f18a9f522d016a01abf44a684c28200c..b34b912665e60395da02803e987dfb4915a51d71 100644 (file)
@@ -252,13 +252,13 @@ static int pnic_probe ( struct pci_device *pci,
        status = pnic_command ( pnic, PNIC_CMD_READ_MAC, NULL, 0,
                                netdev->hw_addr, ETH_ALEN, NULL );
 
-       /* Mark as link up; PNIC has no concept of link state */
-       netdev_link_up ( netdev );
-
        /* Register network device */
        if ( ( rc = register_netdev ( netdev ) ) != 0 )
                goto err;
 
+       /* Mark as link up; PNIC has no concept of link state */
+       netdev_link_up ( netdev );
+
        return 0;
 
  err:
index d5fb178fda6e4319a8f2831307dc4b5186c184a4..dd3f80e579961bf83ff13c951f7291e5ae1074c7 100644 (file)
@@ -528,13 +528,13 @@ static int rtl_probe ( struct pci_device *pci,
        rtl_init_eeprom ( netdev );
        nvs_read ( &rtl->eeprom.nvs, EE_MAC, netdev->hw_addr, ETH_ALEN );
 
-       /* Mark as link up; we don't yet handle link state */
-       netdev_link_up ( netdev );
-       
        /* Register network device */
        if ( ( rc = register_netdev ( netdev ) ) != 0 )
                goto err_register_netdev;
 
+       /* Mark as link up; we don't yet handle link state */
+       netdev_link_up ( netdev );
+
        /* Register non-volatile storage */
        if ( rtl->nvo.nvs ) {
                if ( ( rc = register_nvo ( &rtl->nvo,
index c60cedd554d471eedeed8eac35a00b8ee4a84a55..b0c3303fe517152a531e78cd315175e52a51b8b1 100644 (file)
@@ -1143,7 +1143,6 @@ static int sis190_probe(struct pci_device *pdev,
        sis190_set_speed_auto(dev);
        sis190_phy_task(tp);
 
-       netdev_link_down(dev);
 out:
        return rc;
 
index 8eec75b0e9ad876c465e8729acdfb2b65a2d70db..c9fb6bae3f8f1d61a3f3099c30eeffb73ca1a8bb 100755 (executable)
@@ -2324,9 +2324,6 @@ static struct net_device *skge_devinit(struct skge_hw *hw, int port,
        /* read the mac address */
        memcpy(dev->hw_addr, (void *) (hw->regs + B2_MAC_1 + port*8), ETH_ALEN);
 
-       /* device is off until link detection */
-       netdev_link_down(dev);
-
        return dev;
 }
 
index a5fb5f694371d8521ab5aa38f08a013402c3cf27..1c5f074c0ad7bf7d58c8ddd1860acf18006fbb2d 100644 (file)
@@ -378,14 +378,20 @@ static int virtnet_probe ( struct pci_device *pci,
                       eth_ntoa ( netdev->hw_addr ) );
        }
 
+       /* Register network device */
+       if ( ( rc = register_netdev ( netdev ) ) != 0 )
+               goto err_register_netdev;
+
        /* Mark link as up, control virtqueue is not used */
        netdev_link_up ( netdev );
 
-       if ( ( rc = register_netdev ( netdev ) ) != 0 ) {
-               vp_reset ( ioaddr );
-               netdev_nullify ( netdev );
-               netdev_put ( netdev );
-       }
+       return 0;
+
+       unregister_netdev ( netdev );
+ err_register_netdev:
+       vp_reset ( ioaddr );
+       netdev_nullify ( netdev );
+       netdev_put ( netdev );
        return rc;
 }
 
index 42855f8d09033535c2a4742808e1a1bb08c95953..4e07271a3068b66c4409d99b35e6eaafbf38671e 100644 (file)
@@ -443,11 +443,10 @@ int vxge_device_register(struct __vxge_hw_device *hldev,
                goto _out2;
        }
 
-       /* Make Link state as off at this point, when the Link change
+       /* Leave link state as off at this point, when the link change
         * interrupt comes the state will be automatically changed to
         * the right state.
         */
-       netdev_link_down(ndev);
 
        vxge_debug(VXGE_INFO, "%s: Ethernet device registered\n",
                VXGE_DRIVER_NAME);