FAILED: patch "[PATCH] mmc: core: Optimize time for secure erase/trim for some" failed to apply to 5.10-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 5.10-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-5.10.y
git checkout FETCH_HEAD
git cherry-pick -x d6bf2e64dec87322f2b11565ddb59c0e967f96e3
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2026050306-tighten-shelf-8dda@gregkh' --subject-prefix 'PATCH 5.10.y' HEAD^..
Possible dependencies:
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From d6bf2e64dec87322f2b11565ddb59c0e967f96e3 Mon Sep 17 00:00:00 2001
From: Luke Wang <[email protected]>
Date: Wed, 4 Feb 2026 11:40:03 +0800
Subject: [PATCH] mmc: core: Optimize time for secure erase/trim for some
Kingston eMMCs
Kingston eMMC IY2964 and IB2932 takes a fixed ~2 seconds for each secure erase/trim operation regardless of size - that is, a single secure erase/trim operation of 1MB takes the same time as 1GB. With default calculated 3.5MB max discard size, secure erase 1GB requires ~300 separate operations taking ~10 minutes total.
Add a card quirk, MMC_QUIRK_FIXED_SECURE_ERASE_TRIM_TIME, to set maximum secure erase size for those devices. This allows 1GB secure erase to complete in a single operation, reducing time from 10 minutes to just 2 seconds.
drivers/mmc/core/card.h +5 -0
@@ -311,4 +311,9 @@ static inline int mmc_card_broken_mdt(const struct mmc_card *c) return c->quirks & MMC_QUIRK_BROKEN_MDT; } +static inline int mmc_card_fixed_secure_erase_trim_time (const struct mmc_card *c) +{ +return c->quirks &MMC_QUIRK_FIXED_SECURE_ERASE_TRIM_TIME ; +} +#endif
drivers/mmc/core/queue.c +7 -2
@@ -184,8 +184,13 @@ static void mmc_queue_setup_discard(struct mmc_card *card,return ; lim->max_hw_discard_sectors = max_discard; -if (mmc_card_can_secure_erase_trim (card)) - lim->max_secure_erase_sectors = max_discard; +if (mmc_card_can_secure_erase_trim (card)) { +if (mmc_card_fixed_secure_erase_trim_time (card)) + lim->max_secure_erase_sectors =UINT_MAX >> card->erase_shift; +else + lim->max_secure_erase_sectors = max_discard; + } +if (mmc_card_can_trim (card) && card->erased_byte ==0 ) lim->max_write_zeroes_sectors = max_discard;
drivers/mmc/core/quirks.h +9 -0
@@ -153,6 +153,15 @@ static const struct mmc_fixup __maybe_unused mmc_blk_fixups[] = {MMC_FIXUP ("M62704" ,CID_MANFID_KINGSTON ,0x0100 , add_quirk_mmc,MMC_QUIRK_TRIM_BROKEN ), +/* +* On Some Kingston eMMCs, secure erase/trim time is independent +* of erase size, fixed at approximately 2 seconds. +*/ +MMC_FIXUP ("IY2964" ,CID_MANFID_KINGSTON ,0x0100 , add_quirk_mmc, +MMC_QUIRK_FIXED_SECURE_ERASE_TRIM_TIME ), +MMC_FIXUP ("IB2932" ,CID_MANFID_KINGSTON ,0x0100 , add_quirk_mmc, +MMC_QUIRK_FIXED_SECURE_ERASE_TRIM_TIME ), + END_FIXUP };
include/linux/mmc/card.h +1 -0
@@ -330,6 +330,7 @@ struct mmc_card {#define MMC_QUIRK_BROKEN_SD_POWEROFF_NOTIFY (1<<17)/* Disable broken SD poweroff notify support */ #define MMC_QUIRK_NO_UHS_DDR50_TUNING (1<<18)/* Disable DDR50 tuning */ #define MMC_QUIRK_BROKEN_MDT (1<<19)/* Wrong manufacturing year */ +#define MMC_QUIRK_FIXED_SECURE_ERASE_TRIM_TIME (1<<20)/* Secure erase/trim time is fixed regardless of size */ bool written_flag;/* Indicates eMMC has been written since power on */ bool reenable_cmdq;/* Re-enable Command Queue */