MAINTAINERS | 6 + drivers/mmc/core/Kconfig | 12 + drivers/mmc/core/Makefile | 1 + drivers/mmc/core/block.c | 56 ++ drivers/mmc/core/block.h | 18 + drivers/mmc/core/core.c | 54 ++ drivers/mmc/core/mmcpstore.c | 1511 ++++++++++++++++++++++++++++++++++ drivers/mmc/host/sdhci.c | 173 +++- drivers/mmc/host/sdhci.h | 6 + include/linux/mmc/host.h | 12 + 10 files changed, 1845 insertions(+), 4 deletions(-) create mode 100644 drivers/mmc/core/mmcpstore.c
This series adds mmcpstore, a pstore backend driver that enables
persistent storage of kernel crash logs on eMMC devices. When the
kernel panics, pstore captures the kmsg dump and writes it directly
to a dedicated MMC partition using polled I/O with interrupts
disabled.
Changes since v4 (addresses Ulf Hansson's feedback on the v4 panic
host path, linux-mmc):
- mmc_panic_claim_host(): log claimed, runtime suspend, and
ongoing_mrq before claim; always call panic_prepare() when
implemented so the host can drain or gracefully terminate
in-flight requests, then force-claim. Vendor controllers may
supply their own panic_prepare for platform-specific cases (1/4).
- SDHCI: reference panic_prepare implementation; longer drain/reset
timeouts; document panic helper return values in kernel-doc (2/4).
- mmcpstore: single prepare/claim path; panic_complete() after
panic_poll_completion() on panic writes (4/4).
Changes since v3:
- Fixed kernel-doc warnings reported by kernel test robot:
- Added missing @param descriptions for sdhci_panic_prepare(),
sdhci_panic_poll_completion(), sdhci_panic_complete() (patch 2)
- Added missing @sect_offset param doc for
mmcpstore_do_request_internal() (patch 4)
- Fixed kernel-doc function name mismatch: mmcpstore_read() ->
mmcpstore_read_zone() (patch 4)
- Added missing @disk param doc for mmcpstore_card_add() (patch 4)
- Removed unused 'offset_bytes' variable in
mmcpstore_register_for_card() (patch 4)
Changes since v2 (RFC):
- Rebased onto v7.0-rc — no longer reverts any existing MMC core
or SDHCI changes (v1/v2 accidentally reverted recent upstream
commits due to being based on an older tree)
- Removed all erase/bitmap tracking logic — MMC/eMMC is managed
flash and does not need erase-before-write; the pstore_zone
framework handles zone management internally
- Uses standard MMC core request path (mmc_start_request) instead
of hand-building mmc_request structs; panic-context I/O is
handled through proper mmc_host_ops callbacks rather than ad-hoc
code in the driver
- Added panic-context ops to mmc_host_ops and sdhci_ops for clean
separation of panic and normal I/O paths
- Fixed deadlocks caused by spinlock contention during panic
(lockless mmc_panic_claim_host using WRITE_ONCE)
- Fixed data corruption in pstore recovery (zlib_inflate failures)
by letting the normal sdhci_request() path run instead of a
custom panic request handler
- Added PM suspend/resume support with eMMC re-initialization
- Supports module loading or builtin loading of the driver
- Added MAINTAINERS entry
- Split into 4-patch series for reviewability
The series is structured as follows:
Patch 1 adds panic-context operations to struct mmc_host_ops and a
lockless mmc_panic_claim_host() for use during kernel panic when
other CPUs are stopped and may hold locks. Host drivers may replace
panic_prepare with vendor-specific code where needed.
Patch 2 implements the SDHCI reference panic_prepare (graceful
termination of in-flight work, then polled completion paths); other
MMC host drivers use the same mmc_host_ops hooks with their own
panic_prepare where the hardware differs.
Patch 3 adds mmc_blk_get_card_by_name() helper to look up an
mmc_card from a block device name, used by the mmcpstore module
path for card discovery.
Patch 4 adds the mmcpstore driver itself, which registers with the
pstore_blk framework and handles panic writes, PM suspend/resume,
and dual-path registration (direct probe hook for builtin,
mmc_blk_get_card_by_name() for module). Also adds probe/remove
hooks in block.c and declarations in block.h for the builtin path.
Tested on Broadcom STB platforms (ARM64) with SDHCI controllers,
verified panic dump recovery across multiple panic/reboot cycles
with kmsg, pmsg, and console pstore; also tested with concurrent
I/O stress before panic.
Previous submissions and related work:
RFC v1: https://lore.kernel.org/linux-mmc/20221216212738.7928-1-kdasu.kdev@gmail.com/
RFC v2: https://lore.kernel.org/linux-mmc/20221222185948.12717-1-kdasu.kdev@gmail.com/
v3: https://lore.kernel.org/linux-mmc/20260319185705.1516950-1-kamal.dasu@broadcom.com/
v4: linux-mmc (same thread as v3; superseded by this v5)
Marvell MMC pstore attempt (2020):
https://lore.kernel.org/linux-mmc/20201207115753.21728-1-bbudiredla@marvell.com/
pstore/blk documentation:
https://www.kernel.org/doc/html/latest/admin-guide/pstore-blk.html
Kamal Dasu (4):
mmc: core: Add panic-context host operations for pstore backends
mmc: sdhci: Implement panic-context write support
mmc: block: Add helper to look up mmc_card by device name
mmc: core: Add MMC pstore backend driver
MAINTAINERS | 6 +
drivers/mmc/core/Kconfig | 12 +
drivers/mmc/core/Makefile | 1 +
drivers/mmc/core/block.c | 56 ++
drivers/mmc/core/block.h | 18 +
drivers/mmc/core/core.c | 54 ++
drivers/mmc/core/mmcpstore.c | 1511 ++++++++++++++++++++++++++++++++++
drivers/mmc/host/sdhci.c | 173 +++-
drivers/mmc/host/sdhci.h | 6 +
include/linux/mmc/host.h | 12 +
10 files changed, 1845 insertions(+), 4 deletions(-)
create mode 100644 drivers/mmc/core/mmcpstore.c
--
2.34.1
Ulf, I'm sending a gentle reminder regarding the v5 patch series for mmcpstore. This version addresses your previous feedback on the v4 panic host path and includes several key stability improvements: - Implements a lockless mmc_panic_claim_host using WRITE_ONCE to avoid deadlocks during panic. - Adds panic_prepare to the host ops to ensure in-flight requests are drained and runtime PM states are handled before panic writes. - Uses standard MMC core request paths with polling-based completion for robust I/O during a crash. - Includes full PM suspend/resume support with eMMC re-initialization. The series has been tested thoroughly on Broadcom STB platforms (ARM64), verifying reliable recovery of kmsg, pmsg, and console logs across multiple panic cycles. Please let me know if you need any further information or if there are additional changes required for acceptance. Thanks Kamal On Wed, Apr 22, 2026 at 4:51 PM Kamal Dasu <kamal.dasu@broadcom.com> wrote: > This series adds mmcpstore, a pstore backend driver that enables > persistent storage of kernel crash logs on eMMC devices. When the > kernel panics, pstore captures the kmsg dump and writes it directly > to a dedicated MMC partition using polled I/O with interrupts > disabled. > > Changes since v4 (addresses Ulf Hansson's feedback on the v4 panic > host path, linux-mmc): > - mmc_panic_claim_host(): log claimed, runtime suspend, and > ongoing_mrq before claim; always call panic_prepare() when > implemented so the host can drain or gracefully terminate > in-flight requests, then force-claim. Vendor controllers may > supply their own panic_prepare for platform-specific cases (1/4). > - SDHCI: reference panic_prepare implementation; longer drain/reset > timeouts; document panic helper return values in kernel-doc (2/4). > - mmcpstore: single prepare/claim path; panic_complete() after > panic_poll_completion() on panic writes (4/4). > > Changes since v3: > - Fixed kernel-doc warnings reported by kernel test robot: > - Added missing @param descriptions for sdhci_panic_prepare(), > sdhci_panic_poll_completion(), sdhci_panic_complete() (patch 2) > - Added missing @sect_offset param doc for > mmcpstore_do_request_internal() (patch 4) > - Fixed kernel-doc function name mismatch: mmcpstore_read() -> > mmcpstore_read_zone() (patch 4) > - Added missing @disk param doc for mmcpstore_card_add() (patch 4) > - Removed unused 'offset_bytes' variable in > mmcpstore_register_for_card() (patch 4) > > Changes since v2 (RFC): > - Rebased onto v7.0-rc — no longer reverts any existing MMC core > or SDHCI changes (v1/v2 accidentally reverted recent upstream > commits due to being based on an older tree) > - Removed all erase/bitmap tracking logic — MMC/eMMC is managed > flash and does not need erase-before-write; the pstore_zone > framework handles zone management internally > - Uses standard MMC core request path (mmc_start_request) instead > of hand-building mmc_request structs; panic-context I/O is > handled through proper mmc_host_ops callbacks rather than ad-hoc > code in the driver > - Added panic-context ops to mmc_host_ops and sdhci_ops for clean > separation of panic and normal I/O paths > - Fixed deadlocks caused by spinlock contention during panic > (lockless mmc_panic_claim_host using WRITE_ONCE) > - Fixed data corruption in pstore recovery (zlib_inflate failures) > by letting the normal sdhci_request() path run instead of a > custom panic request handler > - Added PM suspend/resume support with eMMC re-initialization > - Supports module loading or builtin loading of the driver > - Added MAINTAINERS entry > - Split into 4-patch series for reviewability > > The series is structured as follows: > > Patch 1 adds panic-context operations to struct mmc_host_ops and a > lockless mmc_panic_claim_host() for use during kernel panic when > other CPUs are stopped and may hold locks. Host drivers may replace > panic_prepare with vendor-specific code where needed. > > Patch 2 implements the SDHCI reference panic_prepare (graceful > termination of in-flight work, then polled completion paths); other > MMC host drivers use the same mmc_host_ops hooks with their own > panic_prepare where the hardware differs. > > Patch 3 adds mmc_blk_get_card_by_name() helper to look up an > mmc_card from a block device name, used by the mmcpstore module > path for card discovery. > > Patch 4 adds the mmcpstore driver itself, which registers with the > pstore_blk framework and handles panic writes, PM suspend/resume, > and dual-path registration (direct probe hook for builtin, > mmc_blk_get_card_by_name() for module). Also adds probe/remove > hooks in block.c and declarations in block.h for the builtin path. > > Tested on Broadcom STB platforms (ARM64) with SDHCI controllers, > verified panic dump recovery across multiple panic/reboot cycles > with kmsg, pmsg, and console pstore; also tested with concurrent > I/O stress before panic. > > Previous submissions and related work: > RFC v1: > https://lore.kernel.org/linux-mmc/20221216212738.7928-1-kdasu.kdev@gmail.com/ > RFC v2: > https://lore.kernel.org/linux-mmc/20221222185948.12717-1-kdasu.kdev@gmail.com/ > v3: > https://lore.kernel.org/linux-mmc/20260319185705.1516950-1-kamal.dasu@broadcom.com/ > v4: linux-mmc (same thread as v3; superseded by this v5) > Marvell MMC pstore attempt (2020): > > https://lore.kernel.org/linux-mmc/20201207115753.21728-1-bbudiredla@marvell.com/ > pstore/blk documentation: > https://www.kernel.org/doc/html/latest/admin-guide/pstore-blk.html > > Kamal Dasu (4): > mmc: core: Add panic-context host operations for pstore backends > mmc: sdhci: Implement panic-context write support > mmc: block: Add helper to look up mmc_card by device name > mmc: core: Add MMC pstore backend driver > > MAINTAINERS | 6 + > drivers/mmc/core/Kconfig | 12 + > drivers/mmc/core/Makefile | 1 + > drivers/mmc/core/block.c | 56 ++ > drivers/mmc/core/block.h | 18 + > drivers/mmc/core/core.c | 54 ++ > drivers/mmc/core/mmcpstore.c | 1511 ++++++++++++++++++++++++++++++++++ > drivers/mmc/host/sdhci.c | 173 +++- > drivers/mmc/host/sdhci.h | 6 + > include/linux/mmc/host.h | 12 + > 10 files changed, 1845 insertions(+), 4 deletions(-) > create mode 100644 drivers/mmc/core/mmcpstore.c > > -- > 2.34.1 >
On Wed, Jun 10, 2026 at 12:53 PM Kamal Dasu <kamal.dasu@broadcom.com> wrote: > > > On Wed, Apr 22, 2026 at 4:51 PM Kamal Dasu <kamal.dasu@broadcom.com> > wrote: > >> This series adds mmcpstore, a pstore backend driver that enables >> persistent storage of kernel crash logs on eMMC devices. When the >> kernel panics, pstore captures the kmsg dump and writes it directly >> to a dedicated MMC partition using polled I/O with interrupts >> disabled. >> >> Changes since v4 (addresses Ulf Hansson's feedback on the v4 panic >> host path, linux-mmc): >> - mmc_panic_claim_host(): log claimed, runtime suspend, and >> ongoing_mrq before claim; always call panic_prepare() when >> implemented so the host can drain or gracefully terminate >> in-flight requests, then force-claim. Vendor controllers may >> supply their own panic_prepare for platform-specific cases (1/4). >> - SDHCI: reference panic_prepare implementation; longer drain/reset >> timeouts; document panic helper return values in kernel-doc (2/4). >> - mmcpstore: single prepare/claim path; panic_complete() after >> panic_poll_completion() on panic writes (4/4). >> >> Changes since v3: >> - Fixed kernel-doc warnings reported by kernel test robot: >> - Added missing @param descriptions for sdhci_panic_prepare(), >> sdhci_panic_poll_completion(), sdhci_panic_complete() (patch 2) >> - Added missing @sect_offset param doc for >> mmcpstore_do_request_internal() (patch 4) >> - Fixed kernel-doc function name mismatch: mmcpstore_read() -> >> mmcpstore_read_zone() (patch 4) >> - Added missing @disk param doc for mmcpstore_card_add() (patch 4) >> - Removed unused 'offset_bytes' variable in >> mmcpstore_register_for_card() (patch 4) >> >> Changes since v2 (RFC): >> - Rebased onto v7.0-rc — no longer reverts any existing MMC core >> or SDHCI changes (v1/v2 accidentally reverted recent upstream >> commits due to being based on an older tree) >> - Removed all erase/bitmap tracking logic — MMC/eMMC is managed >> flash and does not need erase-before-write; the pstore_zone >> framework handles zone management internally >> - Uses standard MMC core request path (mmc_start_request) instead >> of hand-building mmc_request structs; panic-context I/O is >> handled through proper mmc_host_ops callbacks rather than ad-hoc >> code in the driver >> - Added panic-context ops to mmc_host_ops and sdhci_ops for clean >> separation of panic and normal I/O paths >> - Fixed deadlocks caused by spinlock contention during panic >> (lockless mmc_panic_claim_host using WRITE_ONCE) >> - Fixed data corruption in pstore recovery (zlib_inflate failures) >> by letting the normal sdhci_request() path run instead of a >> custom panic request handler >> - Added PM suspend/resume support with eMMC re-initialization >> - Supports module loading or builtin loading of the driver >> - Added MAINTAINERS entry >> - Split into 4-patch series for reviewability >> >> The series is structured as follows: >> >> Patch 1 adds panic-context operations to struct mmc_host_ops and a >> lockless mmc_panic_claim_host() for use during kernel panic when >> other CPUs are stopped and may hold locks. Host drivers may replace >> panic_prepare with vendor-specific code where needed. >> >> Patch 2 implements the SDHCI reference panic_prepare (graceful >> termination of in-flight work, then polled completion paths); other >> MMC host drivers use the same mmc_host_ops hooks with their own >> panic_prepare where the hardware differs. >> >> Patch 3 adds mmc_blk_get_card_by_name() helper to look up an >> mmc_card from a block device name, used by the mmcpstore module >> path for card discovery. >> >> Patch 4 adds the mmcpstore driver itself, which registers with the >> pstore_blk framework and handles panic writes, PM suspend/resume, >> and dual-path registration (direct probe hook for builtin, >> mmc_blk_get_card_by_name() for module). Also adds probe/remove >> hooks in block.c and declarations in block.h for the builtin path. >> >> Tested on Broadcom STB platforms (ARM64) with SDHCI controllers, >> verified panic dump recovery across multiple panic/reboot cycles >> with kmsg, pmsg, and console pstore; also tested with concurrent >> I/O stress before panic. >> >> Previous submissions and related work: >> RFC v1: >> https://lore.kernel.org/linux-mmc/20221216212738.7928-1-kdasu.kdev@gmail.com/ >> RFC v2: >> https://lore.kernel.org/linux-mmc/20221222185948.12717-1-kdasu.kdev@gmail.com/ >> v3: >> https://lore.kernel.org/linux-mmc/20260319185705.1516950-1-kamal.dasu@broadcom.com/ >> v4: linux-mmc (same thread as v3; superseded by this v5) >> Marvell MMC pstore attempt (2020): >> >> https://lore.kernel.org/linux-mmc/20201207115753.21728-1-bbudiredla@marvell.com/ >> pstore/blk documentation: >> https://www.kernel.org/doc/html/latest/admin-guide/pstore-blk.html >> >> Kamal Dasu (4): >> mmc: core: Add panic-context host operations for pstore backends >> mmc: sdhci: Implement panic-context write support >> mmc: block: Add helper to look up mmc_card by device name >> mmc: core: Add MMC pstore backend driver >> >> MAINTAINERS | 6 + >> drivers/mmc/core/Kconfig | 12 + >> drivers/mmc/core/Makefile | 1 + >> drivers/mmc/core/block.c | 56 ++ >> drivers/mmc/core/block.h | 18 + >> drivers/mmc/core/core.c | 54 ++ >> drivers/mmc/core/mmcpstore.c | 1511 ++++++++++++++++++++++++++++++++++ >> drivers/mmc/host/sdhci.c | 173 +++- >> drivers/mmc/host/sdhci.h | 6 + >> include/linux/mmc/host.h | 12 + >> 10 files changed, 1845 insertions(+), 4 deletions(-) >> create mode 100644 drivers/mmc/core/mmcpstore.c >> >> -- >> 2.34.1 >> > Ulf, I'm resending a gentle reminder regarding the v5 patch series for mmcpstore. This version addresses your previous feedback on the v4 panic host path and includes several key stability improvements: - Implements a lockless mmc_panic_claim_host using WRITE_ONCE to avoid deadlocks during panic. - Adds panic_prepare to the host ops to ensure in-flight requests are drained and runtime PM states are handled before panic writes. - Uses standard MMC core request paths with polling-based completion for robust I/O during a crash. - Includes full PM suspend/resume support with eMMC re-initialization. The series has been tested thoroughly on Broadcom STB platforms (ARM64), verifying reliable recovery of kmsg, pmsg, and console logs across multiple panic cycles. Please let me know if you need any further information or if there are additional changes required for acceptance. Thanks Kamal
© 2016 - 2026 Red Hat, Inc.