|
@@ -1143,14 +1143,11 @@ static void clean_tx_pools(struct ibmvnic_adapter *adapter)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-static int __ibmvnic_close(struct net_device *netdev)
|
|
|
+static void ibmvnic_cleanup(struct net_device *netdev)
|
|
|
{
|
|
|
struct ibmvnic_adapter *adapter = netdev_priv(netdev);
|
|
|
- int rc = 0;
|
|
|
int i;
|
|
|
|
|
|
- adapter->state = VNIC_CLOSING;
|
|
|
-
|
|
|
/* ensure that transmissions are stopped if called by do_reset */
|
|
|
if (adapter->resetting)
|
|
|
netif_tx_disable(netdev);
|
|
@@ -1168,10 +1165,6 @@ static int __ibmvnic_close(struct net_device *netdev)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- rc = set_link_state(adapter, IBMVNIC_LOGICAL_LNK_DN);
|
|
|
- if (rc)
|
|
|
- return rc;
|
|
|
-
|
|
|
if (adapter->rx_scrq) {
|
|
|
for (i = 0; i < adapter->req_rx_queues; i++) {
|
|
|
if (adapter->rx_scrq[i]->irq) {
|
|
@@ -1183,8 +1176,20 @@ static int __ibmvnic_close(struct net_device *netdev)
|
|
|
}
|
|
|
clean_rx_pools(adapter);
|
|
|
clean_tx_pools(adapter);
|
|
|
+}
|
|
|
+
|
|
|
+static int __ibmvnic_close(struct net_device *netdev)
|
|
|
+{
|
|
|
+ struct ibmvnic_adapter *adapter = netdev_priv(netdev);
|
|
|
+ int rc = 0;
|
|
|
+
|
|
|
+ adapter->state = VNIC_CLOSING;
|
|
|
+ rc = set_link_state(adapter, IBMVNIC_LOGICAL_LNK_DN);
|
|
|
+ if (rc)
|
|
|
+ return rc;
|
|
|
+ ibmvnic_cleanup(netdev);
|
|
|
adapter->state = VNIC_CLOSED;
|
|
|
- return rc;
|
|
|
+ return 0;
|
|
|
}
|
|
|
|
|
|
static int ibmvnic_close(struct net_device *netdev)
|