Message ID | 20240424182351.3936556-1-leitao@debian.org (mailing list archive) |
---|---|
State | Accepted |
Delegated to: | Ping-Ke Shih |
Headers | show |
Series | [wireless] wifi: rtw89: Un-embed dummy device | expand |
Breno Leitao <leitao@debian.org> wrote: > 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> I think this patch should go via net-next tree, because wireless-next tree doesn't have patch of dummy devices yet. Acked-by: Ping-Ke Shih <pkshih@realtek.com> > --- > drivers/net/wireless/realtek/rtw89/core.c | 11 ++++++++--- > drivers/net/wireless/realtek/rtw89/core.h | 4 ++-- > drivers/net/wireless/realtek/rtw89/pci.c | 6 +++++- > 3 files changed, 15 insertions(+), 6 deletions(-) > > PS: This is compile-tested only due to lack of hardware. I picked this patch to local net-next tree, and tested on RTL8852BE, RTL8852C and RTL8922AE. Tested-by: Ping-Ke Shih <pkshih@realtek.com>
Ping-Ke Shih <pkshih@realtek.com> writes: > Breno Leitao <leitao@debian.org> wrote: >> 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> > > I think this patch should go via net-next tree, because wireless-next tree > doesn't have patch of dummy devices yet. > > Acked-by: Ping-Ke Shih <pkshih@realtek.com> FWIW I sent the wireless-next pull request yesterday and once it pulled we will fast forward wireless-next to latest net-next.
Kalle Valo <kvalo@kernel.org> writes: > Ping-Ke Shih <pkshih@realtek.com> writes: > >> Breno Leitao <leitao@debian.org> wrote: >>> 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> >> >> I think this patch should go via net-next tree, because wireless-next tree >> doesn't have patch of dummy devices yet. >> >> Acked-by: Ping-Ke Shih <pkshih@realtek.com> > > FWIW I sent the wireless-next pull request yesterday and once it pulled > we will fast forward wireless-next to latest net-next. Oh, I just realised that this is not CCed to netdev so their patchwork won't even see the patch. Ping, I recommend that you wait for the dependency commits to trickle down to your tree and then apply the patch. That's the simplest approach and no need to resend anything.
Kalle Valo <kvalo@kernel.org> wrote: > Kalle Valo <kvalo@kernel.org> writes: > > > Ping-Ke Shih <pkshih@realtek.com> writes: > > > >> Breno Leitao <leitao@debian.org> wrote: > >>> 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> > >> > >> I think this patch should go via net-next tree, because wireless-next tree > >> doesn't have patch of dummy devices yet. > >> > >> Acked-by: Ping-Ke Shih <pkshih@realtek.com> > > > > FWIW I sent the wireless-next pull request yesterday and once it pulled > > we will fast forward wireless-next to latest net-next. > > Oh, I just realised that this is not CCed to netdev so their patchwork > won't even see the patch. Ping, I recommend that you wait for the > dependency commits to trickle down to your tree and then apply the > patch. That's the simplest approach and no need to resend anything. Okay. If we don't hurry to get this patch merged, I will apply this patch to my tree.
Breno Leitao <leitao@debian.org> wrote: > 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: Ping-Ke Shih <pkshih@realtek.com> > Tested-by: Ping-Ke Shih <pkshih@realtek.com> 1 patch(es) applied to rtw-next branch of rtw.git, thanks. 4c9aa94a39e6 wifi: rtw89: Un-embed dummy device --- https://github.com/pkshih/rtw.git
diff --git a/drivers/net/wireless/realtek/rtw89/core.c b/drivers/net/wireless/realtek/rtw89/core.c index d474b8d5df3d..ade3e2a953a1 100644 --- a/drivers/net/wireless/realtek/rtw89/core.c +++ b/drivers/net/wireless/realtek/rtw89/core.c @@ -2485,11 +2485,15 @@ void rtw89_core_napi_stop(struct rtw89_dev *rtwdev) } 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); - netif_napi_add(&rtwdev->netdev, &rtwdev->napi, + rtwdev->netdev = alloc_netdev_dummy(0); + if (!rtwdev->netdev) + return -ENOMEM; + + netif_napi_add(rtwdev->netdev, &rtwdev->napi, rtwdev->hci.ops->napi_poll); + return 0; } EXPORT_SYMBOL(rtw89_core_napi_init); @@ -2497,6 +2501,7 @@ void rtw89_core_napi_deinit(struct rtw89_dev *rtwdev) { rtw89_core_napi_stop(rtwdev); netif_napi_del(&rtwdev->napi); + free_netdev(rtwdev->netdev); } EXPORT_SYMBOL(rtw89_core_napi_deinit); diff --git a/drivers/net/wireless/realtek/rtw89/core.h b/drivers/net/wireless/realtek/rtw89/core.h index fc1ed8612cf1..e206a2186747 100644 --- a/drivers/net/wireless/realtek/rtw89/core.h +++ b/drivers/net/wireless/realtek/rtw89/core.h @@ -5239,7 +5239,7 @@ struct rtw89_dev { struct rtw89_wow_param wow; /* napi structure */ - struct net_device netdev; + struct net_device *netdev; struct napi_struct napi; int napi_budget_countdown; @@ -6211,7 +6211,7 @@ void rtw89_core_query_rxdesc_v2(struct rtw89_dev *rtwdev, u8 *data, u32 data_offset); void rtw89_core_napi_start(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); int rtw89_core_sta_add(struct rtw89_dev *rtwdev, struct ieee80211_vif *vif, diff --git a/drivers/net/wireless/realtek/rtw89/pci.c b/drivers/net/wireless/realtek/rtw89/pci.c index 19001130ad94..ef41c3a83b4a 100644 --- a/drivers/net/wireless/realtek/rtw89/pci.c +++ b/drivers/net/wireless/realtek/rtw89/pci.c @@ -4201,7 +4201,11 @@ int rtw89_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) rtw89_pci_link_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); if (ret) {
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> --- drivers/net/wireless/realtek/rtw89/core.c | 11 ++++++++--- drivers/net/wireless/realtek/rtw89/core.h | 4 ++-- drivers/net/wireless/realtek/rtw89/pci.c | 6 +++++- 3 files changed, 15 insertions(+), 6 deletions(-) PS: This is compile-tested only due to lack of hardware.