> -----Original Message----- > From: Breno Leitao <leitao@xxxxxxxxxx> > Sent: Thursday, April 4, 2024 2:49 PM > To: aleksander.lobakin@xxxxxxxxx; kuba@xxxxxxxxxx; davem@xxxxxxxxxxxxx; > pabeni@xxxxxxxxxx; edumazet@xxxxxxxxxx; elder@xxxxxxxxxx; linux-arm- > kernel@xxxxxxxxxxxxxxxxxxx; linux-mediatek@xxxxxxxxxxxxxxxxxxx; > nbd@xxxxxxxx; sean.wang@xxxxxxxxxxxx; Mark-MC.Lee@xxxxxxxxxxxx; > lorenzo@xxxxxxxxxx; Taras Chornyi <taras.chornyi@xxxxxxxxxxx> > Cc: quic_jjohnson@xxxxxxxxxxx; kvalo@xxxxxxxxxx; leon@xxxxxxxxxx; > dennis.dalessandro@xxxxxxxxxxxxxxxxxxxx; linux-kernel@xxxxxxxxxxxxxxx; > netdev@xxxxxxxxxxxxxxx; bpf@xxxxxxxxxxxxxxx > Subject: [EXTERNAL] [PATCH net-next v3 2/5] net: marvell: prestera: allocate > dummy net_device dynamically > > Prioritize security for external emails: Confirm sender and content safety > before clicking links or opening attachments > > ---------------------------------------------------------------------- > 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://urldefense.proofpoint.com/v2/url?u=https- > 3A__lore.kernel.org_all_20240229225910.79e224cf- > 40kernel.org_&d=DwIDAg&c=nKjWec2b6R0mOyPaz7xtfQ&r=eTeNTLEK5- > TxXczjOcKPhANIFtlB9pP4lq9qhdlFrwQ&m=8Fqw_UUg1WoXjQcCjAtMa9J6QAd > lmUzCuk3nWriMXtYMbgBqNpdDSO4rBUanJDxw&s=lXBodHe9jPOjWAOTFCjnZ > 2ZDZYoF79OGsWN38gbxhTE&e= > > Signed-off-by: Breno Leitao <leitao@xxxxxxxxxx> > --- > .../net/ethernet/marvell/prestera/prestera_rxtx.c | 15 ++++++++++++--- > 1 file changed, 12 insertions(+), 3 deletions(-) > > diff --git a/drivers/net/ethernet/marvell/prestera/prestera_rxtx.c > b/drivers/net/ethernet/marvell/prestera/prestera_rxtx.c > index cc2a9ae794be..39d9bf82c115 100644 > --- a/drivers/net/ethernet/marvell/prestera/prestera_rxtx.c > +++ b/drivers/net/ethernet/marvell/prestera/prestera_rxtx.c > @@ -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); > -- > 2.43.0 > Acked-by: Elad Nachman <enachman@xxxxxxxxxxx>