mirror of
https://github.com/torvalds/linux.git
synced 2026-01-25 15:03:52 +08:00
net: marvell: prestera: allocate dummy net_device dynamically
Embedding net_device into structures prohibits the usage of flexible arrays in the net_device structure. For more details, see the discussion at [1]. Un-embed the net_device from the private struct by converting it into a pointer. Then use the leverage the new alloc_netdev_dummy() helper to allocate and initialize dummy devices. [1] https://lore.kernel.org/all/20240229225910.79e224cf@kernel.org/ Signed-off-by: Breno Leitao <leitao@debian.org> Acked-by: Elad Nachman <enachman@marvell.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
c661050f93
commit
ec24c06eb3
@@ -96,7 +96,7 @@ struct prestera_sdma {
|
||||
struct dma_pool *desc_pool;
|
||||
struct work_struct tx_work;
|
||||
struct napi_struct rx_napi;
|
||||
struct net_device napi_dev;
|
||||
struct net_device *napi_dev;
|
||||
u32 map_addr;
|
||||
u64 dma_mask;
|
||||
/* protect SDMA with concurrent access from multiple CPUs */
|
||||
@@ -654,13 +654,21 @@ static int prestera_sdma_switch_init(struct prestera_switch *sw)
|
||||
if (err)
|
||||
goto err_evt_register;
|
||||
|
||||
init_dummy_netdev(&sdma->napi_dev);
|
||||
sdma->napi_dev = alloc_netdev_dummy(0);
|
||||
if (!sdma->napi_dev) {
|
||||
dev_err(dev, "not able to initialize dummy device\n");
|
||||
err = -ENOMEM;
|
||||
goto err_alloc_dummy;
|
||||
}
|
||||
|
||||
netif_napi_add(&sdma->napi_dev, &sdma->rx_napi, prestera_sdma_rx_poll);
|
||||
netif_napi_add(sdma->napi_dev, &sdma->rx_napi, prestera_sdma_rx_poll);
|
||||
napi_enable(&sdma->rx_napi);
|
||||
|
||||
return 0;
|
||||
|
||||
err_alloc_dummy:
|
||||
prestera_hw_event_handler_unregister(sw, PRESTERA_EVENT_TYPE_RXTX,
|
||||
prestera_rxtx_handle_event);
|
||||
err_evt_register:
|
||||
err_tx_init:
|
||||
prestera_sdma_tx_fini(sdma);
|
||||
@@ -677,6 +685,7 @@ static void prestera_sdma_switch_fini(struct prestera_switch *sw)
|
||||
|
||||
napi_disable(&sdma->rx_napi);
|
||||
netif_napi_del(&sdma->rx_napi);
|
||||
free_netdev(sdma->napi_dev);
|
||||
prestera_hw_event_handler_unregister(sw, PRESTERA_EVENT_TYPE_RXTX,
|
||||
prestera_rxtx_handle_event);
|
||||
prestera_sdma_tx_fini(sdma);
|
||||
|
||||
Reference in New Issue
Block a user