linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [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).