Skip to content

Commit

Permalink
wifi: rtw88: Un-embed dummy device
Browse files Browse the repository at this point in the history
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 RTL8723DE and RTL8822CE.

Signed-off-by: Breno Leitao <leitao@debian.org>
Acked-by: Ping-Ke Shih <pkshih@realtek.com>
Tested-by: Ping-Ke Shih <pkshih@realtek.com>
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Link: https://msgid.link/20240425082910.2824393-1-leitao@debian.org
  • Loading branch information
Breno Leitao authored and Ping-Ke Shih committed May 9, 2024
1 parent 4c9aa94 commit d0bcb10
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 5 deletions.
17 changes: 13 additions & 4 deletions drivers/net/wireless/realtek/rtw88/pci.c
Original file line number Diff line number Diff line change
Expand Up @@ -1682,12 +1682,16 @@ static int rtw_pci_napi_poll(struct napi_struct *napi, int budget)
return work_done;
}

static void rtw_pci_napi_init(struct rtw_dev *rtwdev)
static int rtw_pci_napi_init(struct rtw_dev *rtwdev)
{
struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv;

init_dummy_netdev(&rtwpci->netdev);
netif_napi_add(&rtwpci->netdev, &rtwpci->napi, rtw_pci_napi_poll);
rtwpci->netdev = alloc_netdev_dummy(0);
if (!rtwpci->netdev)
return -ENOMEM;

netif_napi_add(rtwpci->netdev, &rtwpci->napi, rtw_pci_napi_poll);
return 0;
}

static void rtw_pci_napi_deinit(struct rtw_dev *rtwdev)
Expand All @@ -1696,6 +1700,7 @@ static void rtw_pci_napi_deinit(struct rtw_dev *rtwdev)

rtw_pci_napi_stop(rtwdev);
netif_napi_del(&rtwpci->napi);
free_netdev(rtwpci->netdev);
}

int rtw_pci_probe(struct pci_dev *pdev,
Expand Down Expand Up @@ -1745,7 +1750,11 @@ int rtw_pci_probe(struct pci_dev *pdev,
goto err_pci_declaim;
}

rtw_pci_napi_init(rtwdev);
ret = rtw_pci_napi_init(rtwdev);
if (ret) {
rtw_err(rtwdev, "failed to setup NAPI\n");
goto err_pci_declaim;
}

ret = rtw_chip_info_setup(rtwdev);
if (ret) {
Expand Down
2 changes: 1 addition & 1 deletion drivers/net/wireless/realtek/rtw88/pci.h
Original file line number Diff line number Diff line change
Expand Up @@ -215,7 +215,7 @@ struct rtw_pci {
bool running;

/* napi structure */
struct net_device netdev;
struct net_device *netdev;
struct napi_struct napi;

u16 rx_tag;
Expand Down

0 comments on commit d0bcb10

Please sign in to comment.