From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-lf1-f45.google.com (mail-lf1-f45.google.com [209.85.167.45]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7E61633A029 for ; Wed, 15 Apr 2026 09:30:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=209.85.167.45 ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776245460; cv=pass; b=fLeMG/uMscd0Cp7vrdJ6+h/ps8fwwM0WYk0qxwQZkU7yj2Mc/CVzBbAEdJzD0QP2jhrwhkqiBivWMT9RXOvF2DmdSU4uMG2cCL04vDwEq/JQ7k+hXLSlvrFtKndqmeAmvZyzkw1wwr8KrzLwFmgbepUhLSIx8yRkKbVV7vrT/yU= ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776245460; c=relaxed/simple; bh=/u3zVaCUOi1leLGIXQJ3yEy5YFCbysx4+Z9LqXEjesI=; h=MIME-Version:References:In-Reply-To:From:Date:Message-ID:Subject: To:Cc:Content-Type; b=E8vb1yFJbRfLsSKKqGmPQWbt8xfi4wuSm9ea7/dEXcRWVFZENJdZ5XqCTKP1JyrgIc1sei3GW6LDkFdP97VcPupRJDIuUnEOxBetSspz5KN9XMCuSJB4EzMKBEkWJoUc7REAdtvmTSMAr1ozvt+SkDT864cFe3iGERLHDU/UMfI= ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=LOD1Pj+n; arc=pass smtp.client-ip=209.85.167.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="LOD1Pj+n" Received: by mail-lf1-f45.google.com with SMTP id 2adb3069b0e04-5a2c7427ad9so6170764e87.1 for ; Wed, 15 Apr 2026 02:30:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1776245456; cv=none; d=google.com; s=arc-20240605; b=bP4J7zUSy05DWGRPIotNi3v0ixVNh21gsEWHaPdLW1abCTxXjko+tO7yeIKUrvFDXD m0JeiYZBYd3dmcCsdbof7IscTyfgLuxdxlM63efpkxFOpR6RPK3dRbYtsc8wo6BiglVd xHSZFPttfaD+OGGiRIxfd8+ZQHTI4ZJCZUPwWfISHfFo0JwFt9S19oGK1W+ea8gVTZxl jmGsneRiDqQ7heeGm+yvdQuztnEih1ZmqdJcs38zwRc00qCE9YGIFZqcSbn7FxBWyQBC 0dvmTDHX9E+qoS316Nc3bmrX4znNYljRL8xM3hoKv4YowIChXEYjQlqZA3ZUKLAtvTe9 NfJw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=asoGm5k2b/W+D3bbPPi1yaiAJFNCI1hMG2WOSwnM4dM=; fh=ZU0kejBBg32xfJnADwWs1s+5vojh4hwTQRdqoDyJz2Q=; b=U7ZK7gaDGD3Yjff+JqR89rufFPFCSLn7HxpOnNJAc7dslaeKWCjBOGWnSgxvD7vJiH Zwxn9QjF1qp8nqcGU0zN1dUJ13OjqRaMrRdEiet79EOcF/cDuWlLCRlJ3dkvoVvH16gi WjSL1+F84f0zdrd+9SAb5FVFzR62RjAWc96sXRe+gcPI2GssxaLyUqR4O1/5+hLtm/EK B0qWhDZQTz4IKnS4MLLyZ0IPEA0os+KCp6aeKK7GwJAFbYzNXvTkaaNg9qumk5cTHZoS m4eM7dJCl+5FET3epNx2e1wrTqvJLgyeii5IXidxOhz/xw1vE+wofaN6AhqFFXwcVLfD ZT8A==; darn=vger.kernel.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1776245456; x=1776850256; darn=vger.kernel.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=asoGm5k2b/W+D3bbPPi1yaiAJFNCI1hMG2WOSwnM4dM=; b=LOD1Pj+nKhgtpF9KzWymULpbCcYNTX+fbqaoaWCbO7WRWjYfBUdR1gWgppffNUC7M+ 0AKsTwvH3osVEYL7+zrwcdWHLVviGl/4217qIe9mWyPbRD1RO1jvpULWt6b0QF51oZeY bU5TIYMIP/5N7aKoKVvVx5VVLutMeLyoAzDUiCjaG6TghNK/KvvnjVpkkcUAgTLiZxak zQgzo9WQATYm1BOPo6YPhDJJcSIM7SAIGoyzTBJaL0PkgqR7KalL/jBUP3T/H8nx+cHy JQgKbQP0FIpnJpyqW94Y7g8fbw3mwjyXxTrKj9uMbpH6Y+a83kuF+t9jrCC5EXbFv2OG 1EIg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776245456; x=1776850256; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=asoGm5k2b/W+D3bbPPi1yaiAJFNCI1hMG2WOSwnM4dM=; b=MuB49DZ6bgQPe26iOg+PiUOYLax/Ccx2PvEZ27b6+ir0ep6CaFPNUbuVp2JsN5v8w/ mkcEj04V1P+KiqoRc582duTE6mdcTmk2n3epmoXD1GBnh/Ez7O9SsG42OC1meVHMvsGm vIjgqYmskCbo0JsSP83eA8N4eddtAfktAv1FsrEWR1ww+Ot0zxnSibHlgr40OiIZnJj+ jSdYHTmreoAWGyvzQv6sj6gI7o8dT1ocJYHhDNTeRwiIt2pnfYKi2BwdIaqAB4/UpOJx iqhcurzTbfpgzwNdhBRLsxLiuwhwg1n3UbxrWv3Dg/0SDleE2WqNb0+ueg7NSZIkGAdC vzNw== X-Forwarded-Encrypted: i=1; AFNElJ/cDBQt+ks7abBPNOQEPsDOlsOPFDqRFix5VJAqcTEVHXAEdKVtSK8HWNZP6TzZ65VZMBa7pw3pj+YfSA8=@vger.kernel.org X-Gm-Message-State: AOJu0YwmTd6zqw3qg2Gq9mTJWhQCF9vxMN2JH/CdUukGXeBBqPSIEhVS lHg/nffOzFnTv2hDtJvzWlhj++K7kA/SoYTaS5ohwzMwDJS1rnhmEHoYUh/f4QyjYspOXDN7izc evVw40sEYwApKgnSfTfnKk802mspzD0VyGMw89WYy9g== X-Gm-Gg: AeBDieu99HCT0rzgrsiEGGICbK059zYDYldl3V83llruThPTnTCPw90LrxxaAuO9hah zXt/6CO4htiFknbHTPrxJcW4JcAYef5VDVQKX6twBiKhssyshGPmSnV/WGWVNL0cmRjiizCEpzh R36sTqpb4tgSd4SV0FuNHZRhU5CbL9HB8T/1QAPESLDdh9OEHMlvpS+RyadNpmmaDmwRO3cEsyo IW7SfJgcjzPv8UwyNPIdm+7Th5Lm80LP2IgieZdIdkMcrTEzI9qlX4WAnIeJSncjyDROEDv5PuA 9qWT+bzZDffGFVpU7bo= X-Received: by 2002:a05:6512:3d0f:b0:5a2:7bc2:a385 with SMTP id 2adb3069b0e04-5a3efb59485mr6720922e87.38.1776245455495; Wed, 15 Apr 2026 02:30:55 -0700 (PDT) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 References: <20260320203249.1965044-1-kamal.dasu@broadcom.com> <20260320203249.1965044-2-kamal.dasu@broadcom.com> In-Reply-To: <20260320203249.1965044-2-kamal.dasu@broadcom.com> From: Ulf Hansson Date: Wed, 15 Apr 2026 11:30:18 +0200 X-Gm-Features: AQROBzBOthnLox9m6ZSYs81w-N5rCn_yi2Nlq-wjOxJAb8f3I9FXVnuOvR94YUA Message-ID: Subject: Re: [PATCH v4 1/4] mmc: core: Add panic-context host operations for pstore backends To: Kamal Dasu Cc: Adrian Hunter , Kees Cook , Tony Luck , "Guilherme G . Piccoli" , Florian Fainelli , Arend van Spriel , William Zhang , bcm-kernel-feedback-list@broadcom.com, linux-mmc@vger.kernel.org, linux-kernel@vger.kernel.org Content-Type: text/plain; charset="UTF-8" On Fri, 20 Mar 2026 at 21:33, Kamal Dasu wrote: > > Add three new optional callbacks to struct mmc_host_ops for panic-safe > MMC I/O: > > - panic_prepare: drain in-flight requests and prepare for polled I/O > - panic_poll_completion: poll for request completion without interrupts > - panic_complete: restore normal host state after panic I/O > > Add mmc_panic_claim_host() which uses WRITE_ONCE() to claim the host > without taking the spin lock, since during panic other CPUs are stopped > and may hold the lock. > > Signed-off-by: Kamal Dasu > --- > drivers/mmc/core/core.c | 23 +++++++++++++++++++++++ > include/linux/mmc/host.h | 12 ++++++++++++ > 2 files changed, 35 insertions(+) > > diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c > index 860378bea557..5326b246b4f2 100644 > --- a/drivers/mmc/core/core.c > +++ b/drivers/mmc/core/core.c > @@ -860,6 +860,29 @@ void mmc_release_host(struct mmc_host *host) > } > EXPORT_SYMBOL(mmc_release_host); > > +/** > + * mmc_panic_claim_host - force-claim a host in panic context > + * @host: mmc host to claim > + * > + * Force-claims the MMC host without locking. During kernel panic > + * other CPUs are stopped and may be holding mmc_host->lock (e.g. > + * inside __mmc_claim_host or mmc_release_host). Unlike sdhci_host->lock > + * which is freed by the hardware drain+reset, mmc_host->lock has no > + * hardware counterpart, so we must bypass it with WRITE_ONCE. > + */ > +void mmc_panic_claim_host(struct mmc_host *host) > +{ > + if (!host) > + return; > + > + WRITE_ONCE(host->claimed, 1); > + host->claimer = &host->default_ctx; > + host->claimer->task = current; > + WRITE_ONCE(host->claim_cnt, 1); > + WRITE_ONCE(host->ongoing_mrq, NULL); > +} > +EXPORT_SYMBOL(mmc_panic_claim_host); The above doesn't account for whether someone else has already claimed the host. I believe we should check that to better understand our current state. If the host is claimed, it's probably due to ongoing read/write I/O. Then, how do we gracefully terminate those requests? If the host isn't claimed, the mmc host (and mmc card) may have been runtime PM suspended. We should take that into account, because runtime resuming the host in atomic context is most likely not going to work. > + > /* > * This is a helper function, which fetches a runtime pm reference for the > * card device and also claims the host. > diff --git a/include/linux/mmc/host.h b/include/linux/mmc/host.h > index ba84f02c2a10..cd44b62d29cb 100644 > --- a/include/linux/mmc/host.h > +++ b/include/linux/mmc/host.h > @@ -272,6 +272,16 @@ struct mmc_host_ops { > * negative errno in case of a failure or zero for success. > */ > int (*uhs2_control)(struct mmc_host *host, enum sd_uhs2_operation op); > + > + /* > + * Optional panic-context ops for pstore backends that write to MMC > + * during kernel panic with interrupts disabled. > + */ > + int (*panic_prepare)(struct mmc_host *host); > + bool (*panic_poll_completion)(struct mmc_host *host, > + struct mmc_request *mrq); > + void (*panic_complete)(struct mmc_host *host, > + struct mmc_request *mrq); > }; > > struct mmc_cqe_ops { > @@ -758,4 +768,6 @@ int mmc_send_abort_tuning(struct mmc_host *host, u32 opcode); > int mmc_get_ext_csd(struct mmc_card *card, u8 **new_ext_csd); > int mmc_read_tuning(struct mmc_host *host, unsigned int blksz, unsigned int blocks); > > +void mmc_panic_claim_host(struct mmc_host *host); > + > #endif /* LINUX_MMC_HOST_H */ > -- > 2.34.1 > Kind regards Uffe