From 719a5005d517ab4282f4179dfb6586d2241c7b04 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Mon, 11 Dec 2023 10:28:23 +0100 Subject: [PATCH] 6.6-stable patches added patches: revert-wifi-cfg80211-fix-cqm-for-non-range-use.patch --- ...i-cfg80211-fix-cqm-for-non-range-use.patch | 131 ++++++++++++++++++ queue-6.6/series | 1 + 2 files changed, 132 insertions(+) create mode 100644 queue-6.6/revert-wifi-cfg80211-fix-cqm-for-non-range-use.patch diff --git a/queue-6.6/revert-wifi-cfg80211-fix-cqm-for-non-range-use.patch b/queue-6.6/revert-wifi-cfg80211-fix-cqm-for-non-range-use.patch new file mode 100644 index 00000000000..f5eb335a167 --- /dev/null +++ b/queue-6.6/revert-wifi-cfg80211-fix-cqm-for-non-range-use.patch @@ -0,0 +1,131 @@ +From 3389e1b4563f26f58f783d2f7d2f3ee3cf4eee4b Mon Sep 17 00:00:00 2001 +From: Greg Kroah-Hartman +Date: Mon, 11 Dec 2023 10:16:15 +0100 +Subject: Revert "wifi: cfg80211: fix CQM for non-range use" + +From: Greg Kroah-Hartman + +This reverts commit 4a7e92551618f3737b305f62451353ee05662f57 which is +commit 7e7efdda6adb385fbdfd6f819d76bc68c923c394 upstream. + +It needed to have commit 076fc8775daf ("wifi: cfg80211: remove wdev +mutex") applied to properly work, otherwise regressions happen. + +Link: https://lore.kernel.org/r/e374bb16-5b13-44cc-b11a-2f4eefb1ecf5@manjaro.org +Link: https://lore.kernel.org/r/87sf4belmm.fsf@turtle.gmx.de +Link: https://lore.kernel.org/r/20231210213930.61378-1-leo@leolam.fr +Reported-by: Léo Lam +Reported-by: Sven Joachim +Reported-by: Philip Müller +Cc: Johannes Berg +Signed-off-by: Greg Kroah-Hartman +--- + net/wireless/core.h | 1 + net/wireless/nl80211.c | 50 ++++++++++++++++++------------------------------- + 2 files changed, 19 insertions(+), 32 deletions(-) + +--- a/net/wireless/core.h ++++ b/net/wireless/core.h +@@ -299,7 +299,6 @@ struct cfg80211_cqm_config { + u32 rssi_hyst; + s32 last_rssi_event_value; + enum nl80211_cqm_rssi_threshold_event last_rssi_event_type; +- bool use_range_api; + int n_rssi_thresholds; + s32 rssi_thresholds[] __counted_by(n_rssi_thresholds); + }; +--- a/net/wireless/nl80211.c ++++ b/net/wireless/nl80211.c +@@ -12824,6 +12824,10 @@ static int cfg80211_cqm_rssi_update(stru + int i, n, low_index; + int err; + ++ /* RSSI reporting disabled? */ ++ if (!cqm_config) ++ return rdev_set_cqm_rssi_range_config(rdev, dev, 0, 0); ++ + /* + * Obtain current RSSI value if possible, if not and no RSSI threshold + * event has been received yet, we should receive an event after a +@@ -12898,6 +12902,18 @@ static int nl80211_set_cqm_rssi(struct g + wdev->iftype != NL80211_IFTYPE_P2P_CLIENT) + return -EOPNOTSUPP; + ++ if (n_thresholds <= 1 && rdev->ops->set_cqm_rssi_config) { ++ if (n_thresholds == 0 || thresholds[0] == 0) /* Disabling */ ++ return rdev_set_cqm_rssi_config(rdev, dev, 0, 0); ++ ++ return rdev_set_cqm_rssi_config(rdev, dev, ++ thresholds[0], hysteresis); ++ } ++ ++ if (!wiphy_ext_feature_isset(&rdev->wiphy, ++ NL80211_EXT_FEATURE_CQM_RSSI_LIST)) ++ return -EOPNOTSUPP; ++ + if (n_thresholds == 1 && thresholds[0] == 0) /* Disabling */ + n_thresholds = 0; + +@@ -12905,20 +12921,6 @@ static int nl80211_set_cqm_rssi(struct g + old = rcu_dereference_protected(wdev->cqm_config, + lockdep_is_held(&wdev->mtx)); + +- /* if already disabled just succeed */ +- if (!n_thresholds && !old) +- return 0; +- +- if (n_thresholds > 1) { +- if (!wiphy_ext_feature_isset(&rdev->wiphy, +- NL80211_EXT_FEATURE_CQM_RSSI_LIST) || +- !rdev->ops->set_cqm_rssi_range_config) +- return -EOPNOTSUPP; +- } else { +- if (!rdev->ops->set_cqm_rssi_config) +- return -EOPNOTSUPP; +- } +- + if (n_thresholds) { + cqm_config = kzalloc(struct_size(cqm_config, rssi_thresholds, + n_thresholds), +@@ -12933,26 +12935,13 @@ static int nl80211_set_cqm_rssi(struct g + memcpy(cqm_config->rssi_thresholds, thresholds, + flex_array_size(cqm_config, rssi_thresholds, + n_thresholds)); +- cqm_config->use_range_api = n_thresholds > 1 || +- !rdev->ops->set_cqm_rssi_config; + + rcu_assign_pointer(wdev->cqm_config, cqm_config); +- +- if (cqm_config->use_range_api) +- err = cfg80211_cqm_rssi_update(rdev, dev, cqm_config); +- else +- err = rdev_set_cqm_rssi_config(rdev, dev, +- thresholds[0], +- hysteresis); + } else { + RCU_INIT_POINTER(wdev->cqm_config, NULL); +- /* if enabled as range also disable via range */ +- if (old->use_range_api) +- err = rdev_set_cqm_rssi_range_config(rdev, dev, 0, 0); +- else +- err = rdev_set_cqm_rssi_config(rdev, dev, 0, 0); + } + ++ err = cfg80211_cqm_rssi_update(rdev, dev, cqm_config); + if (err) { + rcu_assign_pointer(wdev->cqm_config, old); + kfree_rcu(cqm_config, rcu_head); +@@ -19142,11 +19131,10 @@ void cfg80211_cqm_rssi_notify_work(struc + wdev_lock(wdev); + cqm_config = rcu_dereference_protected(wdev->cqm_config, + lockdep_is_held(&wdev->mtx)); +- if (!cqm_config) ++ if (!wdev->cqm_config) + goto unlock; + +- if (cqm_config->use_range_api) +- cfg80211_cqm_rssi_update(rdev, wdev->netdev, cqm_config); ++ cfg80211_cqm_rssi_update(rdev, wdev->netdev, cqm_config); + + rssi_level = cqm_config->last_rssi_event_value; + rssi_event = cqm_config->last_rssi_event_type; diff --git a/queue-6.6/series b/queue-6.6/series index 03253d805f5..6cea34685cf 100644 --- a/queue-6.6/series +++ b/queue-6.6/series @@ -206,3 +206,4 @@ perf-fix-perf_event_validate_size.patch x86-sev-fix-kernel-crash-due-to-late-update-to-read-.patch gpiolib-sysfs-fix-error-handling-on-failed-export.patch drm-amd-display-increase-num-voltage-states-to-40.patch +revert-wifi-cfg80211-fix-cqm-for-non-range-use.patch -- 2.47.3