Re: [Outreachy kernel] [PATCH 1/6] staging: wlan-ng: Fix sparse warning of restricted __le16

From: Alison Schofield
Date: Thu Mar 02 2017 - 12:34:34 EST


On Thu, Mar 02, 2017 at 12:14:40PM +0100, Julia Lawall wrote:
>
>
> On Thu, 2 Mar 2017, SIMRAN SINGHAL wrote:
>
> > On Thu, Mar 2, 2017 at 3:20 PM, Julia Lawall <julia.lawall@xxxxxxx> wrote:
> > >
> > >
> > > On Thu, 2 Mar 2017, Julia Lawall wrote:
> > >
> > >>
> > >>
> > >> On Thu, 2 Mar 2017, simran singhal wrote:
> > >>
> > >> > This patch fixes the following sparse warning:
> > >> > warning: cast to restricted __le16
> > >>
> > >> You commit message should not say just fix X. What have you done to carry
> > >> out the fix and why is this the correct approach?
> > >
> > > This comment applies to all of the patches in the series.
> > >
> > > julia
> > >
> > The changes and sparse warnings for them seems reasonable to me as
> > after doing the
> > change sparse was not showing error like cast to __le16 or something like this.
> > Also it compiled perfectly.
>
> This doesn't mean that it actually works. The function calls at least may
> have been put there for a reason. Maysbe you can find other patches that
> relate to this call and see what they do.
>
> julia

Hi Simran,

Just following on Julia's feedback and I see you've gotten
a message that this breaks little endian machines.

Good for you for trying to go deeper. I'd suggest taking this one
at a time and figure out what is going on with one of them. As Julia
says, with this kind of change, you will have to prove why it is
correct. (You might not be able to change any of these - I don't know,
but I know you'll learn something!)

Look here - and then pick one to trace through -
https://kernelnewbies.org/EndianIssues

Generally - probably best to test the waters with something of this
type, with a single patch. Get that nailed, then move onto a patchset,
if you have a pattern.

Heads down & good luck!

alisons

>
>
> > >>
> > >> julia
> > >>
> > >> >
> > >> > Signed-off-by: simran singhal <singhalsimran0@xxxxxxxxx>
> > >> > ---
> > >> > drivers/staging/wlan-ng/prism2sta.c | 51 ++++++++++++++++++-------------------
> > >> > 1 file changed, 25 insertions(+), 26 deletions(-)
> > >> >
> > >> > diff --git a/drivers/staging/wlan-ng/prism2sta.c b/drivers/staging/wlan-ng/prism2sta.c
> > >> > index 984804b..82d3a70 100644
> > >> > --- a/drivers/staging/wlan-ng/prism2sta.c
> > >> > +++ b/drivers/staging/wlan-ng/prism2sta.c
> > >> > @@ -372,10 +372,9 @@ static int prism2sta_mlmerequest(struct wlandevice *wlandev,
> > >> > qualmsg->noise.status =
> > >> > P80211ENUM_msgitem_status_data_ok;
> > >> >
> > >> > - qualmsg->link.data = le16_to_cpu(hw->qual.cq_curr_bss);
> > >> > - qualmsg->level.data =
> > >> > - le16_to_cpu(hw->qual.asl_curr_bss);
> > >> > - qualmsg->noise.data = le16_to_cpu(hw->qual.anl_curr_fc);
> > >> > + qualmsg->link.data = hw->qual.cq_curr_bss;
> > >> > + qualmsg->level.data = hw->qual.asl_curr_bss;
> > >> > + qualmsg->noise.data = hw->qual.anl_curr_fc;
> > >> > qualmsg->txrate.data = hw->txrate;
> > >> >
> > >> > break;
> > >> > @@ -603,10 +602,10 @@ static int prism2sta_getcardinfo(struct wlandevice *wlandev)
> > >> > }
> > >> >
> > >> > /* get all the nic id fields in host byte order */
> > >> > - hw->ident_nic.id = le16_to_cpu(hw->ident_nic.id);
> > >> > - hw->ident_nic.variant = le16_to_cpu(hw->ident_nic.variant);
> > >> > - hw->ident_nic.major = le16_to_cpu(hw->ident_nic.major);
> > >> > - hw->ident_nic.minor = le16_to_cpu(hw->ident_nic.minor);
> > >> > + hw->ident_nic.id = hw->ident_nic.id;
> > >> > + hw->ident_nic.variant = hw->ident_nic.variant;
> > >> > + hw->ident_nic.major = hw->ident_nic.major;
> > >> > + hw->ident_nic.minor = hw->ident_nic.minor;
> > >> >
> > >> > netdev_info(wlandev->netdev, "ident: nic h/w: id=0x%02x %d.%d.%d\n",
> > >> > hw->ident_nic.id, hw->ident_nic.major,
> > >> > @@ -622,10 +621,10 @@ static int prism2sta_getcardinfo(struct wlandevice *wlandev)
> > >> > }
> > >> >
> > >> > /* get all the private fw id fields in host byte order */
> > >> > - hw->ident_pri_fw.id = le16_to_cpu(hw->ident_pri_fw.id);
> > >> > - hw->ident_pri_fw.variant = le16_to_cpu(hw->ident_pri_fw.variant);
> > >> > - hw->ident_pri_fw.major = le16_to_cpu(hw->ident_pri_fw.major);
> > >> > - hw->ident_pri_fw.minor = le16_to_cpu(hw->ident_pri_fw.minor);
> > >> > + hw->ident_pri_fw.id = hw->ident_pri_fw.id;
> > >> > + hw->ident_pri_fw.variant = hw->ident_pri_fw.variant;
> > >> > + hw->ident_pri_fw.major = hw->ident_pri_fw.major;
> > >> > + hw->ident_pri_fw.minor = hw->ident_pri_fw.minor;
> > >> >
> > >> > netdev_info(wlandev->netdev, "ident: pri f/w: id=0x%02x %d.%d.%d\n",
> > >> > hw->ident_pri_fw.id, hw->ident_pri_fw.major,
> > >> > @@ -648,10 +647,10 @@ static int prism2sta_getcardinfo(struct wlandevice *wlandev)
> > >> > }
> > >> >
> > >> > /* get all the station fw id fields in host byte order */
> > >> > - hw->ident_sta_fw.id = le16_to_cpu(hw->ident_sta_fw.id);
> > >> > - hw->ident_sta_fw.variant = le16_to_cpu(hw->ident_sta_fw.variant);
> > >> > - hw->ident_sta_fw.major = le16_to_cpu(hw->ident_sta_fw.major);
> > >> > - hw->ident_sta_fw.minor = le16_to_cpu(hw->ident_sta_fw.minor);
> > >> > + hw->ident_sta_fw.id = hw->ident_sta_fw.id;
> > >> > + hw->ident_sta_fw.variant = hw->ident_sta_fw.variant;
> > >> > + hw->ident_sta_fw.major = hw->ident_sta_fw.major;
> > >> > + hw->ident_sta_fw.minor = hw->ident_sta_fw.minor;
> > >> >
> > >> > /* strip out the 'special' variant bits */
> > >> > hw->mm_mods = hw->ident_sta_fw.variant & GENMASK(15, 14);
> > >> > @@ -683,11 +682,11 @@ static int prism2sta_getcardinfo(struct wlandevice *wlandev)
> > >> > /* get all the Compatibility range, modem interface supplier
> > >> > * fields in byte order
> > >> > */
> > >> > - hw->cap_sup_mfi.role = le16_to_cpu(hw->cap_sup_mfi.role);
> > >> > - hw->cap_sup_mfi.id = le16_to_cpu(hw->cap_sup_mfi.id);
> > >> > - hw->cap_sup_mfi.variant = le16_to_cpu(hw->cap_sup_mfi.variant);
> > >> > - hw->cap_sup_mfi.bottom = le16_to_cpu(hw->cap_sup_mfi.bottom);
> > >> > - hw->cap_sup_mfi.top = le16_to_cpu(hw->cap_sup_mfi.top);
> > >> > + hw->cap_sup_mfi.role = hw->cap_sup_mfi.role;
> > >> > + hw->cap_sup_mfi.id = hw->cap_sup_mfi.id;
> > >> > + hw->cap_sup_mfi.variant = hw->cap_sup_mfi.variant;
> > >> > + hw->cap_sup_mfi.bottom = hw->cap_sup_mfi.bottom;
> > >> > + hw->cap_sup_mfi.top = hw->cap_sup_mfi.top;
> > >> >
> > >> > netdev_info(wlandev->netdev,
> > >> > "MFI:SUP:role=0x%02x:id=0x%02x:var=0x%02x:b/t=%d/%d\n",
> > >> > @@ -707,11 +706,11 @@ static int prism2sta_getcardinfo(struct wlandevice *wlandev)
> > >> > /* get all the Compatibility range, controller interface supplier
> > >> > * fields in byte order
> > >> > */
> > >> > - hw->cap_sup_cfi.role = le16_to_cpu(hw->cap_sup_cfi.role);
> > >> > - hw->cap_sup_cfi.id = le16_to_cpu(hw->cap_sup_cfi.id);
> > >> > - hw->cap_sup_cfi.variant = le16_to_cpu(hw->cap_sup_cfi.variant);
> > >> > - hw->cap_sup_cfi.bottom = le16_to_cpu(hw->cap_sup_cfi.bottom);
> > >> > - hw->cap_sup_cfi.top = le16_to_cpu(hw->cap_sup_cfi.top);
> > >> > + hw->cap_sup_cfi.role = hw->cap_sup_cfi.role;
> > >> > + hw->cap_sup_cfi.id = hw->cap_sup_cfi.id;
> > >> > + hw->cap_sup_cfi.variant = hw->cap_sup_cfi.variant;
> > >> > + hw->cap_sup_cfi.bottom = hw->cap_sup_cfi.bottom;
> > >> > + hw->cap_sup_cfi.top = hw->cap_sup_cfi.top;
> > >> >
> > >> > netdev_info(wlandev->netdev,
> > >> > "CFI:SUP:role=0x%02x:id=0x%02x:var=0x%02x:b/t=%d/%d\n",
> > >> > --
> > >> > 2.7.4
> > >> >
> > >> > --
> > >> > You received this message because you are subscribed to the Google Groups "outreachy-kernel" group.
> > >> > To unsubscribe from this group and stop receiving emails from it, send an email to outreachy-kernel+unsubscribe@xxxxxxxxxxxxxxxxx
> > >> > To post to this group, send email to outreachy-kernel@xxxxxxxxxxxxxxxxx
> > >> > To view this discussion on the web visit https://groups.google.com/d/msgid/outreachy-kernel/1488448146-29452-1-git-send-email-singhalsimran0%40gmail.com.
> > >> > For more options, visit https://groups.google.com/d/optout.
> > >> >
> > >>
> > >> --
> > >> You received this message because you are subscribed to the Google Groups "outreachy-kernel" group.
> > >> To unsubscribe from this group and stop receiving emails from it, send an email to outreachy-kernel+unsubscribe@xxxxxxxxxxxxxxxxx
> > >> To post to this group, send email to outreachy-kernel@xxxxxxxxxxxxxxxxx
> > >> To view this discussion on the web visit https://groups.google.com/d/msgid/outreachy-kernel/alpine.DEB.2.20.1703021047350.3414%40hadrien.
> > >> For more options, visit https://groups.google.com/d/optout.
> > >>
> >
> > --
> > You received this message because you are subscribed to the Google Groups "outreachy-kernel" group.
> > To unsubscribe from this group and stop receiving emails from it, send an email to outreachy-kernel+unsubscribe@xxxxxxxxxxxxxxxxx
> > To post to this group, send email to outreachy-kernel@xxxxxxxxxxxxxxxxx
> > To view this discussion on the web visit https://groups.google.com/d/msgid/outreachy-kernel/CALrZqyNGZcP8c9oeS65r-PRTPpwcn664iB2WvWdx3ccD5KRRLg%40mail.gmail.com.
> > For more options, visit https://groups.google.com/d/optout.
> >
>
> --
> You received this message because you are subscribed to the Google Groups "outreachy-kernel" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to outreachy-kernel+unsubscribe@xxxxxxxxxxxxxxxxx
> To post to this group, send email to outreachy-kernel@xxxxxxxxxxxxxxxxx
> To view this discussion on the web visit https://groups.google.com/d/msgid/outreachy-kernel/alpine.DEB.2.20.1703021213050.3414%40hadrien.
> For more options, visit https://groups.google.com/d/optout.