Search Linux Wireless

Intel be200 leaving ESR due to low RSSI

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

 



Hello,

I've been testing in a chambered setup with a mesh testbed, doing eMLSR testing.

I am noticing something I cannot explain:

Fairly often, ESR mode is disabled due to low RSSI.  On the one I caught with
debugging code, it was on link-2, but as of now, I'm not sure that is always
the case.  Both links actually have RSSI in the -46 range on average.  But also,
there are faint beacons from farther-away (through attenuators to another RF chamber)
mesh APs with same SSID.
Any chance the firmware is listening to those far away beacons and reporting that
in the OPER_STATS?  I'm using v94 firmware, latest available AFAIK.

Here's my debugging output and warn-on-once splat I used to make this assumption:

2236 [77144.620999] iwlwifi 0000:15:00.0: iwl_mvm_update_link_sig esr: update-link-sig-low-rssi, Link 2 link-info-sig: 180 sig: -76  thresh: -74 freq: 6465
2237 [77144.621040] ------------[ cut here ]------------
2238 [77144.621041] WARNING: CPU: 7 PID: 14476 at drivers/net/wireless/intel/iwlwifi/mvm/rx.c:728 iwl_mvm_update_link_sig+0x159/0x2e0 [iwlmvm]
...
2267 [77144.621332]  iwl_mvm_handle_rx_system_oper_stats+0x16a/0x600 [iwlmvm]
2270 [77144.621356]  iwl_mvm_async_handlers_by_context+0x107/0x170 [iwlmvm]
2271 [77144.621369]  cfg80211_wiphy_work+0xd5/0x140 [cfg80211]
...
2282 [77144.621431] iwlwifi 0000:15:00.0: iwl_mvm_exit_esr Exiting EMLSR. reason = EXIT_LOW_RSSI (0x20000). Current active links=0x6, new active links = 0x2


The debugging printout at the start of the info above comes from this:

diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/rx.c b/drivers/net/wireless/intel/iwlwifi/mvm/rx.c
index 3ac62ad0144b..41e8e3f7ef03 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/rx.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/rx.c
@@ -720,10 +720,16 @@ static void iwl_mvm_update_link_sig(struct ieee80211_vif *vif, int sig,
                                            &bss_conf->chanreq.oper,
                                            true);

-       if (sig < exit_esr_thresh)
+       if (sig < exit_esr_thresh) {
+               IWL_DEBUG_INFO(mvm,
+                              "esr: update-link-sig-low-rssi, Link %d link-info-sig: %d sig: %d  thresh: %d freq: %d\n",
+                              bss_conf->link_id, link_info->beacon_stats.avg_signal,
+                              sig, exit_esr_thresh, link_info->phy_ctxt->center_freq1);
+               WARN_ON_ONCE(true);
                iwl_mvm_exit_esr(mvm, vif, IWL_MVM_ESR_EXIT_LOW_RSSI,
                                 iwl_mvm_get_other_link(vif,
                                                        bss_conf->link_id));
+       }
 }


As work around, I'm thinking of requiring 3 low RSSI reports in a row, or something
like that, before disabling ESR in that case.  Or maybe just look at the link_info->beacon_stats.avg_signal
and use that as tie-break (skip disabling ESR if the beacon_stats.avg_signal is within 6db of passing
the threshold check?  If I did my unsigned to signed bit math right, beacon_stats.avg_signal is -52
in this case, which is in expected range.)

Does that seem like decent work-around in your opinions?

Thanks,
Ben

--
Ben Greear <greearb@xxxxxxxxxxxxxxx>
Candela Technologies Inc  http://www.candelatech.com





[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