FAILED: patch "[PATCH] wifi: mac80211: use wiphy_hrtimer_work for csa.switch_work" failed to apply to 6.6-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 6.6-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-6.6.y
git checkout FETCH_HEAD
git cherry-pick -x fbc1cc6973099f45e4c30b86f12b4435c7cb7d24
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2025110947-demote-preppy-79bf@gregkh' --subject-prefix 'PATCH 6.6.y' HEAD^..
Possible dependencies:
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From fbc1cc6973099f45e4c30b86f12b4435c7cb7d24 Mon Sep 17 00:00:00 2001
From: Benjamin Berg <[email protected]>
Date: Tue, 28 Oct 2025 12:58:40 +0200
Subject: [PATCH] wifi: mac80211: use wiphy_hrtimer_work for csa.switch_work
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. To make this work, use the same clock to store the timestamp.
net/mac80211/chan.c +1 -1
@@ -1290,7 +1290,7 @@ ieee80211_link_chanctx_reservation_complete(struct ieee80211_link_data *link) &link->csa.finalize_work);break ;case NL80211_IFTYPE_STATION : -wiphy_delayed_work_queue (sdata->local->hw.wiphy, +wiphy_hrtimer_work_queue (sdata->local->hw.wiphy, &link->u.mgd.csa.switch_work,0 );break ;case NL80211_IFTYPE_UNSPECIFIED :
net/mac80211/ieee80211_i.h +2 -2
@@ -1017,10 +1017,10 @@ struct ieee80211_link_data_managed {bool operating_11g_mode;struct { -struct wiphy_delayed_work switch_work; +struct wiphy_hrtimer_work switch_work;struct cfg80211_chan_def ap_chandef;struct ieee80211_parsed_tpe tpe; -unsigned long time; +ktime_t time;bool waiting_bcn;bool ignored_same_chan;bool blocked_tx;
net/mac80211/link.c +2 -2
@@ -472,10 +472,10 @@ static int _ieee80211_set_active_links(struct ieee80211_sub_if_data *sdata,* from there. */ if (link->conf->csa_active) -wiphy_delayed_work_queue (local->hw.wiphy, +wiphy_hrtimer_work_queue (local->hw.wiphy, &link->u.mgd.csa.switch_work, link->u.mgd.csa.time - - jiffies); +ktime_get_boottime ()); }for_each_set_bit (link_id, &add,IEEE80211_MLD_MAX_NUM_LINKS ) {
net/mac80211/mlme.c +9 -9
@@ -2594,7 +2594,7 @@ void ieee80211_chswitch_done(struct ieee80211_vif *vif, bool success,return ; } -wiphy_delayed_work_queue (sdata->local->hw.wiphy, +wiphy_hrtimer_work_queue (sdata->local->hw.wiphy, &link->u.mgd.csa.switch_work,0 ); }
@@ -2753,7 +2753,8 @@ ieee80211_sta_process_chanswitch(struct ieee80211_link_data *link, .timestamp = timestamp, .device_timestamp = device_timestamp, }; -unsigned long now; +u32 csa_time_tu; +ktime_t now;int res;lockdep_assert_wiphy (local->hw.wiphy);
@@ -2983,10 +2984,9 @@ ieee80211_sta_process_chanswitch(struct ieee80211_link_data *link, csa_ie.mode);/* we may have to handle timeout for deactivated link in software */ - now = jiffies; - link->u.mgd.csa.time = now + -TU_TO_JIFFIES ((max_t (int, csa_ie.count,1 ) -1 ) * - link->conf->beacon_int); + now =ktime_get_boottime (); + csa_time_tu = (max_t (int, csa_ie.count,1 ) -1 ) * link->conf->beacon_int; + link->u.mgd.csa.time = now +us_to_ktime (ieee80211_tu_to_usec (csa_time_tu));if (ieee80211_vif_link_active (&sdata->vif, link->link_id) && local->ops->channel_switch) {
@@ -3001,7 +3001,7 @@ ieee80211_sta_process_chanswitch(struct ieee80211_link_data *link, }/* channel switch handled in software */ -wiphy_delayed_work_queue (local->hw.wiphy, +wiphy_hrtimer_work_queue (local->hw.wiphy, &link->u.mgd.csa.switch_work, link->u.mgd.csa.time - now);return ;
@@ -8849,7 +8849,7 @@ void ieee80211_mgd_setup_link(struct ieee80211_link_data *link)else link->u.mgd.req_smps =IEEE80211_SMPS_OFF ; -wiphy_delayed_work_init (&link->u.mgd.csa.switch_work, +wiphy_hrtimer_work_init (&link->u.mgd.csa.switch_work, ieee80211_csa_switch_work);ieee80211_clear_tpe (&link->conf->tpe);
@@ -10064,7 +10064,7 @@ void ieee80211_mgd_stop_link(struct ieee80211_link_data *link) &link->u.mgd.request_smps_work);wiphy_work_cancel (link->sdata->local->hw.wiphy, &link->u.mgd.recalc_smps); -wiphy_delayed_work_cancel (link->sdata->local->hw.wiphy, +wiphy_hrtimer_work_cancel (link->sdata->local->hw.wiphy, &link->u.mgd.csa.switch_work); }