Search Linux Wireless

Re: [PATCH] wifi: rtlwifi: rtl8192cu: Fix TX aggregation

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 12/02/2024 14:50, Ping-Ke Shih wrote:
> On Thu, 2024-02-08 at 21:54 +0200, Bitterblue Smith wrote:
>>
>> rtl8192cu is checking rtl_mac.tids when deciding if it should enable
>> aggregation. This is wrong because rtl_mac.tids is not initialised
>> anywhere. Check rtl_sta_info.tids instead, which is initialised.
>>
>> Also, when enabling aggregation also enable RTS. The vendor driver does
>> this, my router does this. It seems like the thing to do.
>>
>> Also also, it seems right to set the AMPDU density only when enabling
>> aggregation.
>>
>> Also also also, delete the unused member rtl_mac.tids and the unused
>> macros RTL_AGG_ON and RTL_AGG_OFF.
>>
>> Naturally, with working AMPDU the download/upload speeds are better.
>> Before: 59/32 Mbps.
>> After:  68/46 Mbps.
>>
>> Signed-off-by: Bitterblue Smith <rtl8821cerfe2@xxxxxxxxx>
>> ---
>>  .../wireless/realtek/rtlwifi/rtl8192cu/trx.c  | 27 ++++++++++---------
>>  .../wireless/realtek/rtlwifi/rtl8192cu/trx.h  |  2 --
>>  drivers/net/wireless/realtek/rtlwifi/wifi.h   |  3 ---
>>  3 files changed, 15 insertions(+), 17 deletions(-)
>>
>> diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/trx.c
>> b/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/trx.c
>> index e5c81c1c63c0..cbbd1dab8af0 100644
>> --- a/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/trx.c
>> +++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/trx.c
>> @@ -475,8 +475,9 @@ void rtl92cu_tx_fill_desc(struct ieee80211_hw *hw,
>>         struct rtl_priv *rtlpriv = rtl_priv(hw);
>>         struct rtl_mac *mac = rtl_mac(rtl_priv(hw));
>>         struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw));
>> -       u8 *qc = ieee80211_get_qos_ctl(hdr);
>> -       u8 tid = qc[0] & IEEE80211_QOS_CTL_TID_MASK;
>> +       struct rtl_sta_info *sta_entry;
>> +       u8 agg_state = RTL_AGG_STOP;
>> +       u8 ampdu_density = 0;
>>         u16 seq_number;
>>         __le16 fc = hdr->frame_control;
>>         u8 rate_flag = info->control.rates[0].flags;
>> @@ -498,10 +499,20 @@ void rtl92cu_tx_fill_desc(struct ieee80211_hw *hw,
>>         set_tx_desc_tx_rate(txdesc, tcb_desc->hw_rate);
>>         if (tcb_desc->use_shortgi || tcb_desc->use_shortpreamble)
>>                 set_tx_desc_data_shortgi(txdesc, 1);
>> -       if (mac->tids[tid].agg.agg_state == RTL_AGG_ON &&
>> -                   info->flags & IEEE80211_TX_CTL_AMPDU) {
>> +
>> +       if (sta) {
>> +               sta_entry = (struct rtl_sta_info *)sta->drv_priv;
> 
> nit: It would be better to be separated statement of ieee80211_get_tid(hdr)
> 
> tid = ieee80211_get_tid(hdr);
> agg_state = sta_entry->tids[tid].agg.agg_state;
> 

All right.

> >> +               agg_state = sta_entry->tids[ieee80211_get_tid(hdr)].agg.agg_state;
>> +               ampdu_density = sta->deflink.ht_cap.ampdu_density;
>> +       }
>> +
>> +       if (agg_state == RTL_AGG_OPERATIONAL &&
>> +           info->flags & IEEE80211_TX_CTL_AMPDU) {
>>                 set_tx_desc_agg_enable(txdesc, 1);
>>                 set_tx_desc_max_agg_num(txdesc, 0x14);
> 
> Have you tried larger number of this? 
> As IEEE80211_MAX_AMPDU_BUF_HT is 0x40, set 0x3f here to get higher TX
> throughput if USB speed can afford. 
> 

With this patch, the upload speed is 46 Mbps. But that's just
because my device is detected as 1T2R and it's not allowed to use
rates above MCS7. When I fix that problem the upload speed is 82 Mbps
in the same conditions, about 3 meters from the router.

If I then move the device just 60 cm away, the upload speed is 92
Mbps.

I tried 0x1f now (this field is only 5 bits). The upload speed doesn't
get better. Maybe it gets a bit worse.

> You can reference an equation of rtw89: 
> 
> 	ampdu_num = (u8)((rtwsta->ampdu_params[tid].agg_num ?
> 			  rtwsta->ampdu_params[tid].agg_num :
> 			  4 << sta->deflink.ht_cap.ampdu_factor) - 1);
> 
> This is new for rtlwifi, so we can have this later. 
> 
> 
> [...]
> 
> 
> 





[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Wireless Personal Area Network]     [Linux Bluetooth]     [Wireless Regulations]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite Hiking]     [MIPS Linux]     [ARM Linux]     [Linux RAID]

  Powered by Linux