From db46c77f3d51d24402731ea181b2a591e7dd1ac3 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Mon, 11 Dec 2023 10:16:15 +0100 Subject: [PATCH 1/4] Revert "wifi: cfg80211: fix CQM for non-range use" MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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(-) diff --git a/net/wireless/core.h b/net/wireless/core.h index ee980965a7cf..e1accacc6f23 100644 --- 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[]; }; diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c index 42c858219b34..b19b5acfaf3a 100644 --- a/net/wireless/nl80211.c +++ b/net/wireless/nl80211.c @@ -12574,6 +12574,10 @@ static int cfg80211_cqm_rssi_update(struct cfg80211_registered_device *rdev, 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 genl_info *info, 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 genl_info *info, 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 genl_info *info, 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(struct wiphy *wiphy, struct wiphy_work *work) 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; From e7cddbb41b63252ddb5b7f8247da5d0b24adfac5 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Mon, 11 Dec 2023 10:41:01 +0100 Subject: [PATCH 2/4] Linux 6.1.67 Signed-off-by: Greg Kroah-Hartman --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 5d7e995d686c..c27600b90cad 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 6 PATCHLEVEL = 1 -SUBLEVEL = 66 +SUBLEVEL = 67 EXTRAVERSION = NAME = Curry Ramen From 975d5f2ae98723ee53d20ed0dc381a713c35e9b7 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Thu, 4 Jan 2024 09:50:34 +0000 Subject: [PATCH 3/4] Revert "mmc: sdhci-sprd: Fix vqmmc not shutting down after the card was pulled" This reverts commit 8b01195be4a98009815ffafd5bf676e3c50ebaf1 which is commit 477865af60b2117ceaa1d558e03559108c15c78c upstream. It breaks the Android kernel abi and can be brought back in the future in an abi-safe way if it is really needed. Bug: 161946584 Change-Id: I3e7316f074393f1b84e8d6a7a845060c268366b0 Signed-off-by: Greg Kroah-Hartman --- drivers/mmc/host/sdhci-sprd.c | 25 ------------------------- 1 file changed, 25 deletions(-) diff --git a/drivers/mmc/host/sdhci-sprd.c b/drivers/mmc/host/sdhci-sprd.c index 2101b6e794c0..525f979e2a97 100644 --- a/drivers/mmc/host/sdhci-sprd.c +++ b/drivers/mmc/host/sdhci-sprd.c @@ -405,33 +405,12 @@ static void sdhci_sprd_request_done(struct sdhci_host *host, mmc_request_done(host->mmc, mrq); } -static void sdhci_sprd_set_power(struct sdhci_host *host, unsigned char mode, - unsigned short vdd) -{ - struct mmc_host *mmc = host->mmc; - - switch (mode) { - case MMC_POWER_OFF: - mmc_regulator_set_ocr(host->mmc, mmc->supply.vmmc, 0); - - mmc_regulator_disable_vqmmc(mmc); - break; - case MMC_POWER_ON: - mmc_regulator_enable_vqmmc(mmc); - break; - case MMC_POWER_UP: - mmc_regulator_set_ocr(host->mmc, mmc->supply.vmmc, vdd); - break; - } -} - static struct sdhci_ops sdhci_sprd_ops = { .read_l = sdhci_sprd_readl, .write_l = sdhci_sprd_writel, .write_w = sdhci_sprd_writew, .write_b = sdhci_sprd_writeb, .set_clock = sdhci_sprd_set_clock, - .set_power = sdhci_sprd_set_power, .get_max_clock = sdhci_sprd_get_max_clock, .get_min_clock = sdhci_sprd_get_min_clock, .set_bus_width = sdhci_set_bus_width, @@ -697,10 +676,6 @@ static int sdhci_sprd_probe(struct platform_device *pdev) host->caps1 &= ~(SDHCI_SUPPORT_SDR50 | SDHCI_SUPPORT_SDR104 | SDHCI_SUPPORT_DDR50); - ret = mmc_regulator_get_supply(host->mmc); - if (ret) - goto pm_runtime_disable; - ret = sdhci_setup_host(host); if (ret) goto pm_runtime_disable; From c539451364a9ddbf039d355f71d1902b8f2b2ab5 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Thu, 4 Jan 2024 09:50:35 +0000 Subject: [PATCH 4/4] Revert "mmc: core: add helpers mmc_regulator_enable/disable_vqmmc" This reverts commit 38d3216032c95a6dceb4fea829ec63e38250bef1 which is commit 8d91f3f8ae57e6292142ca89f322e90fa0d6ac02 upstream. It breaks the Android kernel abi and can be brought back in the future in an abi-safe way if it is really needed. Bug: 161946584 Change-Id: I67705a9f4b04cf051f9b0f1a3494284ae0122da2 Signed-off-by: Greg Kroah-Hartman --- drivers/mmc/core/regulator.c | 41 ------------------------------------ include/linux/mmc/host.h | 3 --- 2 files changed, 44 deletions(-) diff --git a/drivers/mmc/core/regulator.c b/drivers/mmc/core/regulator.c index 4dcbc2281d2b..609201a467ef 100644 --- a/drivers/mmc/core/regulator.c +++ b/drivers/mmc/core/regulator.c @@ -271,44 +271,3 @@ int mmc_regulator_get_supply(struct mmc_host *mmc) return 0; } EXPORT_SYMBOL_GPL(mmc_regulator_get_supply); - -/** - * mmc_regulator_enable_vqmmc - enable VQMMC regulator for a host - * @mmc: the host to regulate - * - * Returns 0 or errno. Enables the regulator for vqmmc. - * Keeps track of the enable status for ensuring that calls to - * regulator_enable/disable are balanced. - */ -int mmc_regulator_enable_vqmmc(struct mmc_host *mmc) -{ - int ret = 0; - - if (!IS_ERR(mmc->supply.vqmmc) && !mmc->vqmmc_enabled) { - ret = regulator_enable(mmc->supply.vqmmc); - if (ret < 0) - dev_err(mmc_dev(mmc), "enabling vqmmc regulator failed\n"); - else - mmc->vqmmc_enabled = true; - } - - return ret; -} -EXPORT_SYMBOL_GPL(mmc_regulator_enable_vqmmc); - -/** - * mmc_regulator_disable_vqmmc - disable VQMMC regulator for a host - * @mmc: the host to regulate - * - * Returns 0 or errno. Disables the regulator for vqmmc. - * Keeps track of the enable status for ensuring that calls to - * regulator_enable/disable are balanced. - */ -void mmc_regulator_disable_vqmmc(struct mmc_host *mmc) -{ - if (!IS_ERR(mmc->supply.vqmmc) && mmc->vqmmc_enabled) { - regulator_disable(mmc->supply.vqmmc); - mmc->vqmmc_enabled = false; - } -} -EXPORT_SYMBOL_GPL(mmc_regulator_disable_vqmmc); diff --git a/include/linux/mmc/host.h b/include/linux/mmc/host.h index f48c4fc09fdc..add578bf85cf 100644 --- a/include/linux/mmc/host.h +++ b/include/linux/mmc/host.h @@ -457,7 +457,6 @@ struct mmc_host { unsigned int retune_paused:1; /* re-tuning is temporarily disabled */ unsigned int retune_crc_disable:1; /* don't trigger retune upon crc */ unsigned int can_dma_map_merge:1; /* merging can be used */ - unsigned int vqmmc_enabled:1; /* vqmmc regulator is enabled */ int rescan_disable; /* disable card detection */ int rescan_entered; /* used with nonremovable devices */ @@ -609,8 +608,6 @@ static inline int mmc_regulator_set_vqmmc(struct mmc_host *mmc, #endif int mmc_regulator_get_supply(struct mmc_host *mmc); -int mmc_regulator_enable_vqmmc(struct mmc_host *mmc); -void mmc_regulator_disable_vqmmc(struct mmc_host *mmc); static inline int mmc_card_is_removable(struct mmc_host *host) {