Skip to content

Commit

Permalink
net: liquidio: release resources when liquidio driver open failed
Browse files Browse the repository at this point in the history
When liquidio driver open failed, it doesn't release resources. Compile
tested only.

Fixes: 5b07aee ("liquidio: MSIX support for CN23XX")
Fixes: dbc97bf ("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>
  • Loading branch information
Zhengchao Shao authored and David S. Miller committed Nov 14, 2022
1 parent 9cbd48d commit 8979f42
Showing 1 changed file with 26 additions and 8 deletions.
34 changes: 26 additions & 8 deletions drivers/net/ethernet/cavium/liquidio/lio_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -1794,13 +1794,10 @@ static int liquidio_open(struct net_device *netdev)

ifstate_set(lio, LIO_IFSTATE_RUNNING);

if (OCTEON_CN23XX_PF(oct)) {
if (!oct->msix_on)
if (setup_tx_poll_fn(netdev))
return -1;
} else {
if (setup_tx_poll_fn(netdev))
return -1;
if (!OCTEON_CN23XX_PF(oct) || (OCTEON_CN23XX_PF(oct) && !oct->msix_on)) {
ret = setup_tx_poll_fn(netdev);
if (ret)
goto err_poll;
}

netif_tx_start_all_queues(netdev);
Expand All @@ -1813,7 +1810,7 @@ static int liquidio_open(struct net_device *netdev)
/* tell Octeon to start forwarding packets to host */
ret = send_rx_ctrl_cmd(lio, 1);
if (ret)
return ret;
goto err_rx_ctrl;

/* start periodical statistics fetch */
INIT_DELAYED_WORK(&lio->stats_wk.work, lio_fetch_stats);
Expand All @@ -1824,6 +1821,27 @@ static int liquidio_open(struct net_device *netdev)
dev_info(&oct->pci_dev->dev, "%s interface is opened\n",
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;
}

Expand Down

0 comments on commit 8979f42

Please sign in to comment.