|
@@ -2199,13 +2199,17 @@ static int __devinit ixgbevf_sw_init(struct ixgbevf_adapter *adapter)
|
|
if (err) {
|
|
if (err) {
|
|
dev_info(&pdev->dev,
|
|
dev_info(&pdev->dev,
|
|
"PF still in reset state, assigning new address\n");
|
|
"PF still in reset state, assigning new address\n");
|
|
- dev_hw_addr_random(adapter->netdev, hw->mac.addr);
|
|
|
|
|
|
+ eth_hw_addr_random(adapter->netdev);
|
|
|
|
+ memcpy(adapter->hw.mac.addr, adapter->netdev->dev_addr,
|
|
|
|
+ adapter->netdev->addr_len);
|
|
} else {
|
|
} else {
|
|
err = hw->mac.ops.init_hw(hw);
|
|
err = hw->mac.ops.init_hw(hw);
|
|
if (err) {
|
|
if (err) {
|
|
pr_err("init_shared_code failed: %d\n", err);
|
|
pr_err("init_shared_code failed: %d\n", err);
|
|
goto out;
|
|
goto out;
|
|
}
|
|
}
|
|
|
|
+ memcpy(adapter->netdev->dev_addr, adapter->hw.mac.addr,
|
|
|
|
+ adapter->netdev->addr_len);
|
|
}
|
|
}
|
|
|
|
|
|
/* Enable dynamic interrupt throttling rates */
|
|
/* Enable dynamic interrupt throttling rates */
|
|
@@ -2224,6 +2228,7 @@ static int __devinit ixgbevf_sw_init(struct ixgbevf_adapter *adapter)
|
|
adapter->flags |= IXGBE_FLAG_RX_CSUM_ENABLED;
|
|
adapter->flags |= IXGBE_FLAG_RX_CSUM_ENABLED;
|
|
|
|
|
|
set_bit(__IXGBEVF_DOWN, &adapter->state);
|
|
set_bit(__IXGBEVF_DOWN, &adapter->state);
|
|
|
|
+ return 0;
|
|
|
|
|
|
out:
|
|
out:
|
|
return err;
|
|
return err;
|
|
@@ -3394,6 +3399,17 @@ static int __devinit ixgbevf_probe(struct pci_dev *pdev,
|
|
|
|
|
|
/* setup the private structure */
|
|
/* setup the private structure */
|
|
err = ixgbevf_sw_init(adapter);
|
|
err = ixgbevf_sw_init(adapter);
|
|
|
|
+ if (err)
|
|
|
|
+ goto err_sw_init;
|
|
|
|
+
|
|
|
|
+ /* The HW MAC address was set and/or determined in sw_init */
|
|
|
|
+ memcpy(netdev->perm_addr, adapter->hw.mac.addr, netdev->addr_len);
|
|
|
|
+
|
|
|
|
+ if (!is_valid_ether_addr(netdev->dev_addr)) {
|
|
|
|
+ pr_err("invalid MAC address\n");
|
|
|
|
+ err = -EIO;
|
|
|
|
+ goto err_sw_init;
|
|
|
|
+ }
|
|
|
|
|
|
netdev->hw_features = NETIF_F_SG |
|
|
netdev->hw_features = NETIF_F_SG |
|
|
NETIF_F_IP_CSUM |
|
|
NETIF_F_IP_CSUM |
|
|
@@ -3418,16 +3434,6 @@ static int __devinit ixgbevf_probe(struct pci_dev *pdev,
|
|
|
|
|
|
netdev->priv_flags |= IFF_UNICAST_FLT;
|
|
netdev->priv_flags |= IFF_UNICAST_FLT;
|
|
|
|
|
|
- /* The HW MAC address was set and/or determined in sw_init */
|
|
|
|
- memcpy(netdev->dev_addr, adapter->hw.mac.addr, netdev->addr_len);
|
|
|
|
- memcpy(netdev->perm_addr, adapter->hw.mac.addr, netdev->addr_len);
|
|
|
|
-
|
|
|
|
- if (!is_valid_ether_addr(netdev->dev_addr)) {
|
|
|
|
- pr_err("invalid MAC address\n");
|
|
|
|
- err = -EIO;
|
|
|
|
- goto err_sw_init;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
init_timer(&adapter->watchdog_timer);
|
|
init_timer(&adapter->watchdog_timer);
|
|
adapter->watchdog_timer.function = ixgbevf_watchdog;
|
|
adapter->watchdog_timer.function = ixgbevf_watchdog;
|
|
adapter->watchdog_timer.data = (unsigned long)adapter;
|
|
adapter->watchdog_timer.data = (unsigned long)adapter;
|