Commit 4c9aa94a authored by Breno Leitao's avatar Breno Leitao Committed by Ping-Ke Shih

wifi: rtw89: Un-embed dummy device

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/

Tested with RTL8852BE, RTL8852C and RTL8922AE.
Signed-off-by: default avatarBreno Leitao <leitao@debian.org>
Acked-by: default avatarPing-Ke Shih <pkshih@realtek.com>
Tested-by: default avatarPing-Ke Shih <pkshih@realtek.com>
Signed-off-by: default avatarPing-Ke Shih <pkshih@realtek.com>
Link: https://msgid.link/20240424182351.3936556-1-leitao@debian.org
parent 83127eca
...@@ -2492,11 +2492,15 @@ void rtw89_core_napi_stop(struct rtw89_dev *rtwdev) ...@@ -2492,11 +2492,15 @@ void rtw89_core_napi_stop(struct rtw89_dev *rtwdev)
} }
EXPORT_SYMBOL(rtw89_core_napi_stop); EXPORT_SYMBOL(rtw89_core_napi_stop);
void rtw89_core_napi_init(struct rtw89_dev *rtwdev) int rtw89_core_napi_init(struct rtw89_dev *rtwdev)
{ {
init_dummy_netdev(&rtwdev->netdev); rtwdev->netdev = alloc_netdev_dummy(0);
netif_napi_add(&rtwdev->netdev, &rtwdev->napi, if (!rtwdev->netdev)
return -ENOMEM;
netif_napi_add(rtwdev->netdev, &rtwdev->napi,
rtwdev->hci.ops->napi_poll); rtwdev->hci.ops->napi_poll);
return 0;
} }
EXPORT_SYMBOL(rtw89_core_napi_init); EXPORT_SYMBOL(rtw89_core_napi_init);
...@@ -2504,6 +2508,7 @@ void rtw89_core_napi_deinit(struct rtw89_dev *rtwdev) ...@@ -2504,6 +2508,7 @@ void rtw89_core_napi_deinit(struct rtw89_dev *rtwdev)
{ {
rtw89_core_napi_stop(rtwdev); rtw89_core_napi_stop(rtwdev);
netif_napi_del(&rtwdev->napi); netif_napi_del(&rtwdev->napi);
free_netdev(rtwdev->netdev);
} }
EXPORT_SYMBOL(rtw89_core_napi_deinit); EXPORT_SYMBOL(rtw89_core_napi_deinit);
......
...@@ -5469,7 +5469,7 @@ struct rtw89_dev { ...@@ -5469,7 +5469,7 @@ struct rtw89_dev {
struct rtw89_wow_param wow; struct rtw89_wow_param wow;
/* napi structure */ /* napi structure */
struct net_device netdev; struct net_device *netdev;
struct napi_struct napi; struct napi_struct napi;
int napi_budget_countdown; int napi_budget_countdown;
...@@ -6441,7 +6441,7 @@ void rtw89_core_query_rxdesc_v2(struct rtw89_dev *rtwdev, ...@@ -6441,7 +6441,7 @@ void rtw89_core_query_rxdesc_v2(struct rtw89_dev *rtwdev,
u8 *data, u32 data_offset); u8 *data, u32 data_offset);
void rtw89_core_napi_start(struct rtw89_dev *rtwdev); void rtw89_core_napi_start(struct rtw89_dev *rtwdev);
void rtw89_core_napi_stop(struct rtw89_dev *rtwdev); void rtw89_core_napi_stop(struct rtw89_dev *rtwdev);
void rtw89_core_napi_init(struct rtw89_dev *rtwdev); int rtw89_core_napi_init(struct rtw89_dev *rtwdev);
void rtw89_core_napi_deinit(struct rtw89_dev *rtwdev); void rtw89_core_napi_deinit(struct rtw89_dev *rtwdev);
int rtw89_core_sta_add(struct rtw89_dev *rtwdev, int rtw89_core_sta_add(struct rtw89_dev *rtwdev,
struct ieee80211_vif *vif, struct ieee80211_vif *vif,
......
...@@ -4293,7 +4293,11 @@ int rtw89_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) ...@@ -4293,7 +4293,11 @@ int rtw89_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
rtw89_pci_link_cfg(rtwdev); rtw89_pci_link_cfg(rtwdev);
rtw89_pci_l1ss_cfg(rtwdev); rtw89_pci_l1ss_cfg(rtwdev);
rtw89_core_napi_init(rtwdev); ret = rtw89_core_napi_init(rtwdev);
if (ret) {
rtw89_err(rtwdev, "failed to init napi\n");
goto err_clear_resource;
}
ret = rtw89_pci_request_irq(rtwdev, pdev); ret = rtw89_pci_request_irq(rtwdev, pdev);
if (ret) { if (ret) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment