From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 61AA5606EE83 for ; Sat, 7 Nov 2026 20:13:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=bombadil.20210309 header.b=UBa8xLul; dkim=fail reason="signature verification failed" (2048-bit key) header.d=infradead.org header.i=@infradead.org header.a=rsa-sha256 header.s=desiato.20200630 header.b=Z9EqDpmb DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:Cc:To:In-Reply-To:References:Message-Id :MIME-Version:Subject:Date:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Unsubscribe-Post:List-Owner; bh=ErEYMUeCnPwMrsQzBcaz+HGAXNrlru0h69jJXLzS4KA=; b=UBa8xLulsS9QfnKQjHc3e8OAYk uYYJ/f97f2VuqUsFta0hcvsPDm7TVTw4KLG5GX+CEO7TkK5YzhQw6daob50R2zPRBbs+cSZnqjJjv yEo13NezDsigBAp/+Lc31KJjO5RjqCtvCAUj8+ov63R50+GUDIkfW6oX8LMYd3jMLVuoKHQiox2A8 C6o8aXzud2sRL/CUq4rksodAL13n9EhMr3fdgckQ1hiIxccxU6/ELAhXhizeb/SKGYHD+A6cDikGh v7rLGApoc/DgVw8kObI7xv1ZZw3cZcBxnlhcp2QHdTTjhCtIJcWKRH7bI43BVFEfz6yPb9oLnNXhp r/insKPw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.100.1 #2 (Red Hat Linux)) id 1xPmn9-0000000FIAU-2hac; Sat, 07 Nov 2026 20:13:35 +0000 Received: from desiato.infradead.org ([2001:8b0:10b:1:d65d:64ff:fe57:4e05]) by bombadil.infradead.org with esmtps (Exim 4.100.1 #2 (Red Hat Linux)) id 1xPmn4-0000000FHyO-16Xp for linux-amlogic@bombadil.infradead.org; Sat, 07 Nov 2026 20:13:30 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=desiato.20200630; h=Cc:To:In-Reply-To:References: Message-Id:Content-Transfer-Encoding:Content-Type:MIME-Version:Subject:Date: From:Sender:Reply-To:Content-ID:Content-Description; bh=4cbHlEgTqAV0uFbOpmY4khYTjF5IiPDWn5PtExd0tWk=; b=Z9EqDpmbhF46juz4Ad3n2gTwNT 9JDJ/ZbSMnXjvviZiGTJYI8Irnha3YXImZpztk7iyASMDd9jvmUf2h0SjwbKtQCWEmAzSV/ufY7m/ g11xOUhOHdRqRyc/dJSDCbtuJEOfPvFGRAAT6gSDBa1pjQYuLRRb+QVPMQANQE9LLvveRq0Dy6i04 cjveSxVHYK9ZrqzxjjdFPBq5xNn9TrLbfbYaFImB0jhbZ0Xke07YeGJvh3sut7Upde6WW/eqp8EhM W81CogbXt6Aqk//PdruOduyKqSaK8/kG6lQdVyw3uRcnVd7Xel6WHCSoGagC1EMpLU/8zUYRplJxD vFfhaBvg==; Received: from mail-oi1-f173.google.com ([209.85.167.173]) by desiato.infradead.org with esmtps (Exim 4.100.1 #2 (Red Hat Linux)) id 1xPmmy-00000005QVI-0ImY for linux-amlogic@lists.infradead.org; Sat, 07 Nov 2026 20:13:28 +0000 Received: by mail-oi1-f173.google.com with SMTP id 5614622812f47-4c5d8c7f326so3379b6e.1 for ; Sat, 07 Nov 2026 12:13:23 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1794082402; x=1794687202; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=4cbHlEgTqAV0uFbOpmY4khYTjF5IiPDWn5PtExd0tWk=; b=cmigT9Kplfs0GXnWy5A3tB4cStEs3vldW1y0GkoGcJuprcdnMVyld+/UkyXGdHa/CD AtiC7vlrLJ76cBAgXtvMvkVC1ewadGWBB+qRMK9Jb7dwHy76YTCih4UIcffHybUJEnhy vyvbdWbTgrJFX21uMHo6Vvqagi+5fPQXRL2qK6DJCqzHB5vzWsiXeg3jd3GT0WeKzR3i hfvxsJm6misIe07+v+cgjrjWcxyJ36JxLlixdLLBq3dI89R3ZPOHCoabXh4GDCzmFdu7 KHIOyw91hbdlDkCIbQ63IiL+Q2BR4osNzRDkSjcj4YE0gC8AiBunaK5ia3Mhm6lszjDo doYw== X-Forwarded-Encrypted: i=1; AKwUvBx8vx2P0Jz15eZ7J3BUcacTvJR6JfqFoXY4DgU3HDVjtb7k7L2Pg3+1Hd+ptd7G3t/edGwBeXXSumufwDvJ@lists.infradead.org X-Gm-Message-State: APuU4Z9/wMGM2bulrb6blpJVPsL4zQX2g6HG45vbWDA1DCiY2WxXOe0E Iqcqw1nquE8ii2cOea8Kk+u4TV2m/h2C0hiPzwtAchH7a6oTpgMsEAhMTculcAu575o= X-Gm-Gg: AYBFou2vTfEfm//eBIsxLyVLm0052lf6oLfKOBFlISzGzTkleEfIEe8ljqzhpxmfxOe bJTCt4SXt/n12OZ2QIIpcsQAuLZXaERQtMX4VOH/ayoLmjmy7aAq/tdLr13pFVmMFS855DVC47b yHgaXQ09aM4PBQUdIZip3INImnUSXDkW6JoC3AKXZTwHP9Ufm/K0B0BAZ88gTo6sX1g1SEasLPQ sAb00Dx70leZKwUZQbxJFWtNIx7Uav2E9YOnE+DN2KK4JS90cTkHaBt9zH8Mbve7FGiQ9DwAskI AbZTCmqM8bUr11kKcd3RAXPYlMepfmaDSY+yroVoL4yvR2kAy/0UD9UcbZAF0EIA9LjqcCP+seE PnM6yhzTxnsPEEtZnwalk9bbWo7LLCSCXfmvobV18NJp6V3mbJxLxkdbul6ceRHgpQB4f/S/yfb h6CjUGkShzIC6wGMV13zHXeHPgscGwFZdgF8zH2Dild7I1McdSgMMOp/ZGrZDSiJKK1g9kIuPdL OtlKI9+bkYUA6EuULqOplNJb31BIEfdsIVnmhz9+lZ/3JyIbOisVpcBEMAgumwUKU1lINHIDmLz 57Dwr1M4C+5cwWMD9PjOCeyyo98w3cLts0bDFXuVyR/kMyBjMsqtoMwB/OGU0OqBjcoGT13FBnj qa4VdSg== X-Received: by 2002:a05:6808:1b0f:b0:539:df4e:2d20 with SMTP id 5614622812f47-567e14d55ecmr4884980b6e.27.1794082401790; Sat, 07 Nov 2026 12:13:21 -0800 (PST) Received: from [127.0.1.1] (174-29-1-49.hlrn.qwest.net. [174.29.1.49]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-4ade68aa561sm226096fac.5.2026.11.07.12.13.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 07 Nov 2026 12:13:21 -0800 (PST) From: James Hilliard Date: Sat, 07 Nov 2026 03:16:34 -0700 Subject: [PATCH 37/58] mtd: rawnand: meson: retain open-handle state on removal X-Archived-By: MIME-Version: 1.0 Message-Id: <20261107-submit-rawnand-retained-handle-lifetime-v1-v1-37-0181ef0cc4c8@gmail.com> References: <20261107-submit-rawnand-retained-handle-lifetime-v1-v1-0-0181ef0cc4c8@gmail.com> In-Reply-To: <20261107-submit-rawnand-retained-handle-lifetime-v1-v1-0-0181ef0cc4c8@gmail.com> To: Miquel Raynal , Richard Weinberger , Vignesh Raghavendra , Brian Norris , Boris Brezillon , Arseniy Krasnov , Chen-Yu Tsai , Jernej Skrabec , Samuel Holland , Thomas Gleixner , Vitaly Wool , David Woodhouse , Russell King , David Woodhouse , Mike Rapoport , Maxime Coquelin , Alexandre Torgue , Christophe Kerello , Jason Roberts , Michal Simek , Boris Brezillon , Mason Yang , Ramuthevar Vadivel Murugan , Stefan Agner , Lucas Stach , Thierry Reding , Jonathan Hunter , Dmitry Osipenko , Matthias Brugger , AngeloGioacchino Del Regno , Jorge Ramirez-Ortiz , Heiko Stuebner , Yifeng Zhao , Nicolas Ferre , Alexandre Belloni , Claudiu Beznea , Keguang Zhang , Jacky Huang , Shan-Chun Hung , Frank Li , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Han Xu , Liang Yang , Neil Armstrong , Kevin Hilman , Jerome Brunet , Martin Blumenstingl , Manivannan Sadhasivam , Kamal Dasu , Broadcom internal kernel review list , Vladimir Zapolskiy , Piotr Wojtaszczyk , Paul Cercueil , Harvey Hunt , Maxim Levitsky , Michael Walle , Srinivas Kandagatla Cc: Tze Yee Ng , linux-mtd@lists.infradead.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, linux-tegra@vger.kernel.org, linux-mediatek@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-mips@vger.kernel.org, imx@lists.linux.dev, linux-renesas-soc@vger.kernel.org, linux-amlogic@lists.infradead.org, linux-arm-msm@vger.kernel.org, James Hilliard X-Mailer: b4 0.15.2 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.9.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20261107_201324_045803_4DFAC65E X-CRM114-Status: GOOD ( 18.48 ) X-Spam-Score: 3.5 (+++) X-BeenThere: linux-amlogic@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-amlogic" X-Spam-Status: No, score=-12.3 required=3.0 tests=BAYES_00,DATE_IN_PAST_06_12, DKIM_ADSP_CUSTOM_MED,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_EF, FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=4.0.1 X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on aws-us-west-2-korg-listserv-alma10-1 Keep chip metadata and controller storage alive until the final MTD reference is released. Unregister and disconnect each published chip before releasing the resources used by its hardware operations. The deferred detach callback only frees heap-allocated transfer buffers. Signed-off-by: James Hilliard --- drivers/mtd/nand/raw/meson_nand.c | 55 +++++++++++++++++++++++++++------------ 1 file changed, 39 insertions(+), 16 deletions(-) diff --git a/drivers/mtd/nand/raw/meson_nand.c b/drivers/mtd/nand/raw/meson_nand.c index b8834aa96e81..4f33ea7a1b4d 100644 --- a/drivers/mtd/nand/raw/meson_nand.c +++ b/drivers/mtd/nand/raw/meson_nand.c @@ -1381,6 +1381,11 @@ static const struct nand_controller_ops meson_nand_controller_ops = { .exec_op = meson_nfc_exec_op, }; +static void meson_nfc_nand_release(struct nand_chip *nand) +{ + kfree(to_meson_nand(nand)); +} + static int meson_nfc_nand_chip_init(struct device *dev, struct meson_nfc *nfc, struct device_node *np) @@ -1398,8 +1403,7 @@ meson_nfc_nand_chip_init(struct device *dev, return -EINVAL; } - meson_chip = devm_kzalloc(dev, struct_size(meson_chip, sels, nsels), - GFP_KERNEL); + meson_chip = kzalloc(struct_size(meson_chip, sels, nsels), GFP_KERNEL); if (!meson_chip) return -ENOMEM; @@ -1410,12 +1414,13 @@ meson_nfc_nand_chip_init(struct device *dev, if (ret) { dev_err(dev, "could not retrieve register property: %d\n", ret); - return ret; + goto free_chip; } if (test_and_set_bit(tmp, &nfc->assigned_cs)) { dev_err(dev, "CS %d already assigned\n", tmp); - return -EINVAL; + ret = -EINVAL; + goto free_chip; } } @@ -1434,14 +1439,16 @@ meson_nfc_nand_chip_init(struct device *dev, if (ret == -EINVAL) nfc->no_rb_pin = true; else if (ret) - return ret; + goto free_chip; - if (nand_rb_val) - return -EINVAL; + if (nand_rb_val) { + ret = -EINVAL; + goto free_chip; + } ret = nand_scan(nand, nsels); if (ret) - return ret; + goto free_chip; if (nand->options & NAND_IS_BOOT_MEDIUM) { ret = of_property_read_u32(np, "amlogic,boot-pages", @@ -1449,8 +1456,7 @@ meson_nfc_nand_chip_init(struct device *dev, if (ret) { dev_err(dev, "could not retrieve 'amlogic,boot-pages' property: %d", ret); - nand_cleanup(nand); - return ret; + goto cleanup_nand; } ret = of_property_read_u32(np, "amlogic,boot-page-step", @@ -1458,21 +1464,30 @@ meson_nfc_nand_chip_init(struct device *dev, if (ret) { dev_err(dev, "could not retrieve 'amlogic,boot-page-step' property: %d", ret); - nand_cleanup(nand); - return ret; + goto cleanup_nand; } } + ret = nand_set_release(nand, meson_nfc_nand_release); + if (ret) + goto cleanup_nand; ret = mtd_device_register(mtd, NULL, 0); if (ret) { dev_err(dev, "failed to register MTD device: %d\n", ret); - nand_cleanup(nand); + nand_disconnect(nand); + mtd_put_master(mtd); return ret; } list_add_tail(&meson_chip->node, &nfc->chips); return 0; + +cleanup_nand: + nand_cleanup(nand); +free_chip: + kfree(meson_chip); + return ret; } static void meson_nfc_nand_chips_cleanup(struct meson_nfc *nfc) @@ -1486,8 +1501,9 @@ static void meson_nfc_nand_chips_cleanup(struct meson_nfc *nfc) mtd = nand_to_mtd(&meson_chip->nand); WARN_ON(mtd_device_unregister(mtd)); - nand_cleanup(&meson_chip->nand); + nand_disconnect(&meson_chip->nand); list_del(&meson_chip->node); + mtd_put_master(mtd); } } @@ -1544,21 +1560,28 @@ static const struct of_device_id meson_nfc_id_table[] = { }; MODULE_DEVICE_TABLE(of, meson_nfc_id_table); +static void meson_nfc_release(struct nand_controller *controller) +{ + kfree(container_of(controller, struct meson_nfc, controller)); +} + static int meson_nfc_probe(struct platform_device *pdev) { struct device *dev = &pdev->dev; struct meson_nfc *nfc; int ret, irq; - nfc = devm_kzalloc(dev, sizeof(*nfc), GFP_KERNEL); + nfc = kzalloc_obj(*nfc); if (!nfc) return -ENOMEM; + ret = devm_nand_controller_init(dev, &nfc->controller, meson_nfc_release); + if (ret) + return ret; nfc->data = of_device_get_match_data(&pdev->dev); if (!nfc->data) return -ENODEV; - nand_controller_init(&nfc->controller); INIT_LIST_HEAD(&nfc->chips); init_completion(&nfc->completion); -- 2.53.0 _______________________________________________ linux-amlogic mailing list linux-amlogic@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-amlogic