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 AB9FC606D80D for ; Sat, 7 Nov 2026 20:13:03 +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=owj0W72C 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=j8mSXvRG1KkquHIHxAVSWQsONG0ATeIHVek67CFv4Bc=; b=owj0W72C0BiTwZheccUaDbo1xs C3T4njis2GyfYB20Af9E88GCFumJWQQhF6PY+/U1R1Z5f1Ul335n8ZBC8U8RNN4N3AirG1Dyxf3/o IvTu/GsK3nShmPI69Usov6ie4zjRCNawfqMd/qOFnuijSILfUUHzregYk2MXikEvxTCmO6rUmrOEq 2j2brhEYfnZXWefbb52a5X5p8263qi8PMNoqMm2WAiAhdiNmnRLCtxVtnmNxVqUt7zPQl7s3T3wij d0tL/CQI5wvowf6Sk2AXffEkxtiL6Oumx91tvuki67ylRwNH+ZnHhlBjJBhYJ6SgykTRG7v9Nlj7n iLeJul/Q==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.100.1 #2 (Red Hat Linux)) id 1xPmmd-0000000FH76-1Dbp; Sat, 07 Nov 2026 20:13:03 +0000 Received: from mail-oa1-f53.google.com ([209.85.160.53]) by bombadil.infradead.org with esmtps (Exim 4.100.1 #2 (Red Hat Linux)) id 1xPmmZ-0000000FGyA-0hpZ for linux-amlogic@lists.infradead.org; Sat, 07 Nov 2026 20:13:01 +0000 Received: by mail-oa1-f53.google.com with SMTP id 586e51a60fabf-490d838b425so3184fac.3 for ; Sat, 07 Nov 2026 12:12:58 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1794082378; x=1794687178; 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=ITiDeBlYByumad4I/LuK3iRUkjJJZT9G1thTcrVXBwo=; b=uqdlTyaljZp8kIOtsmiovCy47eQYQYHxyMhc/hVs7gBc/N6S9+XJ+TRb5s5t2iz1KM QiQAr5LySWWdmcLVkli1Be5mf7Gi29uBFsm7HLNezOvuJ1ZvT/xnptQT34zaoVV9N2j7 RG6kB6ZIqMXu1cY2mTLh7onY7stmjw+YNkrk3HyBko6bZYSC+3CdQ95cx+d5JU/41XN1 zU9zOJ2RatpYyWEzOfsNBc2pfTbVdKsDC3ahhJELZaonvUYJQYbgvbt21OcI89Xr1T0L yhgTRvuYMhM1rx2BRbHViulIZaVmoO7xvPwtzLx3JaBjYkmYmsTnKryNNnTZdmAfIpOt +1Zg== X-Forwarded-Encrypted: i=1; AL+hErEDfM/pcIrW8iAwzvvHVrmU9fW1ENBhTHRqWdBTjUhNxdlq0eyVmNtzbhxuryAxW5OqTOZo7eSRzRHM5EPC@lists.infradead.org X-Gm-Message-State: APuU4Z/Dxwo/tIOzorcvnkrEA5D31sWWGEo8sDlh4GtEyIatS72JAe1/ 9kYM+qFGFmBz7YBbaEgwtJQS48ig29MOnDsIA6WFt53IFNhwzA2W2ZGUpdFj20c7RuM= X-Gm-Gg: AYBFou0bBTWdRHoMKRMSFxTYbzaFNlUld+byljnfrg9U5GZmEDIdDFfVPh6vYbLpl4O vUcP3aiexitcpfPStJMestfP13QSasqvg+KrhbUAZAJ90rNOOnuNttl40liXBmZhwQ9l5wVQMX9 a6dKohApbN0YrmzwtJkPLtjwaW00A5I64un1iJGPHXVEviHJ3fyg+KSr5qQFcUZOPlJa7pXyEmC B0QfUPUi4bgxkPamwhIvsa5IiYqFodSYM2ZwnNvFaRDER38jJNkzuxRFlqStqbenJvb+nT7cljA T06q4qZByN4LaisBDfCKGI63ig9C4KCP7jQc4G4QssWy0uL1tL6VRIrspKK6MaVoAJigYxLO8C1 SfDGgqBDNMvxb6z1W9LeH1xIX5b1QcHjlgPwYx/A9MM1wKCHE4N2GKIJoMi31af2NPw1g4TTxjp v4WCw+GOTnemLk0ubkgZNRVDQ4DW3oP1c4WMBWhS/WePiMviZXJe6WkS6eVmT++fRdhSTSpqAxC TN/2QR6WwCbNtT5ZbIs3tLJ6dZk1zdv/JSJnxgnB5jakDiz6fxvF9nsWUp17ec+Ow90D/iJwGF2 kl4P8sEDYdoTiXKoL6lvAvR/W5AtqqT/M21HZMJkSwRavhMgLLB1eQHB20+q X-Received: by 2002:a05:6871:7426:b0:456:5d8b:5681 with SMTP id 586e51a60fabf-4ad9869f851mr4516599fac.1.1794082377926; Sat, 07 Nov 2026 12:12: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.12.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 07 Nov 2026 12:12:57 -0800 (PST) From: James Hilliard Date: Sat, 07 Nov 2026 03:16:26 -0700 Subject: [PATCH 29/58] mtd: rawnand: ma35d1: retain open-handle state on removal X-Archived-By: MIME-Version: 1.0 Message-Id: <20261107-submit-rawnand-retained-handle-lifetime-v1-v1-29-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_121259_291571_B2E6EE31 X-CRM114-Status: GOOD ( 16.41 ) X-Spam-Score: 1.7 (+) 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. Unlink each chip before dropping its initial lifetime reference. Signed-off-by: James Hilliard --- .../mtd/nand/raw/nuvoton-ma35d1-nand-controller.c | 44 +++++++++++++++++----- 1 file changed, 34 insertions(+), 10 deletions(-) diff --git a/drivers/mtd/nand/raw/nuvoton-ma35d1-nand-controller.c b/drivers/mtd/nand/raw/nuvoton-ma35d1-nand-controller.c index f659d3a6b9ef..90bdf2635a44 100644 --- a/drivers/mtd/nand/raw/nuvoton-ma35d1-nand-controller.c +++ b/drivers/mtd/nand/raw/nuvoton-ma35d1-nand-controller.c @@ -849,6 +849,11 @@ static const struct nand_controller_ops ma35_nfc_ops = { .exec_op = ma35_nfc_exec_op, }; +static void ma35_nand_chip_release(struct nand_chip *chip) +{ + kfree(container_of(chip, struct ma35_nand_chip, chip)); +} + static int ma35_nand_chip_init(struct device *dev, struct ma35_nand_info *nand, struct device_node *np) { @@ -866,8 +871,7 @@ static int ma35_nand_chip_init(struct device *dev, struct ma35_nand_info *nand, return -EINVAL; } - nvtnand = devm_kzalloc(dev, struct_size(nvtnand, sels, nsels), - GFP_KERNEL); + nvtnand = kzalloc(struct_size(nvtnand, sels, nsels), GFP_KERNEL); if (!nvtnand) return -ENOMEM; @@ -876,17 +880,19 @@ static int ma35_nand_chip_init(struct device *dev, struct ma35_nand_info *nand, ret = of_property_read_u32_index(np, "reg", i, &cs); if (ret) { dev_err(dev, "reg property failure : %d\n", ret); - return ret; + goto free_chip; } if (cs >= MA35_MAX_NSELS) { dev_err(dev, "invalid CS: %u\n", cs); - return -EINVAL; + ret = -EINVAL; + goto free_chip; } if (test_and_set_bit(cs, &nand->assigned_cs)) { dev_err(dev, "CS %u already assigned\n", cs); - return -EINVAL; + ret = -EINVAL; + goto free_chip; } nvtnand->sels[i] = cs; @@ -905,17 +911,27 @@ static int ma35_nand_chip_init(struct device *dev, struct ma35_nand_info *nand, mtd_set_ooblayout(mtd, &ma35_ooblayout_ops); ret = nand_scan(chip, nsels); if (ret) - return ret; + goto free_chip; + ret = nand_set_release(chip, ma35_nand_chip_release); + if (ret) { + nand_cleanup(chip); + goto free_chip; + } ret = mtd_device_register(mtd, NULL, 0); if (ret) { - nand_cleanup(chip); + nand_disconnect(chip); + mtd_put_master(mtd); return ret; } list_add_tail(&nvtnand->node, &nand->chips); return 0; + +free_chip: + kfree(nvtnand); + return ret; } static void ma35_chips_cleanup(struct ma35_nand_info *nand) @@ -928,8 +944,9 @@ static void ma35_chips_cleanup(struct ma35_nand_info *nand) chip = &nvtnand->chip; ret = mtd_device_unregister(nand_to_mtd(chip)); WARN_ON(ret); - nand_cleanup(chip); + nand_disconnect(chip); list_del(&nvtnand->node); + mtd_put_master(nand_to_mtd(chip)); } } @@ -948,16 +965,23 @@ static int ma35_nand_chips_init(struct device *dev, struct ma35_nand_info *nand) return 0; } +static void ma35_nand_release(struct nand_controller *controller) +{ + kfree(container_of(controller, struct ma35_nand_info, controller)); +} + static int ma35_nand_probe(struct platform_device *pdev) { struct ma35_nand_info *nand; int ret = 0; - nand = devm_kzalloc(&pdev->dev, sizeof(*nand), GFP_KERNEL); + nand = kzalloc_obj(*nand); if (!nand) return -ENOMEM; - nand_controller_init(&nand->controller); + ret = devm_nand_controller_init(&pdev->dev, &nand->controller, ma35_nand_release); + if (ret) + return ret; INIT_LIST_HEAD(&nand->chips); nand->controller.ops = &ma35_nfc_ops; -- 2.53.0 _______________________________________________ linux-amlogic mailing list linux-amlogic@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-amlogic