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