]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
wifi: mac80211: use wiphy_hrtimer_work for ml_reconf_work
authorBenjamin Berg <benjamin.berg@intel.com>
Tue, 28 Oct 2025 10:58:39 +0000 (12:58 +0200)
committerJohannes Berg <johannes.berg@intel.com>
Tue, 28 Oct 2025 13:56:40 +0000 (14:56 +0100)
The work item may be scheduled relatively far in the future. As the
event happens at a specific point in time, the normal timer accuracy is
not sufficient in that case.

Switch to use wiphy_hrtimer_work so that the accuracy is sufficient.

CC: stable@vger.kernel.org
Fixes: 8eb8dd2ffbbb ("wifi: mac80211: Support link removal using Reconfiguration ML element")
Signed-off-by: Benjamin Berg <benjamin.berg@intel.com>
Reviewed-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
Link: https://patch.msgid.link/20251028125710.24a7b54e9e37.I063c5c15bf7672f94cea75f83e486a3ca52d098f@changeid
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
net/mac80211/ieee80211_i.h
net/mac80211/mlme.c

index eb22279c6e01186d287b85b6f54794cd9b7f4221..eb38049b2252de816ec37aeed3d44514f211c5d8 100644 (file)
@@ -612,7 +612,7 @@ struct ieee80211_if_managed {
        u8 *assoc_req_ies;
        size_t assoc_req_ies_len;
 
-       struct wiphy_delayed_work ml_reconf_work;
+       struct wiphy_hrtimer_work ml_reconf_work;
        u16 removed_links;
 
        /* TID-to-link mapping support */
index 623a46b3214ebdb4a4c8e9340e457c60558d334c..f95bcf84ecc2b8146ad34aa013d6325df32866a8 100644 (file)
@@ -4249,7 +4249,7 @@ static void ieee80211_set_disassoc(struct ieee80211_sub_if_data *sdata,
                                  &ifmgd->neg_ttlm_timeout_work);
 
        sdata->u.mgd.removed_links = 0;
-       wiphy_delayed_work_cancel(sdata->local->hw.wiphy,
+       wiphy_hrtimer_work_cancel(sdata->local->hw.wiphy,
                                  &sdata->u.mgd.ml_reconf_work);
 
        wiphy_work_cancel(sdata->local->hw.wiphy,
@@ -6876,7 +6876,7 @@ static void ieee80211_ml_reconfiguration(struct ieee80211_sub_if_data *sdata,
                /* In case the removal was cancelled, abort it */
                if (sdata->u.mgd.removed_links) {
                        sdata->u.mgd.removed_links = 0;
-                       wiphy_delayed_work_cancel(sdata->local->hw.wiphy,
+                       wiphy_hrtimer_work_cancel(sdata->local->hw.wiphy,
                                                  &sdata->u.mgd.ml_reconf_work);
                }
                return;
@@ -6906,9 +6906,9 @@ static void ieee80211_ml_reconfiguration(struct ieee80211_sub_if_data *sdata,
        }
 
        sdata->u.mgd.removed_links = removed_links;
-       wiphy_delayed_work_queue(sdata->local->hw.wiphy,
+       wiphy_hrtimer_work_queue(sdata->local->hw.wiphy,
                                 &sdata->u.mgd.ml_reconf_work,
-                                TU_TO_JIFFIES(delay));
+                                us_to_ktime(ieee80211_tu_to_usec(delay)));
 }
 
 static int ieee80211_ttlm_set_links(struct ieee80211_sub_if_data *sdata,
@@ -8793,7 +8793,7 @@ void ieee80211_sta_setup_sdata(struct ieee80211_sub_if_data *sdata)
                        ieee80211_csa_connection_drop_work);
        wiphy_delayed_work_init(&ifmgd->tdls_peer_del_work,
                                ieee80211_tdls_peer_del_work);
-       wiphy_delayed_work_init(&ifmgd->ml_reconf_work,
+       wiphy_hrtimer_work_init(&ifmgd->ml_reconf_work,
                                ieee80211_ml_reconf_work);
        wiphy_delayed_work_init(&ifmgd->reconf.wk,
                                ieee80211_ml_sta_reconf_timeout);