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 A688D6083604 for ; Sat, 7 Nov 2026 20:14:25 +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=koCGWc5C; 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=mrnthMsN 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=9nbR+B/ExUQP5bWg66owrsSv721k/b+Pni8Aw+YFNvc=; b=koCGWc5CdzPzTlOZuah/vXtGi6 3V3oVrP7lumhVvmHMAfv+owRI5tsHy9he9uxymZTBP6Pe4uyaiF5MeWrrrOWh77kDw0KUY9WyFIZN RbvFMu+JGcN5aFjL/+dMajiKYR01TQSk+dEAxstd3gnTeCa9JWnqMIQPGve8X5xeLd2/AP3YuTkub FVwqmpsWE7obKBKPyFISgaIKKqQ60ZNJCKfBz9a2pkgnU6C6MsFbZ9kQegfLnWtzhqBjOrPW2RW6B TxaPmK4r2bru0NHIpmaaV1S5YOY4NXJqpUvVnisXaxQDHdxOaBjckJpiihAjcvnK2Kh7ROq5c60I1 KNMyrzOg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.100.1 #2 (Red Hat Linux)) id 1xPmnx-0000000FJds-0cLc; Sat, 07 Nov 2026 20:14:25 +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 1xPmna-0000000FIzb-09Up for linux-amlogic@bombadil.infradead.org; Sat, 07 Nov 2026 20:14:02 +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=Au1rwh2obm9uwGdEt+TtwG7FPc9AMzgCv64EazeTRGE=; b=mrnthMsNDQ52/lpvJXKIrqHDuj dYNjPK+DDxHO5QrGiW1OaYf+RSpy+FmcDHwCYV8NG0MxlTYZT2XJB4Br1uuUnJJRkxQeV0UDxJsxO 08GbbcXGyGngjj1EASQHPS7FGpbswDrX8Qqk3QTOpPhFkgupVBvfPl44lqlBq7CVdyruO5/35sxgr 7ZlqTQJuQjZrIsUn2sJTPrRMLMrsncP/dZXz/uvAUVqyEjRsC96Y82lrrFc7wuJewGRWn7kiJ0Z9O 7J2wNjfgpYy5Sv2h/b07fqYmxKSAA1Z4OpwXGJ8E12f6zNCQkBVtSRXDr4JMHOv+Uf1ObUmQeAELy fosBnyJw==; Received: from mail-oa1-f48.google.com ([209.85.160.48]) by desiato.infradead.org with esmtps (Exim 4.100.1 #2 (Red Hat Linux)) id 1xPmnW-00000005QsE-3kku for linux-amlogic@lists.infradead.org; Sat, 07 Nov 2026 20:14:00 +0000 Received: by mail-oa1-f48.google.com with SMTP id 586e51a60fabf-4a76f63b243so494595fac.0 for ; Sat, 07 Nov 2026 12:13:58 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1794082437; x=1794687237; 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=Au1rwh2obm9uwGdEt+TtwG7FPc9AMzgCv64EazeTRGE=; b=uYE/Hn3RsOSc8/plqL4xqKVOVkRjq9tHHt+KMDi9ilCgPolmibitQnKRNGR0s0gBQl JTvgyoGZS7Rg77RHkK3TMytLxmi4Vvi4EGUJUZL5Q9PEkYr/mFAVxC1HqZpyfBnbdzFC o0/ZDPKdPN77E0WUyk7L0RCrV4YgvHeB0mbIVj+IQsShBcvfCJPGG5FFAGjInKrf+roP Ee6kaUOpdCkm0ImuiVqWr9vqA6HD/M90v+lfEkwbRzc/NrOk8UcVrHSxSD2a/yHNSBQC aUcaBUrKKZQ8P6SMLRVMOGMBTKQX4s1c6f1KnMgkIsbfJMFl5i3P8GDdAp1H6NyW3m0S 9Jhg== X-Forwarded-Encrypted: i=1; AL+hErGDDtaNZnRCJYX5BZUthbYxSDJ8s4+V3a2W0UsrxrsoPDtFU6eGg5idrdegLIotWfJTbkLlG6J5xTrPcK0u@lists.infradead.org X-Gm-Message-State: APuU4Z8DzJHKVOccEE4M+mC7CtyYEm8FcRaqnJ9a3IGq69MuXCo6XueD DcQsKGKjf1Q9tEKc7x5G5rQRyQguWouo2nlh+k3akIBi8LiHSP6oiYaZGuvYVmbStFA= X-Gm-Gg: AYBFou1x+9oCEa9RlvK449bVUqlib2oYLbmQZWK+e1O0jHW/VgcXUCSg6QQ+UQrY5xW pFP7rRpRS0t+LwhudU8dDgtbid78O1OgmZ6QHaulJUhIhuBQJsYe50gPr9/MtZCtIw35YOXj4T1 iFam6LMr/7i2GvFJGlc6HfmB6YIngfMVkB+qv3ipDo0aDqxr1Hqwad5xpWlmhDUHEuLTaunDNp5 ndo0DGoZv7emaFSkdmaYVfqWqNZ4inOFPa0Gm7ZruMjWpq68qujjjz0Mw48ctA88oITp3D+AkXS hWlPAwv6j1NiwKRZcVtA0Berde2boba5WqczrAyLsGYE2Ig4jbFKD86LFN/Q98XH69+bbxzuY8i Wj6Rn7P+JS7VSphtFwhhHS3nrw9AEMIXmuUxiZNmGEJdqq4ErhVBr3gNhXm4k43dxkzYQI22geD eKeRqSx4uFDzpUnwJAxWIGvFSxuaiDq/z9fomwWOQ/uzOAFue6BMsr6NYEDgj/zwi5KV3Qur0zZ 7BlWLbGn+pvmeLmYrWTLbFe1SPwSySn/ht/yJmtJf9YRNsr5mzUYjOvJ2ijR6lBkLlfCVUV9Rpa 0XdbHkPH/x+mBSR+7BFxxKvwpxuepkG1tiX8H+7RJmkZuiH3s/dAMvWJcJbN X-Received: by 2002:a05:6870:9f0d:b0:48f:e0f6:bd51 with SMTP id 586e51a60fabf-4adc11d6d6amr1203868fac.38.1794082437088; Sat, 07 Nov 2026 12:13:57 -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.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 07 Nov 2026 12:13:56 -0800 (PST) From: James Hilliard Date: Sat, 07 Nov 2026 03:16:46 -0700 Subject: [PATCH 49/58] mtd: rawnand: txx9ndfmc: retain chip state across removal X-Archived-By: MIME-Version: 1.0 Message-Id: <20261107-submit-rawnand-retained-handle-lifetime-v1-v1-49-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_201359_104940_999ED024 X-CRM114-Status: GOOD ( 17.89 ) 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 Retain each chip and its shared controller while MTD references remain. Unregister and disconnect before dropping driver ownership, and check MTD registration failure without publishing partially initialized chip slots. Signed-off-by: James Hilliard --- drivers/mtd/nand/raw/txx9ndfmc.c | 42 +++++++++++++++++++++++++++++++--------- 1 file changed, 33 insertions(+), 9 deletions(-) diff --git a/drivers/mtd/nand/raw/txx9ndfmc.c b/drivers/mtd/nand/raw/txx9ndfmc.c index 4cc6e91dbc23..9eae5002e389 100644 --- a/drivers/mtd/nand/raw/txx9ndfmc.c +++ b/drivers/mtd/nand/raw/txx9ndfmc.c @@ -276,17 +276,33 @@ static const struct nand_controller_ops txx9ndfmc_controller_ops = { .attach_chip = txx9ndfmc_attach_chip, }; +static void txx9ndfmc_chip_release(struct nand_chip *chip) +{ + struct txx9ndfmc_priv *priv = nand_get_controller_data(chip); + + kfree(priv->mtdname); + kfree(priv); +} + +static void txx9ndfmc_release(struct nand_controller *controller) +{ + kfree(container_of(controller, struct txx9ndfmc_drvdata, controller)); +} + static int txx9ndfmc_probe(struct platform_device *dev) { struct txx9ndfmc_platform_data *plat = dev_get_platdata(&dev->dev); int hold, spw; - int i; + int i, ret; struct txx9ndfmc_drvdata *drvdata; unsigned long gbusclk = plat->gbus_clock; - drvdata = devm_kzalloc(&dev->dev, sizeof(*drvdata), GFP_KERNEL); + drvdata = kzalloc_obj(*drvdata); if (!drvdata) return -ENOMEM; + ret = devm_nand_controller_init(&dev->dev, &drvdata->controller, txx9ndfmc_release); + if (ret) + return ret; drvdata->base = devm_platform_ioremap_resource(dev, 0); if (IS_ERR(drvdata->base)) return PTR_ERR(drvdata->base); @@ -306,7 +322,6 @@ static int txx9ndfmc_probe(struct platform_device *dev) dev_info(&dev->dev, "CLK:%ldMHz HOLD:%d SPW:%d\n", (gbusclk + 500000) / 1000000, hold, spw); - nand_controller_init(&drvdata->controller); drvdata->controller.ops = &txx9ndfmc_controller_ops; platform_set_drvdata(dev, drvdata); @@ -361,7 +376,18 @@ static int txx9ndfmc_probe(struct platform_device *dev) } mtd->name = txx9_priv->mtdname; - mtd_device_register(mtd, NULL, 0); + ret = nand_set_release(chip, txx9ndfmc_chip_release); + if (ret) { + nand_cleanup(chip); + txx9ndfmc_chip_release(chip); + continue; + } + ret = mtd_device_register(mtd, NULL, 0); + if (ret) { + nand_disconnect(chip); + mtd_put_master(mtd); + continue; + } drvdata->mtds[i] = mtd; } @@ -376,18 +402,16 @@ static void txx9ndfmc_remove(struct platform_device *dev) for (i = 0; i < MAX_TXX9NDFMC_DEV; i++) { struct mtd_info *mtd = drvdata->mtds[i]; struct nand_chip *chip; - struct txx9ndfmc_priv *txx9_priv; if (!mtd) continue; chip = mtd_to_nand(mtd); - txx9_priv = nand_get_controller_data(chip); ret = mtd_device_unregister(nand_to_mtd(chip)); WARN_ON(ret); - nand_cleanup(chip); - kfree(txx9_priv->mtdname); - kfree(txx9_priv); + nand_disconnect(chip); + drvdata->mtds[i] = NULL; + mtd_put_master(mtd); } } -- 2.53.0 _______________________________________________ linux-amlogic mailing list linux-amlogic@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-amlogic