From: Dan Carpenter <dan.carpenter@oracle.com>
To: Jaehee <jhpark1013@gmail.com>
Cc: "Kalle Valo" <kvalo@kernel.org>,
"Jérôme Pouiller" <jerome.pouiller@silabs.com>,
"David S. Miller" <davem@davemloft.net>,
"Jakub Kicinski" <kuba@kernel.org>,
"Paolo Abeni" <pabeni@redhat.com>,
linux-wireless@vger.kernel.org, netdev@vger.kernel.org,
linux-kernel@vger.kernel.org, linux-staging@lists.linux.dev,
"Outreachy Linux Kernel" <outreachy@lists.linux.dev>,
"Stefano Brivio" <sbrivio@redhat.com>
Subject: Re: [PATCH] wfx: use container_of() to get vif
Date: Wed, 4 May 2022 12:33:48 +0300 [thread overview]
Message-ID: <20220504093347.GB4009@kadam> (raw)
In-Reply-To: <CAA1TwFCOEEwnayexnJin8T=Fc2HEgHC9jyfj5HxfiWybjUi9GA@mail.gmail.com>
On Mon, May 02, 2022 at 02:10:07PM -0400, Jaehee wrote:
> On Wed, Apr 20, 2022 at 7:58 AM Kalle Valo <kvalo@kernel.org> wrote:
> >
> > Jaehee Park <jhpark1013@gmail.com> writes:
> >
> > > Currently, upon virtual interface creation, wfx_add_interface() stores
> > > a reference to the corresponding struct ieee80211_vif in private data,
> > > for later usage. This is not needed when using the container_of
> > > construct. This construct already has all the info it needs to retrieve
> > > the reference to the corresponding struct from the offset that is
> > > already available, inherent in container_of(), between its type and
> > > member inputs (struct ieee80211_vif and drv_priv, respectively).
> > > Remove vif (which was previously storing the reference to the struct
> > > ieee80211_vif) from the struct wfx_vif, define a function
> > > wvif_to_vif(wvif) for container_of(), and replace all wvif->vif with
> > > the newly defined container_of construct.
> > >
> > > Signed-off-by: Jaehee Park <jhpark1013@gmail.com>
> >
> > [...]
> >
> > > +static inline struct ieee80211_vif *wvif_to_vif(struct wfx_vif *wvif)
> > > +{
> > > + return container_of((void *)wvif, struct ieee80211_vif, drv_priv);
> > > +}
> >
> > Why the void pointer cast? Avoid casts as much possible.
> >
>
> Hi Kalle,
>
> Sorry for the delay in getting back to you about why the void pointer
> cast was used.
>
> In essence, I'm taking private data with a driver-specific pointer
> and that needs to be resolved back to a generic pointer.
>
> The private data (drv_priv) is declared as a generic u8 array in struct
> ieee80211_vif, but wvif is a more specific type.
>
> I wanted to also point to existing, reasonable examples such as:
> static void iwl_mvm_tcm_uapsd_nonagg_detected_wk(struct work_struct *wk)
> {
> struct iwl_mvm *mvm;
> struct iwl_mvm_vif *mvmvif;
> struct ieee80211_vif *vif;
>
> mvmvif = container_of(wk, struct iwl_mvm_vif,
> uapsd_nonagg_detected_wk.work);
> vif = container_of((void *)mvmvif, struct ieee80211_vif, drv_priv);
>
> in drivers/net/wireless$ less intel/iwlwifi/mvm/utils.c, which does the
> same thing.
>
> There are fifteen of them throughout:
The cast is fine, but this email is frustrating.
It sounds like you are saying that you copied it from other code and
that's not a good answer... :/ It's easiest if you just copy and paste
the build error and we can figure out why the cast is need for our
selves...
drivers/net/wireless/silabs/wfx/data_rx.c: In function ‘wvif_to_vif’:
./include/linux/build_bug.h:78:41: error: static assertion failed: "pointer type mismatch in container_of()"
78 | #define __static_assert(expr, msg, ...) _Static_assert(expr, msg)
| ^~~~~~~~~~~~~~
./include/linux/build_bug.h:77:34: note: in expansion of macro ‘__static_assert’
77 | #define static_assert(expr, ...) __static_assert(expr, ##__VA_ARGS__, #expr)
| ^~~~~~~~~~~~~~~
./include/linux/container_of.h:19:9: note: in expansion of macro ‘static_assert’
19 | static_assert(__same_type(*(ptr), ((type *)0)->member) || \
| ^~~~~~~~~~~~~
drivers/net/wireless/silabs/wfx/data_rx.c:20:16: note: in expansion of macro ‘container_of’
20 | return container_of(wvif, struct ieee80211_vif, drv_priv);
| ^~~~~~~~~~~~
regards,
dan carpenter
next prev parent reply other threads:[~2022-05-04 9:34 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-04-18 3:51 [PATCH] wfx: use container_of() to get vif Jaehee Park
2022-04-19 13:39 ` Jérôme Pouiller
2022-05-03 18:18 ` Jaehee Park
2022-04-20 11:57 ` Kalle Valo
2022-04-20 16:53 ` Fabio M. De Francesco
2022-05-02 18:10 ` Jaehee
2022-05-02 18:34 ` Jaehee Park
2022-05-04 9:33 ` Dan Carpenter [this message]
2022-05-04 11:50 ` Stefano Brivio
2022-05-04 13:25 ` Dan Carpenter
2022-05-04 16:05 ` Kalle Valo
2022-05-04 17:07 ` Jaehee Park
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220504093347.GB4009@kadam \
--to=dan.carpenter@oracle.com \
--cc=davem@davemloft.net \
--cc=jerome.pouiller@silabs.com \
--cc=jhpark1013@gmail.com \
--cc=kuba@kernel.org \
--cc=kvalo@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-staging@lists.linux.dev \
--cc=linux-wireless@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=outreachy@lists.linux.dev \
--cc=pabeni@redhat.com \
--cc=sbrivio@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.