forked from Minki/linux
ibmvnic: Move resource initialization to its own routine
Move all of the calls to initialize resources for the driver to a separate routine. Signed-off-by: Nathan Fontenot <nfont@linux.vnet.ibm.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
4d89ac2dd5
commit
bfc32f2973
@ -624,22 +624,10 @@ static int set_real_num_queues(struct net_device *netdev)
|
||||
return rc;
|
||||
}
|
||||
|
||||
static int ibmvnic_open(struct net_device *netdev)
|
||||
static int init_resources(struct ibmvnic_adapter *adapter)
|
||||
{
|
||||
struct ibmvnic_adapter *adapter = netdev_priv(netdev);
|
||||
struct device *dev = &adapter->vdev->dev;
|
||||
int rc = 0;
|
||||
int i;
|
||||
|
||||
if (adapter->is_closed) {
|
||||
rc = ibmvnic_init(adapter);
|
||||
if (rc)
|
||||
return rc;
|
||||
}
|
||||
|
||||
rc = ibmvnic_login(netdev);
|
||||
if (rc)
|
||||
return rc;
|
||||
struct net_device *netdev = adapter->netdev;
|
||||
int i, rc;
|
||||
|
||||
rc = set_real_num_queues(netdev);
|
||||
if (rc)
|
||||
@ -647,7 +635,7 @@ static int ibmvnic_open(struct net_device *netdev)
|
||||
|
||||
rc = init_sub_crq_irqs(adapter);
|
||||
if (rc) {
|
||||
dev_err(dev, "failed to initialize sub crq irqs\n");
|
||||
netdev_err(netdev, "failed to initialize sub crq irqs\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -659,25 +647,47 @@ static int ibmvnic_open(struct net_device *netdev)
|
||||
adapter->napi = kcalloc(adapter->req_rx_queues,
|
||||
sizeof(struct napi_struct), GFP_KERNEL);
|
||||
if (!adapter->napi)
|
||||
goto ibmvnic_open_fail;
|
||||
return -ENOMEM;
|
||||
|
||||
for (i = 0; i < adapter->req_rx_queues; i++) {
|
||||
netif_napi_add(netdev, &adapter->napi[i], ibmvnic_poll,
|
||||
NAPI_POLL_WEIGHT);
|
||||
napi_enable(&adapter->napi[i]);
|
||||
}
|
||||
|
||||
send_map_query(adapter);
|
||||
|
||||
rc = init_rx_pools(netdev);
|
||||
if (rc)
|
||||
goto ibmvnic_open_fail;
|
||||
return rc;
|
||||
|
||||
rc = init_tx_pools(netdev);
|
||||
return rc;
|
||||
}
|
||||
|
||||
static int ibmvnic_open(struct net_device *netdev)
|
||||
{
|
||||
struct ibmvnic_adapter *adapter = netdev_priv(netdev);
|
||||
int i, rc;
|
||||
|
||||
if (adapter->is_closed) {
|
||||
rc = ibmvnic_init(adapter);
|
||||
if (rc)
|
||||
return rc;
|
||||
}
|
||||
|
||||
rc = ibmvnic_login(netdev);
|
||||
if (rc)
|
||||
goto ibmvnic_open_fail;
|
||||
return rc;
|
||||
|
||||
rc = init_resources(adapter);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
replenish_pools(adapter);
|
||||
|
||||
for (i = 0; i < adapter->req_rx_queues; i++)
|
||||
napi_enable(&adapter->napi[i]);
|
||||
|
||||
/* We're ready to receive frames, enable the sub-crq interrupts and
|
||||
* set the logical link state to up
|
||||
*/
|
||||
@ -688,19 +698,16 @@ static int ibmvnic_open(struct net_device *netdev)
|
||||
enable_scrq_irq(adapter, adapter->tx_scrq[i]);
|
||||
|
||||
rc = set_link_state(adapter, IBMVNIC_LOGICAL_LNK_UP);
|
||||
if (rc)
|
||||
goto ibmvnic_open_fail;
|
||||
if (rc) {
|
||||
for (i = 0; i < adapter->req_rx_queues; i++)
|
||||
napi_disable(&adapter->napi[i]);
|
||||
release_resources(adapter);
|
||||
} else {
|
||||
netif_tx_start_all_queues(netdev);
|
||||
adapter->is_closed = false;
|
||||
}
|
||||
|
||||
netif_tx_start_all_queues(netdev);
|
||||
adapter->is_closed = false;
|
||||
|
||||
return 0;
|
||||
|
||||
ibmvnic_open_fail:
|
||||
for (i = 0; i < adapter->req_rx_queues; i++)
|
||||
napi_disable(&adapter->napi[i]);
|
||||
release_resources(adapter);
|
||||
return -ENOMEM;
|
||||
return rc;
|
||||
}
|
||||
|
||||
static void disable_sub_crqs(struct ibmvnic_adapter *adapter)
|
||||
|
Loading…
Reference in New Issue
Block a user