net: liquidio: release resources when liquidio driver open failed
When liquidio driver open failed, it doesn't release resources. Compile tested only. Fixes:5b07aee112
("liquidio: MSIX support for CN23XX") Fixes:dbc97bfd39
("net: liquidio: Add missing null pointer checks") Signed-off-by: Zhengchao Shao <shaozhengchao@huawei.com> Reviewed-by: Leon Romanovsky <leonro@nvidia.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
9cbd48d5fa
commit
8979f428a4
1 changed files with 26 additions and 8 deletions
|
@ -1794,13 +1794,10 @@ static int liquidio_open(struct net_device *netdev)
|
||||||
|
|
||||||
ifstate_set(lio, LIO_IFSTATE_RUNNING);
|
ifstate_set(lio, LIO_IFSTATE_RUNNING);
|
||||||
|
|
||||||
if (OCTEON_CN23XX_PF(oct)) {
|
if (!OCTEON_CN23XX_PF(oct) || (OCTEON_CN23XX_PF(oct) && !oct->msix_on)) {
|
||||||
if (!oct->msix_on)
|
ret = setup_tx_poll_fn(netdev);
|
||||||
if (setup_tx_poll_fn(netdev))
|
if (ret)
|
||||||
return -1;
|
goto err_poll;
|
||||||
} else {
|
|
||||||
if (setup_tx_poll_fn(netdev))
|
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
netif_tx_start_all_queues(netdev);
|
netif_tx_start_all_queues(netdev);
|
||||||
|
@ -1813,7 +1810,7 @@ static int liquidio_open(struct net_device *netdev)
|
||||||
/* tell Octeon to start forwarding packets to host */
|
/* tell Octeon to start forwarding packets to host */
|
||||||
ret = send_rx_ctrl_cmd(lio, 1);
|
ret = send_rx_ctrl_cmd(lio, 1);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
goto err_rx_ctrl;
|
||||||
|
|
||||||
/* start periodical statistics fetch */
|
/* start periodical statistics fetch */
|
||||||
INIT_DELAYED_WORK(&lio->stats_wk.work, lio_fetch_stats);
|
INIT_DELAYED_WORK(&lio->stats_wk.work, lio_fetch_stats);
|
||||||
|
@ -1824,6 +1821,27 @@ static int liquidio_open(struct net_device *netdev)
|
||||||
dev_info(&oct->pci_dev->dev, "%s interface is opened\n",
|
dev_info(&oct->pci_dev->dev, "%s interface is opened\n",
|
||||||
netdev->name);
|
netdev->name);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
err_rx_ctrl:
|
||||||
|
if (!OCTEON_CN23XX_PF(oct) || (OCTEON_CN23XX_PF(oct) && !oct->msix_on))
|
||||||
|
cleanup_tx_poll_fn(netdev);
|
||||||
|
err_poll:
|
||||||
|
if (lio->ptp_clock) {
|
||||||
|
ptp_clock_unregister(lio->ptp_clock);
|
||||||
|
lio->ptp_clock = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (oct->props[lio->ifidx].napi_enabled == 1) {
|
||||||
|
list_for_each_entry_safe(napi, n, &netdev->napi_list, dev_list)
|
||||||
|
napi_disable(napi);
|
||||||
|
|
||||||
|
oct->props[lio->ifidx].napi_enabled = 0;
|
||||||
|
|
||||||
|
if (OCTEON_CN23XX_PF(oct))
|
||||||
|
oct->droq[0]->ops.poll_mode = 0;
|
||||||
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue