[PATCH wireless-next] wifi: wcn36xx: allocate chan_surveys with main struct

Loic Poulain loic.poulain at oss.qualcomm.com
Sat Jun 6 06:28:10 PDT 2026


On Tue, May 19, 2026 at 4:03 AM Rosen Penev <rosenp at gmail.com> wrote:
>
> Avoid allocating separately with a flexible array member. Simplifies
> allocation slightly.
>
> Signed-off-by: Rosen Penev <rosenp at gmail.com>

Reviewed-by: Loic Poulain <loic.poulain at oss.qualcomm.com>


> ---
>  drivers/net/wireless/ath/wcn36xx/main.c    | 13 ++-----------
>  drivers/net/wireless/ath/wcn36xx/wcn36xx.h |  2 +-
>  2 files changed, 3 insertions(+), 12 deletions(-)
>
> diff --git a/drivers/net/wireless/ath/wcn36xx/main.c b/drivers/net/wireless/ath/wcn36xx/main.c
> index c3f0860873de..ad8a4bd910d2 100644
> --- a/drivers/net/wireless/ath/wcn36xx/main.c
> +++ b/drivers/net/wireless/ath/wcn36xx/main.c
> @@ -1568,7 +1568,8 @@ static int wcn36xx_probe(struct platform_device *pdev)
>
>         wcnss = dev_get_drvdata(pdev->dev.parent);
>
> -       hw = ieee80211_alloc_hw(sizeof(struct wcn36xx), &wcn36xx_ops);
> +       n_channels = wcn_band_2ghz.n_channels + wcn_band_5ghz.n_channels;
> +       hw = ieee80211_alloc_hw(struct_size(wcn, chan_survey, n_channels), &wcn36xx_ops);
>         if (!hw) {
>                 wcn36xx_err("failed to alloc hw\n");
>                 ret = -ENOMEM;
> @@ -1590,16 +1591,6 @@ static int wcn36xx_probe(struct platform_device *pdev)
>                 goto out_wq;
>         }
>
> -       n_channels = wcn_band_2ghz.n_channels + wcn_band_5ghz.n_channels;
> -       wcn->chan_survey = devm_kcalloc(wcn->dev,
> -                                       n_channels,
> -                                       sizeof(struct wcn36xx_chan_survey),
> -                                       GFP_KERNEL);
> -       if (!wcn->chan_survey) {
> -               ret = -ENOMEM;
> -               goto out_wq;
> -       }
> -
>         ret = dma_set_mask_and_coherent(wcn->dev, DMA_BIT_MASK(32));
>         if (ret < 0) {
>                 wcn36xx_err("failed to set DMA mask: %d\n", ret);
> diff --git a/drivers/net/wireless/ath/wcn36xx/wcn36xx.h b/drivers/net/wireless/ath/wcn36xx/wcn36xx.h
> index 7ee79593cd23..8c43f67bd780 100644
> --- a/drivers/net/wireless/ath/wcn36xx/wcn36xx.h
> +++ b/drivers/net/wireless/ath/wcn36xx/wcn36xx.h
> @@ -298,7 +298,7 @@ struct wcn36xx {
>         struct ieee80211_channel *channel;
>
>         spinlock_t survey_lock;         /* protects chan_survey */
> -       struct wcn36xx_chan_survey      *chan_survey;
> +       struct wcn36xx_chan_survey      chan_survey[];
>  };
>
>  static inline bool wcn36xx_is_fw_version(struct wcn36xx *wcn,
> --
> 2.54.0
>



More information about the wcn36xx mailing list