* [PATCH 0/2] staging: wlan-ng: remove Sparse warnings for reading __le16
@ 2017-03-13 13:14 Gioh Kim
2017-03-13 13:14 ` [PATCH 1/2] staging: wlan-ng: introduce a macro read_u16 Gioh Kim
2017-03-13 13:14 ` [PATCH 2/2] staging: wlan-ng: prism2sta.c: apply read_u16 macro Gioh Kim
0 siblings, 2 replies; 4+ messages in thread
From: Gioh Kim @ 2017-03-13 13:14 UTC (permalink / raw)
To: gregkh, sergio.paracuellos; +Cc: devel, linux-kernel, gurugio, Gioh Kim
Hi,
I found that many "warning: cast to restricted __le16" in staging/wlan-ng directory.
I don't know why but many structures has u16 type variable, not __le16.
And they are read by le16_to_cpu macro.
So I introduced a wrapper macro to read u16 type variable without Sparse warning,
and convert it into u32 type.
I hope this could help.
Gioh Kim (2):
taging: wlan-ng: introduce a macro read_u16
staging: wlan-ng: prism2sta.c: apply read_u16 macro
drivers/staging/wlan-ng/prism2mgmt.h | 3 +
drivers/staging/wlan-ng/prism2sta.c | 128 +++++++++++++++++------------------
2 files changed, 67 insertions(+), 64 deletions(-)
--
2.5.0
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH 1/2] staging: wlan-ng: introduce a macro read_u16
2017-03-13 13:14 [PATCH 0/2] staging: wlan-ng: remove Sparse warnings for reading __le16 Gioh Kim
@ 2017-03-13 13:14 ` Gioh Kim
2017-03-14 0:02 ` Greg KH
2017-03-13 13:14 ` [PATCH 2/2] staging: wlan-ng: prism2sta.c: apply read_u16 macro Gioh Kim
1 sibling, 1 reply; 4+ messages in thread
From: Gioh Kim @ 2017-03-13 13:14 UTC (permalink / raw)
To: gregkh, sergio.paracuellos; +Cc: devel, linux-kernel, gurugio, Gioh Kim
read_u16 is wrapper of le16_to_cpu to read u16 variable,
rather than __le16.
Signed-off-by: Gioh Kim <gi-oh.kim@profitbricks.com>
---
drivers/staging/wlan-ng/prism2mgmt.h | 3 +++
1 file changed, 3 insertions(+)
diff --git a/drivers/staging/wlan-ng/prism2mgmt.h b/drivers/staging/wlan-ng/prism2mgmt.h
index 88b979f..97ede25 100644
--- a/drivers/staging/wlan-ng/prism2mgmt.h
+++ b/drivers/staging/wlan-ng/prism2mgmt.h
@@ -63,6 +63,9 @@
extern int prism2_reset_holdtime;
extern int prism2_reset_settletime;
+#define read_u16(x) ({ u32 __r = (u32)le16_to_cpu((__force __le16)(x)); \
+ __r; })
+
u32 prism2sta_ifstate(struct wlandevice *wlandev, u32 ifstate);
void prism2sta_ev_info(struct wlandevice *wlandev,
--
2.5.0
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH 2/2] staging: wlan-ng: prism2sta.c: apply read_u16 macro
2017-03-13 13:14 [PATCH 0/2] staging: wlan-ng: remove Sparse warnings for reading __le16 Gioh Kim
2017-03-13 13:14 ` [PATCH 1/2] staging: wlan-ng: introduce a macro read_u16 Gioh Kim
@ 2017-03-13 13:14 ` Gioh Kim
1 sibling, 0 replies; 4+ messages in thread
From: Gioh Kim @ 2017-03-13 13:14 UTC (permalink / raw)
To: gregkh, sergio.paracuellos; +Cc: devel, linux-kernel, gurugio, Gioh Kim
Remove Sparse warnings "warning: cast to restricted __le16"
Signed-off-by: Gioh Kim <gi-oh.kim@profitbricks.com>
---
drivers/staging/wlan-ng/prism2sta.c | 128 ++++++++++++++++++------------------
1 file changed, 64 insertions(+), 64 deletions(-)
diff --git a/drivers/staging/wlan-ng/prism2sta.c b/drivers/staging/wlan-ng/prism2sta.c
index 9c2b4ef..b68af92 100644
--- a/drivers/staging/wlan-ng/prism2sta.c
+++ b/drivers/staging/wlan-ng/prism2sta.c
@@ -372,10 +372,10 @@ 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->link.data = read_u16(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);
+ read_u16(hw->qual.asl_curr_bss);
+ qualmsg->noise.data = read_u16(hw->qual.anl_curr_fc);
qualmsg->txrate.data = hw->txrate;
break;
@@ -603,10 +603,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 = read_u16(hw->ident_nic.id);
+ hw->ident_nic.variant = read_u16(hw->ident_nic.variant);
+ hw->ident_nic.major = read_u16(hw->ident_nic.major);
+ hw->ident_nic.minor = read_u16(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 +622,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 = read_u16(hw->ident_pri_fw.id);
+ hw->ident_pri_fw.variant = read_u16(hw->ident_pri_fw.variant);
+ hw->ident_pri_fw.major = read_u16(hw->ident_pri_fw.major);
+ hw->ident_pri_fw.minor = read_u16(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 +648,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 = read_u16(hw->ident_sta_fw.id);
+ hw->ident_sta_fw.variant = read_u16(hw->ident_sta_fw.variant);
+ hw->ident_sta_fw.major = read_u16(hw->ident_sta_fw.major);
+ hw->ident_sta_fw.minor = read_u16(hw->ident_sta_fw.minor);
/* strip out the 'special' variant bits */
hw->mm_mods = hw->ident_sta_fw.variant & GENMASK(15, 14);
@@ -683,11 +683,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 = read_u16(hw->cap_sup_mfi.role);
+ hw->cap_sup_mfi.id = read_u16(hw->cap_sup_mfi.id);
+ hw->cap_sup_mfi.variant = read_u16(hw->cap_sup_mfi.variant);
+ hw->cap_sup_mfi.bottom = read_u16(hw->cap_sup_mfi.bottom);
+ hw->cap_sup_mfi.top = read_u16(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 +707,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 = read_u16(hw->cap_sup_cfi.role);
+ hw->cap_sup_cfi.id = read_u16(hw->cap_sup_cfi.id);
+ hw->cap_sup_cfi.variant = read_u16(hw->cap_sup_cfi.variant);
+ hw->cap_sup_cfi.bottom = read_u16(hw->cap_sup_cfi.bottom);
+ hw->cap_sup_cfi.top = read_u16(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",
@@ -731,11 +731,11 @@ static int prism2sta_getcardinfo(struct wlandevice *wlandev)
/* get all the Compatibility range, primary firmware supplier
* fields in byte order
*/
- hw->cap_sup_pri.role = le16_to_cpu(hw->cap_sup_pri.role);
- hw->cap_sup_pri.id = le16_to_cpu(hw->cap_sup_pri.id);
- hw->cap_sup_pri.variant = le16_to_cpu(hw->cap_sup_pri.variant);
- hw->cap_sup_pri.bottom = le16_to_cpu(hw->cap_sup_pri.bottom);
- hw->cap_sup_pri.top = le16_to_cpu(hw->cap_sup_pri.top);
+ hw->cap_sup_pri.role = read_u16(hw->cap_sup_pri.role);
+ hw->cap_sup_pri.id = read_u16(hw->cap_sup_pri.id);
+ hw->cap_sup_pri.variant = read_u16(hw->cap_sup_pri.variant);
+ hw->cap_sup_pri.bottom = read_u16(hw->cap_sup_pri.bottom);
+ hw->cap_sup_pri.top = read_u16(hw->cap_sup_pri.top);
netdev_info(wlandev->netdev,
"PRI:SUP:role=0x%02x:id=0x%02x:var=0x%02x:b/t=%d/%d\n",
@@ -755,11 +755,11 @@ static int prism2sta_getcardinfo(struct wlandevice *wlandev)
/* get all the Compatibility range, station firmware supplier
* fields in byte order
*/
- hw->cap_sup_sta.role = le16_to_cpu(hw->cap_sup_sta.role);
- hw->cap_sup_sta.id = le16_to_cpu(hw->cap_sup_sta.id);
- hw->cap_sup_sta.variant = le16_to_cpu(hw->cap_sup_sta.variant);
- hw->cap_sup_sta.bottom = le16_to_cpu(hw->cap_sup_sta.bottom);
- hw->cap_sup_sta.top = le16_to_cpu(hw->cap_sup_sta.top);
+ hw->cap_sup_sta.role = read_u16(hw->cap_sup_sta.role);
+ hw->cap_sup_sta.id = read_u16(hw->cap_sup_sta.id);
+ hw->cap_sup_sta.variant = read_u16(hw->cap_sup_sta.variant);
+ hw->cap_sup_sta.bottom = read_u16(hw->cap_sup_sta.bottom);
+ hw->cap_sup_sta.top = read_u16(hw->cap_sup_sta.top);
if (hw->cap_sup_sta.id == 0x04) {
netdev_info(wlandev->netdev,
@@ -787,11 +787,11 @@ static int prism2sta_getcardinfo(struct wlandevice *wlandev)
/* get all the Compatibility range, primary f/w actor, CFI supplier
* fields in byte order
*/
- hw->cap_act_pri_cfi.role = le16_to_cpu(hw->cap_act_pri_cfi.role);
- hw->cap_act_pri_cfi.id = le16_to_cpu(hw->cap_act_pri_cfi.id);
- hw->cap_act_pri_cfi.variant = le16_to_cpu(hw->cap_act_pri_cfi.variant);
- hw->cap_act_pri_cfi.bottom = le16_to_cpu(hw->cap_act_pri_cfi.bottom);
- hw->cap_act_pri_cfi.top = le16_to_cpu(hw->cap_act_pri_cfi.top);
+ hw->cap_act_pri_cfi.role = read_u16(hw->cap_act_pri_cfi.role);
+ hw->cap_act_pri_cfi.id = read_u16(hw->cap_act_pri_cfi.id);
+ hw->cap_act_pri_cfi.variant = read_u16(hw->cap_act_pri_cfi.variant);
+ hw->cap_act_pri_cfi.bottom = read_u16(hw->cap_act_pri_cfi.bottom);
+ hw->cap_act_pri_cfi.top = read_u16(hw->cap_act_pri_cfi.top);
netdev_info(wlandev->netdev,
"PRI-CFI:ACT:role=0x%02x:id=0x%02x:var=0x%02x:b/t=%d/%d\n",
@@ -811,11 +811,11 @@ static int prism2sta_getcardinfo(struct wlandevice *wlandev)
/* get all the Compatibility range, station f/w actor, CFI supplier
* fields in byte order
*/
- hw->cap_act_sta_cfi.role = le16_to_cpu(hw->cap_act_sta_cfi.role);
- hw->cap_act_sta_cfi.id = le16_to_cpu(hw->cap_act_sta_cfi.id);
- hw->cap_act_sta_cfi.variant = le16_to_cpu(hw->cap_act_sta_cfi.variant);
- hw->cap_act_sta_cfi.bottom = le16_to_cpu(hw->cap_act_sta_cfi.bottom);
- hw->cap_act_sta_cfi.top = le16_to_cpu(hw->cap_act_sta_cfi.top);
+ hw->cap_act_sta_cfi.role = read_u16(hw->cap_act_sta_cfi.role);
+ hw->cap_act_sta_cfi.id = read_u16(hw->cap_act_sta_cfi.id);
+ hw->cap_act_sta_cfi.variant = read_u16(hw->cap_act_sta_cfi.variant);
+ hw->cap_act_sta_cfi.bottom = read_u16(hw->cap_act_sta_cfi.bottom);
+ hw->cap_act_sta_cfi.top = read_u16(hw->cap_act_sta_cfi.top);
netdev_info(wlandev->netdev,
"STA-CFI:ACT:role=0x%02x:id=0x%02x:var=0x%02x:b/t=%d/%d\n",
@@ -835,11 +835,11 @@ static int prism2sta_getcardinfo(struct wlandevice *wlandev)
/* get all the Compatibility range, station f/w actor, MFI supplier
* fields in byte order
*/
- hw->cap_act_sta_mfi.role = le16_to_cpu(hw->cap_act_sta_mfi.role);
- hw->cap_act_sta_mfi.id = le16_to_cpu(hw->cap_act_sta_mfi.id);
- hw->cap_act_sta_mfi.variant = le16_to_cpu(hw->cap_act_sta_mfi.variant);
- hw->cap_act_sta_mfi.bottom = le16_to_cpu(hw->cap_act_sta_mfi.bottom);
- hw->cap_act_sta_mfi.top = le16_to_cpu(hw->cap_act_sta_mfi.top);
+ hw->cap_act_sta_mfi.role = read_u16(hw->cap_act_sta_mfi.role);
+ hw->cap_act_sta_mfi.id = read_u16(hw->cap_act_sta_mfi.id);
+ hw->cap_act_sta_mfi.variant = read_u16(hw->cap_act_sta_mfi.variant);
+ hw->cap_act_sta_mfi.bottom = read_u16(hw->cap_act_sta_mfi.bottom);
+ hw->cap_act_sta_mfi.top = read_u16(hw->cap_act_sta_mfi.top);
netdev_info(wlandev->netdev,
"STA-MFI:ACT:role=0x%02x:id=0x%02x:var=0x%02x:b/t=%d/%d\n",
@@ -1012,7 +1012,7 @@ static void prism2sta_inf_tallies(struct wlandevice *wlandev,
dst = (u32 *)&hw->tallies;
src16 = (u16 *)&inf->info.commtallies16;
for (i = 0; i < cnt; i++, dst++, src16++)
- *dst += le16_to_cpu(*src16);
+ *dst += read_u16(*src16);
}
}
@@ -1136,7 +1136,7 @@ static void prism2sta_inf_chinforesults(struct wlandevice *wlandev,
unsigned int i, n;
hw->channel_info.results.scanchannels =
- le16_to_cpu(inf->info.chinforesult.scanchannels);
+ read_u16(inf->info.chinforesult.scanchannels);
for (i = 0, n = 0; i < HFA384x_CHINFORESULT_MAX; i++) {
struct hfa384x_ch_info_result_sub *result;
@@ -1147,16 +1147,16 @@ static void prism2sta_inf_chinforesults(struct wlandevice *wlandev,
continue;
result = &inf->info.chinforesult.result[n];
- chan = le16_to_cpu(result->chid) - 1;
+ chan = read_u16(result->chid) - 1;
if (chan < 0 || chan >= HFA384x_CHINFORESULT_MAX)
continue;
chinforesult = &hw->channel_info.results.result[chan];
chinforesult->chid = chan;
- chinforesult->anl = le16_to_cpu(result->anl);
- chinforesult->pnl = le16_to_cpu(result->pnl);
- chinforesult->active = le16_to_cpu(result->active);
+ chinforesult->anl = read_u16(result->anl);
+ chinforesult->pnl = read_u16(result->pnl);
+ chinforesult->active = read_u16(result->active);
pr_debug("chinfo: channel %d, %s level (avg/peak)=%d/%d dB, pcf %d\n",
chan + 1,
@@ -1447,7 +1447,7 @@ static void prism2sta_inf_linkstatus(struct wlandevice *wlandev,
{
struct hfa384x *hw = wlandev->priv;
- hw->link_status_new = le16_to_cpu(inf->info.linkstatus.linkstatus);
+ hw->link_status_new = read_u16(inf->info.linkstatus.linkstatus);
schedule_work(&hw->link_bh);
}
@@ -1478,8 +1478,8 @@ static void prism2sta_inf_assocstatus(struct wlandevice *wlandev,
int i;
memcpy(&rec, &inf->info.assocstatus, sizeof(rec));
- rec.assocstatus = le16_to_cpu(rec.assocstatus);
- rec.reason = le16_to_cpu(rec.reason);
+ rec.assocstatus = read_u16(rec.assocstatus);
+ rec.reason = read_u16(rec.reason);
/*
* Find the address in the list of authenticated stations.
@@ -1725,7 +1725,7 @@ static void prism2sta_inf_psusercnt(struct wlandevice *wlandev,
{
struct hfa384x *hw = wlandev->priv;
- hw->psusercount = le16_to_cpu(inf->info.psusercnt.usercnt);
+ hw->psusercount = read_u16(inf->info.psusercnt.usercnt);
}
/*
@@ -1748,7 +1748,7 @@ static void prism2sta_inf_psusercnt(struct wlandevice *wlandev,
void prism2sta_ev_info(struct wlandevice *wlandev,
struct hfa384x_inf_frame *inf)
{
- inf->infotype = le16_to_cpu(inf->infotype);
+ inf->infotype = read_u16(inf->infotype);
/* Dispatch */
switch (inf->infotype) {
case HFA384x_IT_HANDOVERADDR:
@@ -1947,9 +1947,9 @@ void prism2sta_commsqual_defer(struct work_struct *data)
}
pr_debug("commsqual %d %d %d\n",
- le16_to_cpu(hw->qual.cq_curr_bss),
- le16_to_cpu(hw->qual.asl_curr_bss),
- le16_to_cpu(hw->qual.anl_curr_fc));
+ read_u16(hw->qual.cq_curr_bss),
+ read_u16(hw->qual.asl_curr_bss),
+ read_u16(hw->qual.anl_curr_fc));
}
/* Get the signal rate */
--
2.5.0
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH 1/2] staging: wlan-ng: introduce a macro read_u16
2017-03-13 13:14 ` [PATCH 1/2] staging: wlan-ng: introduce a macro read_u16 Gioh Kim
@ 2017-03-14 0:02 ` Greg KH
0 siblings, 0 replies; 4+ messages in thread
From: Greg KH @ 2017-03-14 0:02 UTC (permalink / raw)
To: Gioh Kim; +Cc: sergio.paracuellos, devel, gurugio, linux-kernel
On Mon, Mar 13, 2017 at 02:14:25PM +0100, Gioh Kim wrote:
> read_u16 is wrapper of le16_to_cpu to read u16 variable,
> rather than __le16.
>
> Signed-off-by: Gioh Kim <gi-oh.kim@profitbricks.com>
> ---
> drivers/staging/wlan-ng/prism2mgmt.h | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/drivers/staging/wlan-ng/prism2mgmt.h b/drivers/staging/wlan-ng/prism2mgmt.h
> index 88b979f..97ede25 100644
> --- a/drivers/staging/wlan-ng/prism2mgmt.h
> +++ b/drivers/staging/wlan-ng/prism2mgmt.h
> @@ -63,6 +63,9 @@
> extern int prism2_reset_holdtime;
> extern int prism2_reset_settletime;
>
> +#define read_u16(x) ({ u32 __r = (u32)le16_to_cpu((__force __le16)(x)); \
> + __r; })
> +
Eeek, no, this should not be needed at all, if the code is written
correctly. Please fix things up to work properly, don't paper over them
with forced casts.
thanks,
greg k-h
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2017-03-14 0:03 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-03-13 13:14 [PATCH 0/2] staging: wlan-ng: remove Sparse warnings for reading __le16 Gioh Kim
2017-03-13 13:14 ` [PATCH 1/2] staging: wlan-ng: introduce a macro read_u16 Gioh Kim
2017-03-14 0:02 ` Greg KH
2017-03-13 13:14 ` [PATCH 2/2] staging: wlan-ng: prism2sta.c: apply read_u16 macro Gioh Kim
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).