Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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>

authored by

Jakub Kicinski and committed by
Paolo Abeni
4ddb17c1 426e13db

+18 -8
+2
drivers/net/ethernet/meta/fbnic/fbnic_netdev.c
··· 714 714 715 715 fbnic_set_ethtool_ops(netdev); 716 716 717 + netdev->request_ops_lock = true; 718 + 717 719 fbn = netdev_priv(netdev); 718 720 719 721 fbn->netdev = netdev;
+8 -1
drivers/net/ethernet/meta/fbnic/fbnic_pci.c
··· 206 206 207 207 fbnic_bmc_rpc_check(fbd); 208 208 209 - if (netif_carrier_ok(fbd->netdev)) 209 + if (netif_carrier_ok(fbd->netdev)) { 210 + netdev_lock(fbd->netdev); 210 211 fbnic_napi_depletion_check(fbd->netdev); 212 + netdev_unlock(fbd->netdev); 213 + } 211 214 212 215 if (netif_running(fbd->netdev)) 213 216 schedule_delayed_work(&fbd->service_task, HZ); ··· 394 391 goto null_uc_addr; 395 392 396 393 rtnl_lock(); 394 + netdev_lock(netdev); 397 395 398 396 netif_device_detach(netdev); 399 397 400 398 if (netif_running(netdev)) 401 399 netdev->netdev_ops->ndo_stop(netdev); 402 400 401 + netdev_unlock(netdev); 403 402 rtnl_unlock(); 404 403 405 404 null_uc_addr: ··· 466 461 fbnic_reset_queues(fbn, fbn->num_tx_queues, fbn->num_rx_queues); 467 462 468 463 rtnl_lock(); 464 + netdev_lock(netdev); 469 465 470 466 if (netif_running(netdev)) 471 467 err = __fbnic_open(fbn); 472 468 469 + netdev_unlock(netdev); 473 470 rtnl_unlock(); 474 471 if (err) 475 472 goto err_free_mbx;
+8 -7
drivers/net/ethernet/meta/fbnic/fbnic_txrx.c
··· 1501 1501 } 1502 1502 1503 1503 fbnic_napi_free_irq(fbd, nv); 1504 - netif_napi_del(&nv->napi); 1504 + netif_napi_del_locked(&nv->napi); 1505 1505 fbn->napi[fbnic_napi_idx(nv)] = NULL; 1506 1506 kfree(nv); 1507 1507 } ··· 1611 1611 1612 1612 /* Tie napi to netdev */ 1613 1613 fbn->napi[fbnic_napi_idx(nv)] = nv; 1614 - netif_napi_add(fbn->netdev, &nv->napi, fbnic_poll); 1614 + netif_napi_add_locked(fbn->netdev, &nv->napi, fbnic_poll); 1615 1615 1616 1616 /* Record IRQ to NAPI struct */ 1617 - netif_napi_set_irq(&nv->napi, 1618 - pci_irq_vector(to_pci_dev(fbd->dev), nv->v_idx)); 1617 + netif_napi_set_irq_locked(&nv->napi, 1618 + pci_irq_vector(to_pci_dev(fbd->dev), 1619 + nv->v_idx)); 1619 1620 1620 1621 /* Tie nv back to PCIe dev */ 1621 1622 nv->dev = fbd->dev; ··· 1705 1704 return 0; 1706 1705 1707 1706 napi_del: 1708 - netif_napi_del(&nv->napi); 1707 + netif_napi_del_locked(&nv->napi); 1709 1708 fbn->napi[fbnic_napi_idx(nv)] = NULL; 1710 1709 kfree(nv); 1711 1710 return err; ··· 2174 2173 int i; 2175 2174 2176 2175 for (i = 0; i < fbn->num_napi; i++) { 2177 - napi_disable(&fbn->napi[i]->napi); 2176 + napi_disable_locked(&fbn->napi[i]->napi); 2178 2177 2179 2178 fbnic_nv_irq_disable(fbn->napi[i]); 2180 2179 } ··· 2622 2621 for (i = 0; i < fbn->num_napi; i++) { 2623 2622 struct fbnic_napi_vector *nv = fbn->napi[i]; 2624 2623 2625 - napi_enable(&nv->napi); 2624 + napi_enable_locked(&nv->napi); 2626 2625 2627 2626 fbnic_nv_irq_enable(nv); 2628 2627