From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id AA552C369AB for ; Thu, 24 Apr 2025 08:33:35 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id C5A9E6B009F; Thu, 24 Apr 2025 04:33:34 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id BE2496B00A1; Thu, 24 Apr 2025 04:33:34 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id A35926B00A3; Thu, 24 Apr 2025 04:33:34 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id 7FC246B009F for ; Thu, 24 Apr 2025 04:33:34 -0400 (EDT) Received: from smtpin27.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 50D601CD189 for ; Thu, 24 Apr 2025 08:33:34 +0000 (UTC) X-FDA: 83368273548.27.EA78375 Received: from mail-pj1-f73.google.com (mail-pj1-f73.google.com [209.85.216.73]) by imf22.hostedemail.com (Postfix) with ESMTP id 7B9BFC0009 for ; Thu, 24 Apr 2025 08:33:32 +0000 (UTC) Authentication-Results: imf22.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=FlpY06ES; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf22.hostedemail.com: domain of 3W_cJaAoKCLgafYlewsYljemmejc.amkjglsv-kkitYai.mpe@flex--changyuanl.bounces.google.com designates 209.85.216.73 as permitted sender) smtp.mailfrom=3W_cJaAoKCLgafYlewsYljemmejc.amkjglsv-kkitYai.mpe@flex--changyuanl.bounces.google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1745483612; a=rsa-sha256; cv=none; b=Glled5J/T1bhwncPTiTXaJHsv4jnb3vGkzy2sWFibmTmzLuZPm5tmgZo3GnJ+yTKX5vnzm Tu9xDP9wiuLPIa5rzqYehxtbAyF2QKy4wK5ANg+HBJ+xFLb+F5fK+jGwH6YU/A9rlAJXHJ nKJ/ZdPa+V2KhW8stD7TkeJzolfrGuU= ARC-Authentication-Results: i=1; imf22.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=FlpY06ES; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf22.hostedemail.com: domain of 3W_cJaAoKCLgafYlewsYljemmejc.amkjglsv-kkitYai.mpe@flex--changyuanl.bounces.google.com designates 209.85.216.73 as permitted sender) smtp.mailfrom=3W_cJaAoKCLgafYlewsYljemmejc.amkjglsv-kkitYai.mpe@flex--changyuanl.bounces.google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1745483612; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=l7VEVoe4uPheIEiVrtKTo6u/lqrEMNwyEPBA44TaHZQ=; b=MZzqXVcx6De5b9G5DM96D1PNONTYn+0iLmjiy8q1svX58/I84FEZ9x65HzigVEj5Hf2Cwq /HfuatZRSP0LOhye4nya4OgazJtES54i5ICqTS4GLHOREX7kwSJn13MrOZ25Syuv9jAobH XGNVFowBcitGUyyq9n9osKZOtUj4gzY= Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-2ff798e8c3bso631495a91.2 for ; Thu, 24 Apr 2025 01:33:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1745483611; x=1746088411; darn=kvack.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=l7VEVoe4uPheIEiVrtKTo6u/lqrEMNwyEPBA44TaHZQ=; b=FlpY06EScaOrUenpKR+fkE4/0at4CEvzzvUX6hq8s2NT4Yah2fmSiqGRNnHV/Aq5eu M+qj0fzus5fEGdRqX26JZhraStumZ2g5fI4mA5EzB11TmMsDhkWlGH/V7A31smBEy9JN ThHWx97h6enkO32Sc6e+CVmsfTwz4b3UFHjTmaauLjb79NzQjpDwzKfXQZyIVXIUyOuD 1xFXwKaLBgkoiBm+EhvXvPnJ1aX+NoiRP8cG9ThrZG0dDZeFayhCkPuJaM5SL3vwwjcL BtDPbFe00KMTosD7m4lr+SBf0vSj0wyNtAfllfWb9vwUaTt7BHUvZoWhCn8i9wNVsptH e3pQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745483611; x=1746088411; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=l7VEVoe4uPheIEiVrtKTo6u/lqrEMNwyEPBA44TaHZQ=; b=lDL3YJyoWzR4uomGMazTVrR0vBG9sqXORdJinhP9CpH3YXBH1DNv5JhCwJccj2AaBA 2wfi1mzLZu4jcoZNKtC8APibFpkAnJKqANkc5F1MQuUFLKPpCXnvCH5POV+AewztmZg2 IIuwUZ+7PNNH1p7bWaArUX0PNk07dmuS5WJ6aSLUQZKbxbsTGHVhzj4EHFK6DMk+hBg4 ZbAxIe4Rmjk0egqP+tkqC5Cf+6Mu+gP1009YgTcTDZim139UTLiWDOGMV7WnqDtwWq9q LVCvMfVPAxWMRkUjcduuPCqo/hdwphPXUP8z6lpmz14/ZHBe1448EH23inuMuQq78aXN 8tIQ== X-Forwarded-Encrypted: i=1; AJvYcCVDBrnZOSZUA5K1HtAjis9glUh3O7gXvrI8Y4nsOpGgfLvjpV474Nf5lkhQs1115sDQYyYECDrfMw==@kvack.org X-Gm-Message-State: AOJu0YyGcJ0+n5ZSi6g6zyO2E0Bt+ALwfpfk2qRUNAUM/UJms8FrGwOY RbkXMKDzSxx3qBX27PzinruLOyKXzByuSkkF4YJ+rmVHd6ZtNDlyLS0FOq6x1A9V3DSYMtYocim kCnAMt81YZ7Rao8UcTA== X-Google-Smtp-Source: AGHT+IGq6BVgM0IDW8HPijQuQX/f2OnqSI5HlIuEOLmb+TLuZj1I3Q9W3Aia7/3MIxDmrcexsVPCuLlX+IzwZqzj X-Received: from pjuw16.prod.google.com ([2002:a17:90a:d610:b0:2ff:6e58:8a03]) (user=changyuanl job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:584c:b0:305:5f28:2d5c with SMTP id 98e67ed59e1d1-309ed27d7b1mr3055392a91.15.1745483611167; Thu, 24 Apr 2025 01:33:31 -0700 (PDT) Date: Thu, 24 Apr 2025 01:32:58 -0700 In-Reply-To: Mime-Version: 1.0 References: X-Mailer: git-send-email 2.49.0.805.g082f7c87e0-goog Message-ID: <20250424083258.2228122-1-changyuanl@google.com> Subject: Re: [PATCH v6 12/14] memblock: add KHO support for reserve_mem From: Changyuan Lyu To: rppt@kernel.org, akpm@linux-foundation.org Cc: anthony.yznaga@oracle.com, arnd@arndb.de, ashish.kalra@amd.com, benh@kernel.crashing.org, bp@alien8.de, catalin.marinas@arm.com, changyuanl@google.com, corbet@lwn.net, dave.hansen@linux.intel.com, devicetree@vger.kernel.org, dwmw2@infradead.org, ebiederm@xmission.com, graf@amazon.com, hpa@zytor.com, jgowans@amazon.com, kexec@lists.infradead.org, krzk@kernel.org, linux-arm-kernel@lists.infradead.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, luto@kernel.org, mark.rutland@arm.com, mingo@redhat.com, pasha.tatashin@soleen.com, pbonzini@redhat.com, peterz@infradead.org, ptyadav@amazon.de, robh@kernel.org, rostedt@goodmis.org, saravanak@google.com, skinsburskii@linux.microsoft.com, tglx@linutronix.de, thomas.lendacky@amd.com, will@kernel.org, x86@kernel.org Content-Type: text/plain; charset="UTF-8" X-Rspamd-Queue-Id: 7B9BFC0009 X-Rspam-User: X-Rspamd-Server: rspam07 X-Stat-Signature: t5uwya3fx5mniep9pw8teu89n55tm43p X-HE-Tag: 1745483612-25878 X-HE-Meta: U2FsdGVkX1+vh+d7ts5I4SHwOaxQHuyHwOTsJj5QAm8xHrdWIZZyPy5MMEVcVVW6xg664297pXpl4AXZ8VSgw4kbCoQ9wqXXvJgVKYKjOPBKSgctLhPEDrznoZQNN7m5p4JZbt3psp5aFSSaj1HU4V3t1/LprQPNTC4LtEjvDlvgtpSrQ2sr0WmzZiOfdk+mYwPiJb03zwB92VXTrGk43vp7FRCzkX129CPDY81BLo8ZoDlHpW3IvazE1mNdLufzl3mTrcAkn2Yf/1Wcbl8282SUkK5gZJwnxkeyO5oo/Im5ea0zI4GQ3zAa0w2abkCoqLdrQF4CveegoWJTSryg4N5kMvoWVZvrWYQsflBj3Ge84M1Ll4dmrdC5vPPUlsJc7vX0KcCQ/IuowVnxOdt6+t5M6qmgshys+JJ02ntCfDbYAdcc4sReLXAIdRevg5ZwvbB9a5zPa9aewdJez2S+ic1IvCgj8QOIFbwUGgLNDhMVaA8polsnbOmJ3GAsO+YeaRL+rQAcSwwMkpcmvAcrSxSdzy1w0Itp29UfprXy6mNgOyl0T47aiaBxnIcbxzr9J6PJfA0VkImyersYpChbnS0XrD2kuQVG23dx/EIgbKC21gL9wY754rAslTP2As1fXE/qVIUMt0VawsIjcGh6jK8UUANlp36Hw3cgdte/xSjsuOgKqffGAsnfVoG7YrnpSSFTlky28zrfWv7KmDGBQxeAQ2VXwV7/BC0vKKtBhFPYN0OZ3MTVYl+0n358yAMNewfQy1vqW5rHBRUrsQMo0w5jdlXAdolfcnhul+AembQEKg8t4doJQRPLqlbhFsZy45ck/IKl0ckDfaSe4uhF2gNrqPlLc2mrJ/Hrvq6IVNcQI3oY0KlnPTt69LvHLdZ3prid5Tb3VjnlG8zxu43XWblprYXXQSX4rPRWa3Ro/1bmlcTVeaAZi6CuGyqGO3GjtGmHXBXXPOv76KwsPHP uawPxH/t 5/s+5rqPevSXAh2qiGQnxNHFZLLbPrDXS/d2rzK5ABLNM/8azns1BlIVFgKVUVdyQdBiK65E9DeszfQ54Z57hRXfZ+zf0eA1VSuyM1uiIaqB6xfhczHc8a4uFwqiiAhF8yILRjTikU3q3nP6YvJ8jGtKEfm1dx893Gar3NZI8vO1oDPXnS05f3ckYdvyZd5n4QuYsHXV6sr3y4Oj6+RMrbkLo+0XBwqaa4h7nb786oGvzqJrHXOT83+GRT70YVJzsXzgdOUJm5zrF++UN4q/dvypGV9UDmMgHM9Litz8yslpQzM0oMU+9vW8s4Ez28lAsn0K1l1ViZv0v00JfKm79N+MvK4VXulSQrK2OY/ALpAldCcwQ9CKLN1SOVnVlnJE/qWx4LtlEekfRSaWjb6wd8HPWv46Qb/S5uoCAongCzeWMb71ylnTHWjEI3Rgqe9Uc6e51v+RlPOk9VqznCQ98hVAF7swhbobV4mEXgmruh0YS+xb7XRMPSNOBWCQ7DnTwPCrbndet5R3FsFbZsy70zw++o9BYdXbFcuxkUvDcYKKiu0lQacsAaoxGi4cdFUH78IjlJNJc252NK3IZRW/TklvbkiGBlbRj8zxkJf0mK3hq8cOfg7yt/l8fjw1mL/awqmI7YPHpIp8HdmU= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: On Tue, Apr 22, 2025 at 16:31:19 +0300, Mike Rapoport wrote: > On Thu, Apr 10, 2025 at 10:37:43PM -0700, Changyuan Lyu wrote: > > [...] > > +static struct notifier_block reserve_mem_kho_nb = { > > + .notifier_call = reserve_mem_kho_notifier, > > +}; > > + > > +static void __init prepare_kho_fdt(void) > > +{ > > + int err = 0, i; > > + void *fdt; > > + > > + if (!reserved_mem_count) > > + return; > > It's better to have this check in reserve_mem_init() before registering kho > notifier. Sounds good! > > + > > + kho_fdt = alloc_page(GFP_KERNEL); > > + if (!kho_fdt) { > > + kho_fdt = ERR_PTR(-ENOMEM); > > Do we really care about having errno in kho_fdt? I think NULL would work > just fine. I was originally using ERR_PTR(-ENOMEM) and NULL to differentiate the following 2 cases: 1. prepare_kho_fdt() failed, 2. reserved_mem_count == 0, so no memblock FDT was created. Based on the suggestion above, since now we only register the notifier when reserved_mem_count == 0, case 2 shall never happen. So NULL is enough. > > + return; > > And actually, it makes sense to me to return -ENOMEM here and let > reserve_mem_init() bail out before registering notifier if fdt preparation > failed. > > That will save the checks in reserve_mem_kho_finalize() because it would be > called only if we have reserve_mem areas and fdt is ready. > Sounds good! > > + } > > + > > + fdt = page_to_virt(kho_fdt); > > + > > + err |= fdt_create(fdt, PAGE_SIZE); > > + err |= fdt_finish_reservemap(fdt); > > + > > + err |= fdt_begin_node(fdt, ""); > > + err |= fdt_property_string(fdt, "compatible", MEMBLOCK_KHO_NODE_COMPATIBLE); > > + for (i = 0; i < reserved_mem_count; i++) { > > + struct reserve_mem_table *map = &reserved_mem_table[i]; > > + > > + err |= fdt_begin_node(fdt, map->name); > > + err |= fdt_property_string(fdt, "compatible", RESERVE_MEM_KHO_NODE_COMPATIBLE); > > + err |= fdt_property(fdt, "start", &map->start, sizeof(map->start)); > > + err |= fdt_property(fdt, "size", &map->size, sizeof(map->size)); > > + err |= fdt_end_node(fdt); > > + } > > + err |= fdt_end_node(fdt); > > + > > + err |= fdt_finish(fdt); > > + > > + if (err) { > > + pr_err("failed to prepare memblock FDT for KHO: %d\n", err); > > + put_page(kho_fdt); > > + kho_fdt = ERR_PTR(-EINVAL); > > + } > > +} > > + > > +static int __init reserve_mem_init(void) > > +{ > > + if (!kho_is_enabled()) > > + return 0; > > + > > + prepare_kho_fdt(); > > + > > + return register_kho_notifier(&reserve_mem_kho_nb); > > +} > > +late_initcall(reserve_mem_init); > > + > > +static void *kho_fdt_in __initdata; > > + > > +static void *__init reserve_mem_kho_retrieve_fdt(void) > > +{ > > + phys_addr_t fdt_phys; > > + struct folio *fdt_folio; > > + void *fdt; > > + int err; > > + > > + err = kho_retrieve_subtree(MEMBLOCK_KHO_FDT, &fdt_phys); > > + if (err) { > > + if (err != -ENOENT) > > + pr_warn("failed to retrieve FDT '%s' from KHO: %d\n", > > + MEMBLOCK_KHO_FDT, err); > > + return ERR_PTR(err); > > Wouldn't just 'return NULL' work here? If we have multiple `reserve_mem` in the kernel command line, reserve_mem_kho_revive() will also be called multiple times. However reserve_mem_kho_retrieve_fdt() should only be called once. Here I am returning the ERR_PTR(err) such that if the first reserve_mem_kho_retrieve_fdt() failed, subsequent reserve_mem_kho_revive() can tell that reserve_mem_kho_retrieve_fdt() has failed so no need to try it again. If we return NULL here, subsequent reserve_mem_kho_revive() would find kho_fdt_in == NULL, and it could not tell whether it was due to previously failed reserve_mem_kho_retrieve_fdt(), or it is the first reserve_mem_kho_revive(). > > + } > > + > > + fdt_folio = kho_restore_folio(fdt_phys); > > + if (!fdt_folio) { > > + pr_warn("failed to restore memblock KHO FDT (0x%llx)\n", fdt_phys); > > + return ERR_PTR(-EFAULT); > > + } > > + > > + fdt = page_to_virt(folio_page(fdt_folio, 0)); > > fdt = folio_address(folio); Fixed. > > + > > + err = fdt_node_check_compatible(fdt, 0, MEMBLOCK_KHO_NODE_COMPATIBLE); > > + if (err) { > > + pr_warn("FDT '%s' is incompatible with '%s': %d\n", > > + MEMBLOCK_KHO_FDT, MEMBLOCK_KHO_NODE_COMPATIBLE, err); > > + return ERR_PTR(-EINVAL); > > + } > > + > > + return fdt; > > +} > > + > > +static bool __init reserve_mem_kho_revive(const char *name, phys_addr_t size, > > + phys_addr_t align) > > +{ > > + int err, len_start, len_size, offset; > > + const phys_addr_t *p_start, *p_size; > > + const void *fdt; > > + > > + if (!kho_fdt_in) > > + kho_fdt_in = reserve_mem_kho_retrieve_fdt(); > > I'd invert this and move to reserve_mem_kho_retrieve_fdt(), so there it > would be > > if (kho_fdt_in) > return kho_fdt_in; > > /* actually retrieve the fdt */ > kho_fdt_in = fdt; > > return fdt; > > and here > > fdt = reserve_mem_kho_retrieve_fdt(); > if (!fdt) > return false; Ah Ok, this is more elegant! > > + > > + if (IS_ERR(kho_fdt_in)) > > + return false; > > + > > + fdt = kho_fdt_in; > > + > >[...] > > -- > > 2.49.0.604.gff1f9ca942-goog > > > > -- > Sincerely yours, > Mike. Best, Changyuan ---- 8< ---- >From 7ad4379062aa9709d3702bfc53d237d0c1a4e326 Mon Sep 17 00:00:00 2001 From: Changyuan Lyu Date: Thu, 24 Apr 2025 01:10:24 -0700 Subject: [PATCH] fixup! memblock: add KHO support for reserve_mem This patch includes the suggested changes from https://lore.kernel.org/lkml/aAeaJ2iqkrv_ffhT@kernel.org/ and can be squashed with "memblock: add KHO support for reserve_mem". Fixes: 2e257a656639 ("memblock: add KHO support for reserve_mem") Suggested-by: Mike Rapoport (Microsoft) Signed-off-by: Changyuan Lyu --- mm/memblock.c | 69 +++++++++++++++++++++++++-------------------------- 1 file changed, 34 insertions(+), 35 deletions(-) diff --git a/mm/memblock.c b/mm/memblock.c index 3571a859f2fe1..d38a72f07ea0c 100644 --- a/mm/memblock.c +++ b/mm/memblock.c @@ -2490,15 +2490,6 @@ static int reserve_mem_kho_finalize(struct kho_serialization *ser) { int err = 0, i; - if (!reserved_mem_count) - return NOTIFY_DONE; - - if (IS_ERR(kho_fdt)) { - err = PTR_ERR(kho_fdt); - pr_err("memblock FDT was not prepared successfully: %d\n", err); - return notifier_from_errno(err); - } - for (i = 0; i < reserved_mem_count; i++) { struct reserve_mem_table *map = &reserved_mem_table[i]; @@ -2528,19 +2519,14 @@ static struct notifier_block reserve_mem_kho_nb = { .notifier_call = reserve_mem_kho_notifier, }; -static void __init prepare_kho_fdt(void) +static int __init prepare_kho_fdt(void) { int err = 0, i; void *fdt; - if (!reserved_mem_count) - return; - kho_fdt = alloc_page(GFP_KERNEL); - if (!kho_fdt) { - kho_fdt = ERR_PTR(-ENOMEM); - return; - } + if (!kho_fdt) + return -ENOMEM; fdt = page_to_virt(kho_fdt); @@ -2565,18 +2551,30 @@ static void __init prepare_kho_fdt(void) if (err) { pr_err("failed to prepare memblock FDT for KHO: %d\n", err); put_page(kho_fdt); - kho_fdt = ERR_PTR(-EINVAL); + kho_fdt = NULL; } + + return err; } static int __init reserve_mem_init(void) { - if (!kho_is_enabled()) + int err; + + if (!kho_is_enabled() || !reserved_mem_count) return 0; - prepare_kho_fdt(); + err = prepare_kho_fdt(); + if (err) + return err; + + err = register_kho_notifier(&reserve_mem_kho_nb); + if (err) { + put_page(kho_fdt); + kho_fdt = NULL; + } - return register_kho_notifier(&reserve_mem_kho_nb); + return err; } late_initcall(reserve_mem_init); @@ -2586,33 +2584,38 @@ static void *__init reserve_mem_kho_retrieve_fdt(void) { phys_addr_t fdt_phys; struct folio *fdt_folio; - void *fdt; int err; + if (kho_fdt_in) + return kho_fdt_in; + err = kho_retrieve_subtree(MEMBLOCK_KHO_FDT, &fdt_phys); if (err) { if (err != -ENOENT) pr_warn("failed to retrieve FDT '%s' from KHO: %d\n", MEMBLOCK_KHO_FDT, err); - return ERR_PTR(err); + goto out; } fdt_folio = kho_restore_folio(fdt_phys); if (!fdt_folio) { pr_warn("failed to restore memblock KHO FDT (0x%llx)\n", fdt_phys); - return ERR_PTR(-EFAULT); + err = -EFAULT; + goto out; } - fdt = page_to_virt(folio_page(fdt_folio, 0)); + kho_fdt_in = folio_address(fdt_folio); - err = fdt_node_check_compatible(fdt, 0, MEMBLOCK_KHO_NODE_COMPATIBLE); + err = fdt_node_check_compatible(kho_fdt_in, 0, MEMBLOCK_KHO_NODE_COMPATIBLE); if (err) { pr_warn("FDT '%s' is incompatible with '%s': %d\n", MEMBLOCK_KHO_FDT, MEMBLOCK_KHO_NODE_COMPATIBLE, err); - return ERR_PTR(-EINVAL); + err = -EFAULT; } - - return fdt; +out: + if (err) + kho_fdt_in = ERR_PTR(err); + return kho_fdt_in; } static bool __init reserve_mem_kho_revive(const char *name, phys_addr_t size, @@ -2622,14 +2625,10 @@ static bool __init reserve_mem_kho_revive(const char *name, phys_addr_t size, const phys_addr_t *p_start, *p_size; const void *fdt; - if (!kho_fdt_in) - kho_fdt_in = reserve_mem_kho_retrieve_fdt(); - - if (IS_ERR(kho_fdt_in)) + fdt = reserve_mem_kho_retrieve_fdt(); + if (IS_ERR(fdt)) return false; - fdt = kho_fdt_in; - offset = fdt_subnode_offset(fdt, 0, name); if (offset < 0) { pr_warn("FDT '%s' has no child '%s': %d\n", -- 2.49.0.805.g082f7c87e0-goog