From 88e2fc77686eb5fff9c890000ef9cd6de9507af7 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Mon, 11 Dec 2023 10:28:10 +0100 Subject: [PATCH] 6.1-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.1/series | 1 + 2 files changed, 132 insertions(+) create mode 100644 queue-6.1/revert-wifi-cfg80211-fix-cqm-for-non-range-use.patch diff --git a/queue-6.1/revert-wifi-cfg80211-fix-cqm-for-non-range-use.patch b/queue-6.1/revert-wifi-cfg80211-fix-cqm-for-non-range-use.patch new file mode 100644 index 00000000000..c3585458151 --- /dev/null +++ b/queue-6.1/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 307a6525c82a5a1bc5364711ece92c2d2487e1ad 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 +@@ -297,7 +297,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[]; + }; +--- a/net/wireless/nl80211.c ++++ b/net/wireless/nl80211.c +@@ -12574,6 +12574,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 +@@ -12648,6 +12652,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; + +@@ -12655,20 +12671,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), +@@ -12683,26 +12685,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); +@@ -18769,11 +18758,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.1/series b/queue-6.1/series index 087a94f4c59..5c98119197d 100644 --- a/queue-6.1/series +++ b/queue-6.1/series @@ -163,3 +163,4 @@ drm-amdgpu-return-from-switch-early-for-eeprom-i2c-a.patch drm-amdgpu-simplify-amdgpu_ras_eeprom.c.patch drm-amdgpu-add-i2c-eeprom-support-on-smu-v13_0_6.patch drm-amdgpu-update-eeprom-i2c-address-for-smu-v13_0_0.patch +revert-wifi-cfg80211-fix-cqm-for-non-range-use.patch -- 2.47.3