]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
wifi: iwlwifi: mld: reschedule check_tpt_wk also not in EMLSR
authorMiri Korenblit <miriam.rachel.korenblit@intel.com>
Mon, 15 Sep 2025 08:34:24 +0000 (11:34 +0300)
committerMiri Korenblit <miriam.rachel.korenblit@intel.com>
Tue, 28 Oct 2025 14:05:17 +0000 (16:05 +0200)
When the throughput count reaches the threshold, EMLSR is no longer
blocked by throughput.
This doesn't mean that EMLSR will be activated immediately, since there
might be other reasons that block EMLSR.

When the throughput blocker is not set, check_tpt_wk should run every 5
seconds and check if the throughput blocker should be set (if the
throughtput counter dropped).
If not, it should reschedule itself.

In the current code, the worker will reschedule itself only if we are in
EMLSR. This is wrong, since we might be in a case where the throughput
blocker is not set but we are not in EMLSR, and then we will never check
again the throughput counters (and block EMLSR if needed).

Fix this by rescheduling the worker also when EMLSR is not active.

Reviewed-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
Link: https://patch.msgid.link/20250915113137.2a9cf2b2529d.I8284c0da9597e4c963e38ae133384f6f42044499@changeid
drivers/net/wireless/intel/iwlwifi/mld/mlo.c

index 241a6271d13d6213e79ebb6ef0c6673753cee8dd..fa04fbe06656a15a82664b3596380a07c570cdec 100644 (file)
@@ -603,7 +603,7 @@ void iwl_mld_emlsr_check_tpt(struct wiphy *wiphy, struct wiphy_work *wk)
 
        /* EMLSR is not active */
        if (sec_link_id == -1)
-               return;
+               goto schedule;
 
        IWL_DEBUG_INFO(mld, "Secondary Link %d: Tx MPDUs: %ld. Rx MPDUs: %ld\n",
                       sec_link_id, sec_link_tx, sec_link_rx);
@@ -625,6 +625,7 @@ void iwl_mld_emlsr_check_tpt(struct wiphy *wiphy, struct wiphy_work *wk)
                return;
        }
 
+schedule:
        /* Check again when the next window ends  */
        wiphy_delayed_work_queue(mld_vif->mld->wiphy,
                                 &mld_vif->emlsr.check_tpt_wk,