From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pz2-f0.google.com (mail-pz2-f0.google.com [74.125.228.0]) (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 B50C844A708 for ; Fri, 14 Aug 2026 08:15:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.228.0 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786695313; cv=none; b=qpGsJdJFbdHFDG2NjU7/h6LSwFrBrm7p1tbfk+Qeg7nwb2gPCbPCSDc+bCWeu36OaRi6usoRJ/FujEXd9eT9/DAByShwEUPvRmaVF0FlFhzzq50Q//7FKg6isIrArXQs1hkGjsjnkTzLp2Dqz1EDG0UhMALnW/sOiLpBFeQKjMo= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786695313; c=relaxed/simple; bh=aSEEaJv/2lAIxCCuT2cdazWa/Ajc5fX3gFyJrjyqtKE=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=YOGoJ8Lzl02yx8ycfaMp8BUchk8yLW6xfIlX/DbLJ1N2KiectIvUllQZhozMtHggogi7AEjwa+9oej1QsHpoIIHCWwjLVMl5Xj07hC2drQDK3+jINjoUFLYlAaXVHdN1VFSavHENQx7KQciqsZIpkBta4z5ZVZM/OkMpTOQ4l5Y= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=RORxvn8G; arc=none smtp.client-ip=74.125.228.0 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="RORxvn8G" Received: by mail-pz2-f0.google.com with SMTP id 41be03b00d2f7-ca24d39d8a4so390499a12.1 for ; Fri, 14 Aug 2026 01:15:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786695305; x=1787300105; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to:content-type; bh=wjrvAKO/KlFzs77oHO3Q4F1Bx7OPbaNI+ITdVO/CFaw=; b=RORxvn8GuCBDZPfrniy50aGi/B+SCFoMljXoPizKeBnsJVxzSlciXky2YVoNq9kmjj lc4kBEUtk+OPYB8DbUKTen2qyVTjOq4J14zBjtn1Ewb/BvG2eaWPnEIwVItrX+hVxhsH M4cTkg4lVccpPmJFNLOgK0eWd94MOabwyvWvPLZGuTlxvE0fmaWwD5ba8tHW7LK+MAZN QMoC/XYa3RPY9YGvZYNUy9aDNVVzmTJOPWwgUrcsUJq6tLchVdADk+e/GHTzYfXKMceT bmIq5rzQSnEcOBzmhrKs6mHNg9MdTfH87YuBTDXCR6eCoKaif7jj79Tg+xqWMGuCaoED 27gg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786695305; x=1787300105; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to:content-type; bh=wjrvAKO/KlFzs77oHO3Q4F1Bx7OPbaNI+ITdVO/CFaw=; b=LyxeMPc48mk7s35tUIws7/1p7x8rinzH9Xge5ZfEd7NTFGT/U+bUKvQkmFmayRgZxV v4GnqXKpPqG/bzkWTrfUlKdSaIAJT4l40vGVMQsKHjpz4Cr2JcnJiZsbn51fwq8fHBZF vLX/sfnZ+PzKnyBd/A76/BqM/ndIe0qELSMhgYAdqS1BRGyKhgMalsZfc9oIs8qSLp3Z 4j4QvU2CLZE+AB9/IdCOxlw7neCor8Gvd6M8QDuGhFttJi6V39/6CArLfa4c20EEBkMi LPpafC4S1L/+Cp04Q9uwtzYwz695lUvELgfT+U3rC4vFKaPxtf2cqGMZmlBbGAWEu2V6 zdfg== X-Forwarded-Encrypted: i=1; AHgh+RqvDUAGLwKd3XloTOAawzNj0lXRgw3gOphuRT65wKABVur3lBCvhUCSPxiIIGLDXYK+cmbEU2vz1zId3hk=@vger.kernel.org X-Gm-Message-State: AOJu0YzcSQ9et1RlKJ1noKYfnqwWIWjFTvCr6miM4uQLTlsZ/SEKREfn cC/ncVO8MOnMXY8i8yksh0lvoQ9pc2nqiCwUei4mMWes943zOKyWCJ8YELqTCxDYcha6Fw== X-Gm-Gg: AR+sD12IqM+4bJdKgxLWows+PIdbRyyGJkPe/w/IvNz0URRBELLWa1Nxhl0GkM7y6MJ pKalP2hpfo6rAGtPHDIwyPDFn3lVtJgzayBsuZFP4yGuDMFkAjECOQMr8T9HgobtiU6l1mksqek qRP+GVfoK19Bj0OcNXoK3vYLoElaRh35vDIkChnx4H5d4Jdv5k+MvBTgMGHsZTFKCuXZZviPcG/ RyoiTBbJMGauvMQGAHdllqAVbFJBWR+UqXD+dfUpPxXJ+wwXK3MKhkzG+4nYuTsnHZAwjHYRyvT yGQm1p5cX7tmEHlGfc8MeG9xJX6ukTQ4z6uf/1QfxzTTVmB7of5xKv5rGMF5+PPxAM0XYcQyMW7 8ONwcCmpcYqfDGfOriOM6yXGzVLA2bY4EWd3h6kHodgU6UeeoGHen/GUXmIkRum34qeUP8LNUOq vHCEUSq8q7fZLcC6co2WktZcJ5rVjfR8e6yj39sgFGslyevQqEMUBa5OdAp8gml1LMQ9GnhGVlO pEktDSlELc= X-Received: by 2002:a05:6a00:2e20:b0:83e:b443:965e with SMTP id d2e1a72fcca58-84fddfa8bddmr3868914b3a.3.1786695305262; Fri, 14 Aug 2026 01:15:05 -0700 (PDT) Received: from intel.company.local ([122.11.210.25]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-8517cfeb39esm149986b3a.4.2026.08.14.01.15.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 14 Aug 2026 01:15:04 -0700 (PDT) From: Wandun Chen To: robh@kernel.org, saravanak@kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 3/3] of: reserved_mem: release dynamically allocated no-map region on init failure Date: Fri, 14 Aug 2026 16:14:43 +0800 Message-ID: <20260814081443.1061046-4-chenwandun1@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260814081443.1061046-1-chenwandun1@gmail.com> References: <20260814081443.1061046-1-chenwandun1@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit From: Wandun Chen Dynamically reserved-memory regions are added to memblock.reserved by memblock_phys_alloc_range() during __reserved_mem_alloc_size(). When a reserved-memory region's driver initialization fails, fdt_init_reserved_mem_node() cleans up the reservation. For no-map regions it only calls memblock_clear_nomap(), but leaves the entry in memblock.reserved untouched, so the memory is never returned to the buddy allocator. Fix it by freeing the region on init failure when it was dynamically allocated. Sashiko found this issue in [1]. Fixes: 7b25995f5319 ("of: of_reserved_mem: mark nomap memory instead of removing") Signed-off-by: Wandun Chen Link: https://lore.kernel.org/all/20260806100605.2C2C01F000E9@smtp.kernel.org/ [1] --- drivers/of/of_reserved_mem.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/drivers/of/of_reserved_mem.c b/drivers/of/of_reserved_mem.c index 67cb60616fc6..d09c29184acf 100644 --- a/drivers/of/of_reserved_mem.c +++ b/drivers/of/of_reserved_mem.c @@ -125,7 +125,8 @@ static int __init alloc_reserved_mem_array(void) } static void fdt_init_reserved_mem_node(unsigned long node, const char *uname, - phys_addr_t base, phys_addr_t size); + phys_addr_t base, phys_addr_t size, + bool dynamic); static int fdt_validate_reserved_mem_node(unsigned long node, phys_addr_t *align); static int fdt_fixup_reserved_mem_node(unsigned long node, @@ -340,7 +341,7 @@ void __init fdt_scan_reserved_mem_late(void) continue; uname = fdt_get_name(fdt, child, NULL); - fdt_init_reserved_mem_node(child, uname, base, size); + fdt_init_reserved_mem_node(child, uname, base, size, false); } /* check for overlapping reserved regions */ @@ -556,7 +557,7 @@ static int __init __reserved_mem_alloc_size(unsigned long node, const char *unam } fdt_fixup_reserved_mem_node(node, base, size); - fdt_init_reserved_mem_node(node, uname, base, size); + fdt_init_reserved_mem_node(node, uname, base, size, true); return 0; } @@ -671,7 +672,8 @@ static int __init __reserved_mem_init_node(struct reserved_mem *rmem, * reserved_mem array to allow of_reserved_mem_lookup() to find it. */ static void __init fdt_init_reserved_mem_node(unsigned long node, const char *uname, - phys_addr_t base, phys_addr_t size) + phys_addr_t base, phys_addr_t size, + bool dynamic) { int err = 0; bool nomap; @@ -697,7 +699,8 @@ static void __init fdt_init_reserved_mem_node(unsigned long node, const char *un if (nomap) memblock_clear_nomap(rmem->base, rmem->size); - else + + if (dynamic || !nomap) memblock_phys_free(rmem->base, rmem->size); return; } else { -- 2.43.0