Re: [PATCH v2] staging: wfx: use container_of() to get vif

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Apr 07, 2022 at 11:23:49PM -0400, Jaehee Park wrote:
> diff --git a/drivers/staging/wfx/wfx.h b/drivers/staging/wfx/wfx.h
> index 6594cc647c2f..78f2a416fe4f 100644
> --- a/drivers/staging/wfx/wfx.h
> +++ b/drivers/staging/wfx/wfx.h
> @@ -25,6 +25,8 @@
>  #define USEC_PER_TXOP 32 /* see struct ieee80211_tx_queue_params */
>  #define USEC_PER_TU 1024
>  
> +#define wvif_to_vif(ptr)(container_of((void *)ptr, struct ieee80211_vif, drv_priv))
> +

Better to make this a function.

Stefano's comments are correct.  It would have saved space with the 80
limit to do a "struct ieee80211_vif *vif = wvif_to_vif();" at the start
of the function.  Also dereferencing the results of a function call
like this, "frob(foo)->bar", without checking makes me itch.  If it's
at the top of the function then that's kind of different.  I normally
assume that the functions in the declaration block cannot fail.  From
analysing static checker warnings, putting functions which can fail in
that the declaration block is risky.

It's always better to test things but this patch looks correct to me:

The add interface does:

	struct wfx_vif *wvif = (struct wfx_vif *)vif->drv_priv
        ...
	wvif->vif = vif;

The remove interface does:
	wvif->vif = NULL;

Those are the only places where ->vif is set container_of() will always
work.

regards,
dan carpenter





[Index of Archives]     [Linux Driver Development]     [Linux Driver Backports]     [DMA Engine]     [Linux GPIO]     [Linux SPI]     [Video for Linux]     [Linux USB Devel]     [Linux Coverity]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux