From: Sasha Levin Date: Tue, 14 Apr 2026 12:05:15 +0000 (-0400) Subject: drop 4 mmc patches from queue-5.10 based on RC review feedback X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=586b5ceef9af2e2148a3811f0c4814688b38b85c;p=thirdparty%2Fkernel%2Fstable-queue.git drop 4 mmc patches from queue-5.10 based on RC review feedback Dropped patches (dependency chain): - "mmc: core: Drop redundant member in struct mmc_host" (951f6ccfcbb7) - "mmc: core: Drop superfluous validations in mmc_hw|sw_reset()" (fefdd3c91e0a) - "mmc: core: Drop reference counting of the bus_ops" (e9ce2ce17da6) - "mmc: core: Avoid bitfield RMW for claim/retune flags" (901084c51a0a) Reason: maintainer (Ulf Hansson) and reviewer (Ben Hutchings) identified that companion fix 406e14808ee6 is needed but does not apply to 5.10, so the entire dependency chain is dropped. Report: https://lore.kernel.org/stable/CAPDyKFo1DWRbidKrMg+DkwOxsdzDrfF5+YVhjjzGZzkAC7=Yfg@mail.gmail.com/ Report: https://lore.kernel.org/stable/65cd5a0b7c68af467b8b13b4fbce51cc2febb5ad.camel@decadent.org.uk/ --- diff --git a/queue-5.10/mmc-core-avoid-bitfield-rmw-for-claim-retune-flags.patch b/queue-5.10/mmc-core-avoid-bitfield-rmw-for-claim-retune-flags.patch deleted file mode 100644 index 8958d01790..0000000000 --- a/queue-5.10/mmc-core-avoid-bitfield-rmw-for-claim-retune-flags.patch +++ /dev/null @@ -1,63 +0,0 @@ -From stable+bounces-225857-greg=kroah.com@vger.kernel.org Tue Mar 17 12:54:12 2026 -From: Sasha Levin -Date: Tue, 17 Mar 2026 07:49:49 -0400 -Subject: mmc: core: Avoid bitfield RMW for claim/retune flags -To: stable@vger.kernel.org -Cc: Penghe Geng , Adrian Hunter , Ulf Hansson , Sasha Levin -Message-ID: <20260317114949.126875-4-sashal@kernel.org> - -From: Penghe Geng - -[ Upstream commit 901084c51a0a8fb42a3f37d2e9c62083c495f824 ] - -Move claimed and retune control flags out of the bitfield word to -avoid unrelated RMW side effects in asynchronous contexts. - -The host->claimed bit shared a word with retune flags. Writes to claimed -in __mmc_claim_host() or retune_now in mmc_mq_queue_rq() can overwrite -other bits when concurrent updates happen in other contexts, triggering -spurious WARN_ON(!host->claimed). Convert claimed, can_retune, -retune_now and retune_paused to bool to remove shared-word coupling. - -Fixes: 6c0cedd1ef952 ("mmc: core: Introduce host claiming by context") -Fixes: 1e8e55b67030c ("mmc: block: Add CQE support") -Cc: stable@vger.kernel.org -Suggested-by: Adrian Hunter -Signed-off-by: Penghe Geng -Acked-by: Adrian Hunter -Signed-off-by: Ulf Hansson -Signed-off-by: Sasha Levin -Signed-off-by: Greg Kroah-Hartman ---- - include/linux/mmc/host.h | 9 +++++---- - 1 file changed, 5 insertions(+), 4 deletions(-) - ---- a/include/linux/mmc/host.h -+++ b/include/linux/mmc/host.h -@@ -400,14 +400,12 @@ struct mmc_host { - - struct mmc_ios ios; /* current io bus settings */ - -+ bool claimed; /* host exclusively claimed */ -+ - /* group bitfields together to minimize padding */ - unsigned int use_spi_crc:1; -- unsigned int claimed:1; /* host exclusively claimed */ - unsigned int doing_init_tune:1; /* initial tuning in progress */ -- unsigned int can_retune:1; /* re-tuning can be used */ - unsigned int doing_retune:1; /* re-tuning in progress */ -- unsigned int retune_now:1; /* do re-tuning at next req */ -- 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 */ -@@ -415,6 +413,9 @@ struct mmc_host { - int rescan_disable; /* disable card detection */ - int rescan_entered; /* used with nonremovable devices */ - -+ bool can_retune; /* re-tuning can be used */ -+ bool retune_now; /* do re-tuning at next req */ -+ bool retune_paused; /* re-tuning is temporarily disabled */ - int need_retune; /* re-tuning is needed */ - int hold_retune; /* hold off re-tuning */ - unsigned int retune_period; /* re-tuning period in secs */ diff --git a/queue-5.10/mmc-core-drop-redundant-member-in-struct-mmc-host.patch b/queue-5.10/mmc-core-drop-redundant-member-in-struct-mmc-host.patch deleted file mode 100644 index 47c3b95833..0000000000 --- a/queue-5.10/mmc-core-drop-redundant-member-in-struct-mmc-host.patch +++ /dev/null @@ -1,35 +0,0 @@ -From stable+bounces-225854-greg=kroah.com@vger.kernel.org Tue Mar 17 12:54:00 2026 -From: Sasha Levin -Date: Tue, 17 Mar 2026 07:49:46 -0400 -Subject: mmc: core: Drop redundant member in struct mmc host -To: stable@vger.kernel.org -Cc: Ulf Hansson , Sasha Levin -Message-ID: <20260317114949.126875-1-sashal@kernel.org> - -From: Ulf Hansson - -[ Upstream commit 951f6ccfcbb7e4a18bf5fef1fb373d21e5831957 ] - -The Kconfig option to use the blk-mq support was removed in commit -1bec43a3b181 ("mmc: core: Remove option not to use blk-mq"), but forgot to -remove the use_blk_mq member in the struct mmc_host, let's fix it. - -Signed-off-by: Ulf Hansson -Link: https://lore.kernel.org/r/20210202101924.69970-1-ulf.hansson@linaro.org -Stable-dep-of: 901084c51a0a ("mmc: core: Avoid bitfield RMW for claim/retune flags") -Signed-off-by: Sasha Levin -Signed-off-by: Greg Kroah-Hartman ---- - include/linux/mmc/host.h | 1 - - 1 file changed, 1 deletion(-) - ---- a/include/linux/mmc/host.h -+++ b/include/linux/mmc/host.h -@@ -409,7 +409,6 @@ struct mmc_host { - unsigned int doing_retune:1; /* re-tuning in progress */ - unsigned int retune_now:1; /* do re-tuning at next req */ - unsigned int retune_paused:1; /* re-tuning is temporarily disabled */ -- unsigned int use_blk_mq:1; /* use blk-mq */ - 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 */ diff --git a/queue-5.10/mmc-core-drop-reference-counting-of-the-bus_ops.patch b/queue-5.10/mmc-core-drop-reference-counting-of-the-bus_ops.patch deleted file mode 100644 index 7e715ea4c8..0000000000 --- a/queue-5.10/mmc-core-drop-reference-counting-of-the-bus_ops.patch +++ /dev/null @@ -1,214 +0,0 @@ -From stable+bounces-225856-greg=kroah.com@vger.kernel.org Tue Mar 17 12:49:59 2026 -From: Sasha Levin -Date: Tue, 17 Mar 2026 07:49:48 -0400 -Subject: mmc: core: Drop reference counting of the bus_ops -To: stable@vger.kernel.org -Cc: Ulf Hansson , Pierre Ossman , Russell King , Adrian Hunter , Sasha Levin -Message-ID: <20260317114949.126875-3-sashal@kernel.org> - -From: Ulf Hansson - -[ Upstream commit e9ce2ce17da626d930812199568bd426b2832f57 ] - -When the mmc_rescan work is enabled for execution (host->rescan_disable), -it's the only instance per mmc host that is allowed to set/clear the -host->bus_ops pointer. - -Besides the mmc_rescan work, there are a couple of scenarios when the -host->bus_ops pointer may be accessed. Typically, those can be described as -as below: - -*) -Upper mmc driver layers (like the mmc block device driver or an SDIO -functional driver) needs to execute a host->bus_ops callback. This can be -considered as safe without having to use some special locking mechanism, -because they operate on top of the struct mmc_card. As long as there is a -card to operate upon, the mmc core guarantees that there is a host->bus_ops -assigned as well. Note that, upper layer mmc drivers are of course -responsible to clean up from themselves from their ->remove() callbacks, -otherwise things would fall apart anyways. - -**) -Via the mmc host instance, we may need to force a removal of an inserted -mmc card. This happens when a mmc host driver gets unbind, for example. In -this case, we protect the host->bus_ops pointer from concurrent accesses, -by disabling the mmc_rescan work upfront (host->rescan_disable). See -mmc_stop_host() for example. - -This said, it seems like the reference counting of the host->bus_ops -pointer at some point have become superfluous. As this is an old mechanism -of the mmc core, it a bit difficult to digest the history of when that -could have happened. However, let's drop the reference counting to avoid -unnecessary code-paths and lockings. - -Cc: Pierre Ossman -Cc: Russell King -Signed-off-by: Ulf Hansson -Reviewed-by: Adrian Hunter -Link: https://lore.kernel.org/r/20210212131610.236843-1-ulf.hansson@linaro.org -Stable-dep-of: 901084c51a0a ("mmc: core: Avoid bitfield RMW for claim/retune flags") -Signed-off-by: Sasha Levin -Signed-off-by: Greg Kroah-Hartman ---- - drivers/mmc/core/core.c | 89 ++--------------------------------------------- - include/linux/mmc/host.h | 2 - - 2 files changed, 4 insertions(+), 87 deletions(-) - ---- a/drivers/mmc/core/core.c -+++ b/drivers/mmc/core/core.c -@@ -1389,62 +1389,12 @@ void mmc_power_cycle(struct mmc_host *ho - } - - /* -- * Cleanup when the last reference to the bus operator is dropped. -- */ --static void __mmc_release_bus(struct mmc_host *host) --{ -- WARN_ON(!host->bus_dead); -- -- host->bus_ops = NULL; --} -- --/* -- * Increase reference count of bus operator -- */ --static inline void mmc_bus_get(struct mmc_host *host) --{ -- unsigned long flags; -- -- spin_lock_irqsave(&host->lock, flags); -- host->bus_refs++; -- spin_unlock_irqrestore(&host->lock, flags); --} -- --/* -- * Decrease reference count of bus operator and free it if -- * it is the last reference. -- */ --static inline void mmc_bus_put(struct mmc_host *host) --{ -- unsigned long flags; -- -- spin_lock_irqsave(&host->lock, flags); -- host->bus_refs--; -- if ((host->bus_refs == 0) && host->bus_ops) -- __mmc_release_bus(host); -- spin_unlock_irqrestore(&host->lock, flags); --} -- --/* - * Assign a mmc bus handler to a host. Only one bus handler may control a - * host at any given time. - */ - void mmc_attach_bus(struct mmc_host *host, const struct mmc_bus_ops *ops) - { -- unsigned long flags; -- -- WARN_ON(!host->claimed); -- -- spin_lock_irqsave(&host->lock, flags); -- -- WARN_ON(host->bus_ops); -- WARN_ON(host->bus_refs); -- - host->bus_ops = ops; -- host->bus_refs = 1; -- host->bus_dead = 0; -- -- spin_unlock_irqrestore(&host->lock, flags); - } - - /* -@@ -1452,18 +1402,7 @@ void mmc_attach_bus(struct mmc_host *hos - */ - void mmc_detach_bus(struct mmc_host *host) - { -- unsigned long flags; -- -- WARN_ON(!host->claimed); -- WARN_ON(!host->bus_ops); -- -- spin_lock_irqsave(&host->lock, flags); -- -- host->bus_dead = 1; -- -- spin_unlock_irqrestore(&host->lock, flags); -- -- mmc_bus_put(host); -+ host->bus_ops = NULL; - } - - void _mmc_detect_change(struct mmc_host *host, unsigned long delay, bool cd_irq) -@@ -2260,32 +2199,15 @@ void mmc_rescan(struct work_struct *work - host->trigger_card_event = false; - } - -- mmc_bus_get(host); -- - /* Verify a registered card to be functional, else remove it. */ -- if (host->bus_ops && !host->bus_dead) -+ if (host->bus_ops) - host->bus_ops->detect(host); - - host->detect_change = 0; - -- /* -- * Let mmc_bus_put() free the bus/bus_ops if we've found that -- * the card is no longer present. -- */ -- mmc_bus_put(host); -- mmc_bus_get(host); -- - /* if there still is a card present, stop here */ -- if (host->bus_ops != NULL) { -- mmc_bus_put(host); -+ if (host->bus_ops != NULL) - goto out; -- } -- -- /* -- * Only we can add a new handler, so it's safe to -- * release the lock here. -- */ -- mmc_bus_put(host); - - mmc_claim_host(host); - if (mmc_card_is_removable(host) && host->ops->get_cd && -@@ -2356,18 +2278,15 @@ void mmc_stop_host(struct mmc_host *host - /* clear pm flags now and let card drivers set them as needed */ - host->pm_flags = 0; - -- mmc_bus_get(host); -- if (host->bus_ops && !host->bus_dead) { -+ if (host->bus_ops) { - /* Calling bus_ops->remove() with a claimed host can deadlock */ - host->bus_ops->remove(host); - mmc_claim_host(host); - mmc_detach_bus(host); - mmc_power_off(host); - mmc_release_host(host); -- mmc_bus_put(host); - return; - } -- mmc_bus_put(host); - - mmc_claim_host(host); - mmc_power_off(host); ---- a/include/linux/mmc/host.h -+++ b/include/linux/mmc/host.h -@@ -403,7 +403,6 @@ struct mmc_host { - /* group bitfields together to minimize padding */ - unsigned int use_spi_crc:1; - unsigned int claimed:1; /* host exclusively claimed */ -- unsigned int bus_dead:1; /* bus has been released */ - unsigned int doing_init_tune:1; /* initial tuning in progress */ - unsigned int can_retune:1; /* re-tuning can be used */ - unsigned int doing_retune:1; /* re-tuning in progress */ -@@ -435,7 +434,6 @@ struct mmc_host { - struct mmc_slot slot; - - const struct mmc_bus_ops *bus_ops; /* current bus driver */ -- unsigned int bus_refs; /* reference counter */ - - unsigned int sdio_irqs; - struct task_struct *sdio_irq_thread; diff --git a/queue-5.10/mmc-core-drop-superfluous-validations-in-mmc_hw-sw_reset.patch b/queue-5.10/mmc-core-drop-superfluous-validations-in-mmc_hw-sw_reset.patch deleted file mode 100644 index 78e27e96c5..0000000000 --- a/queue-5.10/mmc-core-drop-superfluous-validations-in-mmc_hw-sw_reset.patch +++ /dev/null @@ -1,86 +0,0 @@ -From stable+bounces-225855-greg=kroah.com@vger.kernel.org Tue Mar 17 12:49:58 2026 -From: Sasha Levin -Date: Tue, 17 Mar 2026 07:49:47 -0400 -Subject: mmc: core: Drop superfluous validations in mmc_hw|sw_reset() -To: stable@vger.kernel.org -Cc: Ulf Hansson , Adrian Hunter , Sasha Levin -Message-ID: <20260317114949.126875-2-sashal@kernel.org> - -From: Ulf Hansson - -[ Upstream commit fefdd3c91e0a7b3cbb3f25925d93a57c45cb0f31 ] - -The mmc_hw|sw_reset() APIs are designed to be called solely from upper -layers, which means drivers that operates on top of the struct mmc_card, -like the mmc block device driver and an SDIO functional driver. - -Additionally, as long as the struct mmc_host has a valid pointer to a -struct mmc_card, the corresponding host->bus_ops pointer stays valid and -assigned. - -For these reasons, let's drop the superfluous reference counting and the -redundant validations in mmc_hw|sw_reset(). - -Signed-off-by: Ulf Hansson -Reviewed-by: Adrian Hunter -Link: https://lore.kernel.org/r/20210212131532.236775-1-ulf.hansson@linaro.org -Stable-dep-of: 901084c51a0a ("mmc: core: Avoid bitfield RMW for claim/retune flags") -Signed-off-by: Sasha Levin -Signed-off-by: Greg Kroah-Hartman ---- - drivers/mmc/core/block.c | 2 +- - drivers/mmc/core/core.c | 21 +-------------------- - 2 files changed, 2 insertions(+), 21 deletions(-) - ---- a/drivers/mmc/core/block.c -+++ b/drivers/mmc/core/block.c -@@ -987,7 +987,7 @@ static int mmc_blk_reset(struct mmc_blk_ - md->reset_done |= type; - err = mmc_hw_reset(host); - /* Ensure we switch back to the correct partition */ -- if (err != -EOPNOTSUPP) { -+ if (err) { - struct mmc_blk_data *main_md = - dev_get_drvdata(&host->card->dev); - int part_err; ---- a/drivers/mmc/core/core.c -+++ b/drivers/mmc/core/core.c -@@ -2096,18 +2096,7 @@ int mmc_hw_reset(struct mmc_host *host) - { - int ret; - -- if (!host->card) -- return -EINVAL; -- -- mmc_bus_get(host); -- if (!host->bus_ops || host->bus_dead || !host->bus_ops->hw_reset) { -- mmc_bus_put(host); -- return -EOPNOTSUPP; -- } -- - ret = host->bus_ops->hw_reset(host); -- mmc_bus_put(host); -- - if (ret < 0) - pr_warn("%s: tried to HW reset card, got error %d\n", - mmc_hostname(host), ret); -@@ -2120,18 +2109,10 @@ int mmc_sw_reset(struct mmc_host *host) - { - int ret; - -- if (!host->card) -- return -EINVAL; -- -- mmc_bus_get(host); -- if (!host->bus_ops || host->bus_dead || !host->bus_ops->sw_reset) { -- mmc_bus_put(host); -+ if (!host->bus_ops->sw_reset) - return -EOPNOTSUPP; -- } - - ret = host->bus_ops->sw_reset(host); -- mmc_bus_put(host); -- - if (ret) - pr_warn("%s: tried to SW reset card, got error %d\n", - mmc_hostname(host), ret); diff --git a/queue-5.10/series b/queue-5.10/series index ea9122aa1a..ea3dcccf61 100644 --- a/queue-5.10/series +++ b/queue-5.10/series @@ -462,10 +462,6 @@ xfs-stop-reclaim-before-pushing-ail-during-unmount.patch ext4-fix-iloc.bh-leak-in-ext4_fc_replay_inode-error-paths.patch ext4-publish-jinode-after-initialization.patch bluetooth-l2cap-fix-accepting-multiple-l2cap_ecred_conn_req.patch -mmc-core-drop-redundant-member-in-struct-mmc-host.patch -mmc-core-drop-superfluous-validations-in-mmc_hw-sw_reset.patch -mmc-core-drop-reference-counting-of-the-bus_ops.patch -mmc-core-avoid-bitfield-rmw-for-claim-retune-flags.patch revert-nvme-nvme-fc-ensure-ioerr_work-is-cancelled-in-nvme_fc_delete_ctrl.patch nvme-nvme-fc-ensure-ioerr_work-is-cancelled-in-nvme_fc_delete_ctrl.patch device-property-add-fwnode_is_ancestor_of-and-fwnode_get_next_parent_dev.patch