mirror of
https://github.com/torvalds/linux.git
synced 2026-06-02 11:33:28 +02:00
wifi: wil6210: Do not use embedded netdev in wil6210_priv
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 struct wil6210_priv by converting it into a pointer. Then use the leverage alloc_netdev_dummy() to allocate the net_device object at wil_if_add(). The free of the device occurs at wil_if_remove(). Link: https://lore.kernel.org/all/20240229225910.79e224cf@kernel.org/ [1] Signed-off-by: Breno Leitao <leitao@debian.org> Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com> Link: https://msgid.link/20240503103304.339489-1-leitao@debian.org
This commit is contained in:
parent
4c2b796be3
commit
10d2b4f4aa
|
|
@ -453,16 +453,21 @@ int wil_if_add(struct wil6210_priv *wil)
|
|||
return rc;
|
||||
}
|
||||
|
||||
init_dummy_netdev(&wil->napi_ndev);
|
||||
wil->napi_ndev = alloc_netdev_dummy(0);
|
||||
if (!wil->napi_ndev) {
|
||||
wil_err(wil, "failed to allocate dummy netdev");
|
||||
rc = -ENOMEM;
|
||||
goto out_wiphy;
|
||||
}
|
||||
if (wil->use_enhanced_dma_hw) {
|
||||
netif_napi_add(&wil->napi_ndev, &wil->napi_rx,
|
||||
netif_napi_add(wil->napi_ndev, &wil->napi_rx,
|
||||
wil6210_netdev_poll_rx_edma);
|
||||
netif_napi_add_tx(&wil->napi_ndev,
|
||||
netif_napi_add_tx(wil->napi_ndev,
|
||||
&wil->napi_tx, wil6210_netdev_poll_tx_edma);
|
||||
} else {
|
||||
netif_napi_add(&wil->napi_ndev, &wil->napi_rx,
|
||||
netif_napi_add(wil->napi_ndev, &wil->napi_rx,
|
||||
wil6210_netdev_poll_rx);
|
||||
netif_napi_add_tx(&wil->napi_ndev,
|
||||
netif_napi_add_tx(wil->napi_ndev,
|
||||
&wil->napi_tx, wil6210_netdev_poll_tx);
|
||||
}
|
||||
|
||||
|
|
@ -474,10 +479,12 @@ int wil_if_add(struct wil6210_priv *wil)
|
|||
wiphy_unlock(wiphy);
|
||||
rtnl_unlock();
|
||||
if (rc < 0)
|
||||
goto out_wiphy;
|
||||
goto free_dummy;
|
||||
|
||||
return 0;
|
||||
|
||||
free_dummy:
|
||||
free_netdev(wil->napi_ndev);
|
||||
out_wiphy:
|
||||
wiphy_unregister(wiphy);
|
||||
return rc;
|
||||
|
|
@ -554,5 +561,7 @@ void wil_if_remove(struct wil6210_priv *wil)
|
|||
netif_napi_del(&wil->napi_tx);
|
||||
netif_napi_del(&wil->napi_rx);
|
||||
|
||||
free_netdev(wil->napi_ndev);
|
||||
|
||||
wiphy_unregister(wiphy);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -983,7 +983,7 @@ struct wil6210_priv {
|
|||
spinlock_t eap_lock; /* guarding access to eap rekey fields */
|
||||
struct napi_struct napi_rx;
|
||||
struct napi_struct napi_tx;
|
||||
struct net_device napi_ndev; /* dummy net_device serving all VIFs */
|
||||
struct net_device *napi_ndev; /* dummy net_device serving all VIFs */
|
||||
|
||||
/* DMA related */
|
||||
struct wil_ring ring_rx;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user