diff mbox series

Intel be200 leaving ESR due to low RSSI

Message ID 9e15167d-d4ef-9306-d70b-94f056fec413@candelatech.com (mailing list archive)
State RFC
Delegated to: Johannes Berg
Headers show
Series Intel be200 leaving ESR due to low RSSI | expand

Commit Message

Ben Greear Dec. 12, 2024, 8:40 p.m. UTC
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:

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

Comments

Ben Greear Dec. 13, 2024, 1:13 a.m. UTC | #1
On 12/12/24 12:40, Ben Greear wrote:
> Hello,
> 
> I've been testing in a chambered setup with a mesh testbed, doing eMLSR testing.
> 
> I am noticing something I cannot explain:

After poking at this rest of the day, I think possibly root cause is that I
am disabling beacon filtering, and maybe that screws up the firmware's stats
in this area.

I adjusted the driver code to calculate the ewma signal avg for beacons for each link in the
driver and that result looks as expected.

That is on top of another out-of-tree patch of mine so I will not plan to post
it unless someone is interested.

Thanks,
Ben
diff mbox series

Patch

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));
+       }
  }