diff mbox series

[v3,1/3] wifi: rtl8xxxu: Add __packed to struct rtl8723bu_c2h

Message ID ba821a9d-af25-3ade-9fa8-0d3f4b58aec5@gmail.com
State Superseded
Headers show
Series [v3,1/3] wifi: rtl8xxxu: Add __packed to struct rtl8723bu_c2h | expand

Commit Message

Bitterblue Smith Nov. 29, 2022, 7:04 p.m. UTC
This struct is used to access a sequence of bytes received from the
wifi chip. It must not have any padding bytes between the members.

This doesn't change anything on my system, possibly because currently
none of the members need more than byte alignment.

Fixes: b2b43b7837ba ("rtl8xxxu: Initial functionality to handle C2H events for 8723bu")
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
---
v3:
 - No change.
 
v2:
 - Patch is new in v2.
---
 drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Ping-Ke Shih Nov. 30, 2022, 12:38 a.m. UTC | #1
> -----Original Message-----
> From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
> Sent: Wednesday, November 30, 2022 3:06 AM
> To: linux-wireless@vger.kernel.org
> Cc: Jes Sorensen <Jes.Sorensen@gmail.com>; Ping-Ke Shih <pkshih@realtek.com>
> Subject: [PATCH v3 2/3] wifi: rtl8xxxu: Fix the channel width reporting
> 
> The gen 2 chips RTL8192EU and RTL8188FU periodically send the driver
> reports about the TX rate, and the driver passes these reports to
> sta_statistics. The reports from RTL8192EU may or may not include the
> channel width. The reports from RTL8188FU do not include it.
> 
> Only access the c2h->ra_report.bw field if the report (skb) is big
> enough.
> 
> The other problem fixed here is that the code was actually never
> changing the channel width initially reported by
> rtl8xxxu_bss_info_changed because the value of RATE_INFO_BW_20 is 0.
> 
> Fixes: 0985d3a410ac ("rtl8xxxu: Feed current txrate information for mac80211")
> Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
> ---
> v3:
>  - Don't assume bw will always be 1 byte.
> 
> v2:
>  - Eliminate the magic numbers.
> ---
>  drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c | 11 ++++++++---
>  1 file changed, 8 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c
> b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c
> index 28f136064297..9799bc5ed60a 100644
> --- a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c
> +++ b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c
> @@ -5569,7 +5569,6 @@ static void rtl8xxxu_c2hcmd_callback(struct work_struct *work)
>  			rarpt->txrate.flags = 0;
>  			rate = c2h->ra_report.rate;
>  			sgi = c2h->ra_report.sgi;
> -			bw = c2h->ra_report.bw;
> 
>  			if (rate < DESC_RATE_MCS0) {
>  				rarpt->txrate.legacy =
> @@ -5586,8 +5585,14 @@ static void rtl8xxxu_c2hcmd_callback(struct work_struct *work)
>  						RATE_INFO_FLAGS_SHORT_GI;
>  				}
> 
> -				if (bw == RATE_INFO_BW_20)
> -					rarpt->txrate.bw |= RATE_INFO_BW_20;
> +				if (skb->len >= offsetof(typeof(*c2h), ra_report.bw) +
> +						sizeof(c2h->ra_report.bw)) {

Today, I look up if we have a better choice, and offsetofend() can make thing simple.

if (skb->len >= offsetofend(typeof(*c2h), ra_report.bw))

Sorry for the late.

> +					if (c2h->ra_report.bw == RTL8XXXU_CHANNEL_WIDTH_40)
> +						bw = RATE_INFO_BW_40;
> +					else
> +						bw = RATE_INFO_BW_20;
> +					rarpt->txrate.bw = bw;
> +				}
>  			}
>  			bit_rate = cfg80211_calculate_bitrate(&rarpt->txrate);
>  			rarpt->bit_rate = bit_rate;
> --
> 2.38.0
> 
> ------Please consider the environment before printing this e-mail.
Bitterblue Smith Nov. 30, 2022, 3:27 p.m. UTC | #2
On 30/11/2022 02:38, Ping-Ke Shih wrote:
> 
> 
>> -----Original Message-----
>> From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
>> Sent: Wednesday, November 30, 2022 3:06 AM
>> To: linux-wireless@vger.kernel.org
>> Cc: Jes Sorensen <Jes.Sorensen@gmail.com>; Ping-Ke Shih <pkshih@realtek.com>
>> Subject: [PATCH v3 2/3] wifi: rtl8xxxu: Fix the channel width reporting
>>
>> The gen 2 chips RTL8192EU and RTL8188FU periodically send the driver
>> reports about the TX rate, and the driver passes these reports to
>> sta_statistics. The reports from RTL8192EU may or may not include the
>> channel width. The reports from RTL8188FU do not include it.
>>
>> Only access the c2h->ra_report.bw field if the report (skb) is big
>> enough.
>>
>> The other problem fixed here is that the code was actually never
>> changing the channel width initially reported by
>> rtl8xxxu_bss_info_changed because the value of RATE_INFO_BW_20 is 0.
>>
>> Fixes: 0985d3a410ac ("rtl8xxxu: Feed current txrate information for mac80211")
>> Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
>> ---
>> v3:
>>  - Don't assume bw will always be 1 byte.
>>
>> v2:
>>  - Eliminate the magic numbers.
>> ---
>>  drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c | 11 ++++++++---
>>  1 file changed, 8 insertions(+), 3 deletions(-)
>>
>> diff --git a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c
>> b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c
>> index 28f136064297..9799bc5ed60a 100644
>> --- a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c
>> +++ b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c
>> @@ -5569,7 +5569,6 @@ static void rtl8xxxu_c2hcmd_callback(struct work_struct *work)
>>  			rarpt->txrate.flags = 0;
>>  			rate = c2h->ra_report.rate;
>>  			sgi = c2h->ra_report.sgi;
>> -			bw = c2h->ra_report.bw;
>>
>>  			if (rate < DESC_RATE_MCS0) {
>>  				rarpt->txrate.legacy =
>> @@ -5586,8 +5585,14 @@ static void rtl8xxxu_c2hcmd_callback(struct work_struct *work)
>>  						RATE_INFO_FLAGS_SHORT_GI;
>>  				}
>>
>> -				if (bw == RATE_INFO_BW_20)
>> -					rarpt->txrate.bw |= RATE_INFO_BW_20;
>> +				if (skb->len >= offsetof(typeof(*c2h), ra_report.bw) +
>> +						sizeof(c2h->ra_report.bw)) {
> 
> Today, I look up if we have a better choice, and offsetofend() can make thing simple.
> 
> if (skb->len >= offsetofend(typeof(*c2h), ra_report.bw))
> 
> Sorry for the late.
> 

Even better. Thank you.
diff mbox series

Patch

diff --git a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.h b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.h
index 136992f0200c..d26df4095da0 100644
--- a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.h
+++ b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.h
@@ -1240,7 +1240,7 @@  struct rtl8723bu_c2h {
 			u8 bw;
 		} __packed ra_report;
 	};
-};
+} __packed;
 
 struct rtl8xxxu_fileops;