eth: fbnic: request ops lock

We'll add queue ops soon so. queue ops will opt the driver into
extra locking. Request this locking explicitly already to make
future patches smaller and easier to review.

Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Link: https://patch.msgid.link/20250901211214.1027927-6-kuba@kernel.org
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
Jakub Kicinski 2025-09-01 14:12:05 -07:00 committed by Paolo Abeni
parent 426e13db36
commit 4ddb17c1a2
3 changed files with 18 additions and 8 deletions

View File

@ -714,6 +714,8 @@ struct net_device *fbnic_netdev_alloc(struct fbnic_dev *fbd)
fbnic_set_ethtool_ops(netdev);
netdev->request_ops_lock = true;
fbn = netdev_priv(netdev);
fbn->netdev = netdev;

View File

@ -206,8 +206,11 @@ static void fbnic_service_task(struct work_struct *work)
fbnic_bmc_rpc_check(fbd);
if (netif_carrier_ok(fbd->netdev))
if (netif_carrier_ok(fbd->netdev)) {
netdev_lock(fbd->netdev);
fbnic_napi_depletion_check(fbd->netdev);
netdev_unlock(fbd->netdev);
}
if (netif_running(fbd->netdev))
schedule_delayed_work(&fbd->service_task, HZ);
@ -391,12 +394,14 @@ static int fbnic_pm_suspend(struct device *dev)
goto null_uc_addr;
rtnl_lock();
netdev_lock(netdev);
netif_device_detach(netdev);
if (netif_running(netdev))
netdev->netdev_ops->ndo_stop(netdev);
netdev_unlock(netdev);
rtnl_unlock();
null_uc_addr:
@ -461,10 +466,12 @@ static int __fbnic_pm_resume(struct device *dev)
fbnic_reset_queues(fbn, fbn->num_tx_queues, fbn->num_rx_queues);
rtnl_lock();
netdev_lock(netdev);
if (netif_running(netdev))
err = __fbnic_open(fbn);
netdev_unlock(netdev);
rtnl_unlock();
if (err)
goto err_free_mbx;

View File

@ -1501,7 +1501,7 @@ static void fbnic_free_napi_vector(struct fbnic_net *fbn,
}
fbnic_napi_free_irq(fbd, nv);
netif_napi_del(&nv->napi);
netif_napi_del_locked(&nv->napi);
fbn->napi[fbnic_napi_idx(nv)] = NULL;
kfree(nv);
}
@ -1611,11 +1611,12 @@ static int fbnic_alloc_napi_vector(struct fbnic_dev *fbd, struct fbnic_net *fbn,
/* Tie napi to netdev */
fbn->napi[fbnic_napi_idx(nv)] = nv;
netif_napi_add(fbn->netdev, &nv->napi, fbnic_poll);
netif_napi_add_locked(fbn->netdev, &nv->napi, fbnic_poll);
/* Record IRQ to NAPI struct */
netif_napi_set_irq(&nv->napi,
pci_irq_vector(to_pci_dev(fbd->dev), nv->v_idx));
netif_napi_set_irq_locked(&nv->napi,
pci_irq_vector(to_pci_dev(fbd->dev),
nv->v_idx));
/* Tie nv back to PCIe dev */
nv->dev = fbd->dev;
@ -1704,7 +1705,7 @@ static int fbnic_alloc_napi_vector(struct fbnic_dev *fbd, struct fbnic_net *fbn,
return 0;
napi_del:
netif_napi_del(&nv->napi);
netif_napi_del_locked(&nv->napi);
fbn->napi[fbnic_napi_idx(nv)] = NULL;
kfree(nv);
return err;
@ -2173,7 +2174,7 @@ void fbnic_napi_disable(struct fbnic_net *fbn)
int i;
for (i = 0; i < fbn->num_napi; i++) {
napi_disable(&fbn->napi[i]->napi);
napi_disable_locked(&fbn->napi[i]->napi);
fbnic_nv_irq_disable(fbn->napi[i]);
}
@ -2621,7 +2622,7 @@ void fbnic_napi_enable(struct fbnic_net *fbn)
for (i = 0; i < fbn->num_napi; i++) {
struct fbnic_napi_vector *nv = fbn->napi[i];
napi_enable(&nv->napi);
napi_enable_locked(&nv->napi);
fbnic_nv_irq_enable(nv);