From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 145AD1B87C0 for ; Wed, 18 Mar 2026 09:16:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773825419; cv=none; b=k1NYAtCy3Lqv0P+sjN3N8KWoMXJ0uqFGItIV+bpKueC0TYzzYp1pGQX77EpXrGVinqRm/hcBINcYSRsYOxi1GQt/3xZY8lbolfkYC41ILOZLNQ5KwgDUD8DxPJCVSb1Kzg3o9NPzS1ANLmXEsgW2So0ZhcFdWV4gq9T+Tlqm1R8= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773825419; c=relaxed/simple; bh=xreC6OjhR8b2vuZLjpAzaLuVTmeRPkmKaKfrFoVsz/k=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=grbDL/bHGKwWBmQMgbUBHR1dKGeQ+RqpzWwZ+DTlN16rpCjSJBMOpgoe3Xnpm9MZdctypQfJbxvr1Cz3bTZjPFRQNcmpB4RDxbFvg0Bx/FqAgvuuxdNkS7DF1ReefOF7h34qyZ63Vy2Au7AX01JcI3ekmjcDkai4CmAfOzmp+Ss= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=SatqFpHz; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="SatqFpHz" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 5C1BAC19421; Wed, 18 Mar 2026 09:16:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1773825418; bh=xreC6OjhR8b2vuZLjpAzaLuVTmeRPkmKaKfrFoVsz/k=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=SatqFpHz9cPpL4L9ndUa2Q6S/y7v2dDfhqXQV+g3eARqBCjHhO9MFCQ2P55gjUWul g7zwGiodabII84x0E11Xosw6CTV4bb/yzmzS/LGXeM2GWyyc8SagTIXrqGbTEVPNfx IU9qETigMDz7cl8RW6taGT8IXfs5eO66iraSElrf/8a4PVuBHBUZV4jCgsV1n8+8M1 eC5AWdLXkpaxYdtzqWW2wPvCKfZpCYxkRmLSPOkuWjmzSVdGYSFeUmX5sZem/RgdVj ZQCWpMv0zTq6MuG1sMxKK0zzaxCIvICxv9NQzoDIxUXWgCufqjn/qggVhXmbxGiczg mJ+i5r0WZjRwQ== Date: Wed, 18 Mar 2026 11:16:51 +0200 From: Mike Rapoport To: Michal Clapinski Cc: Evangelos Petrongonas , Pasha Tatashin , Pratyush Yadav , Alexander Graf , Samiullah Khawaja , kexec@lists.infradead.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, Andrew Morton Subject: Re: [PATCH v7 1/3] kho: make kho_scratch_overlap usable outside debugging Message-ID: References: <20260317141534.815634-1-mclapinski@google.com> <20260317141534.815634-2-mclapinski@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20260317141534.815634-2-mclapinski@google.com> Hi Michal, On Tue, Mar 17, 2026 at 03:15:32PM +0100, Michal Clapinski wrote: > Also return false if kho_scratch is NULL. > > Signed-off-by: Michal Clapinski > --- > include/linux/kexec_handover.h | 6 +++++ > kernel/liveupdate/Makefile | 1 - > kernel/liveupdate/kexec_handover.c | 28 ++++++++++++++++++--- > kernel/liveupdate/kexec_handover_debug.c | 25 ------------------ > kernel/liveupdate/kexec_handover_internal.h | 7 ++++-- > 5 files changed, 35 insertions(+), 32 deletions(-) > delete mode 100644 kernel/liveupdate/kexec_handover_debug.c > > diff --git a/include/linux/kexec_handover.h b/include/linux/kexec_handover.h > index ac4129d1d741..6a0e572c3adc 100644 > --- a/include/linux/kexec_handover.h > +++ b/include/linux/kexec_handover.h > @@ -35,6 +35,7 @@ void *kho_restore_vmalloc(const struct kho_vmalloc *preservation); > int kho_add_subtree(const char *name, void *fdt); > void kho_remove_subtree(void *fdt); > int kho_retrieve_subtree(const char *name, phys_addr_t *phys); > +bool kho_scratch_overlap(phys_addr_t phys, size_t size); > > void kho_memory_init(void); > > @@ -109,6 +110,11 @@ static inline int kho_retrieve_subtree(const char *name, phys_addr_t *phys) > return -EOPNOTSUPP; > } > > +static inline bool kho_scratch_overlap(phys_addr_t phys, size_t size) > +{ > + return false; > +} > + > static inline void kho_memory_init(void) { } > > static inline void kho_populate(phys_addr_t fdt_phys, u64 fdt_len, > diff --git a/kernel/liveupdate/Makefile b/kernel/liveupdate/Makefile > index d2f779cbe279..dc352839ccf0 100644 > --- a/kernel/liveupdate/Makefile > +++ b/kernel/liveupdate/Makefile > @@ -7,7 +7,6 @@ luo-y := \ > luo_session.o > > obj-$(CONFIG_KEXEC_HANDOVER) += kexec_handover.o > -obj-$(CONFIG_KEXEC_HANDOVER_DEBUG) += kexec_handover_debug.o > obj-$(CONFIG_KEXEC_HANDOVER_DEBUGFS) += kexec_handover_debugfs.o > > obj-$(CONFIG_LIVEUPDATE) += luo.o > diff --git a/kernel/liveupdate/kexec_handover.c b/kernel/liveupdate/kexec_handover.c > index 532f455c5d4f..c9b982372d6e 100644 > --- a/kernel/liveupdate/kexec_handover.c > +++ b/kernel/liveupdate/kexec_handover.c > @@ -820,7 +820,8 @@ int kho_preserve_folio(struct folio *folio) > const unsigned long pfn = folio_pfn(folio); > const unsigned int order = folio_order(folio); > > - if (WARN_ON(kho_scratch_overlap(pfn << PAGE_SHIFT, PAGE_SIZE << order))) > + if (WARN_ON(kho_scratch_overlap_debug(pfn << PAGE_SHIFT, > + PAGE_SIZE << order))) Can't say I'm fond of kho_scratch_overlap_debug(). How about we make it if (IS_ENABLED(CONFIG_KEXEC_HANDOVER_DEBUG) && WARN_ON(kho_scratch_overlap(...)) > return -EINVAL; > > return kho_radix_add_page(tree, pfn, order); > @@ -864,10 +865,9 @@ int kho_preserve_pages(struct page *page, unsigned long nr_pages) > unsigned long failed_pfn = 0; > int err = 0; > > - if (WARN_ON(kho_scratch_overlap(start_pfn << PAGE_SHIFT, > - nr_pages << PAGE_SHIFT))) { > + if (WARN_ON(kho_scratch_overlap_debug(start_pfn << PAGE_SHIFT, > + nr_pages << PAGE_SHIFT))) Ditto. > return -EINVAL; > - } > > while (pfn < end_pfn) { > unsigned int order = > @@ -1327,6 +1327,26 @@ int kho_retrieve_subtree(const char *name, phys_addr_t *phys) > } > EXPORT_SYMBOL_GPL(kho_retrieve_subtree); > > +bool kho_scratch_overlap(phys_addr_t phys, size_t size) > +{ > + phys_addr_t scratch_start, scratch_end; > + unsigned int i; > + > + if (!kho_scratch) > + return false; > + > + for (i = 0; i < kho_scratch_cnt; i++) { > + scratch_start = kho_scratch[i].addr; > + scratch_end = kho_scratch[i].addr + kho_scratch[i].size; > + > + if (phys < scratch_end && (phys + size) > scratch_start) > + return true; > + } > + > + return false; > +} > +EXPORT_SYMBOL_GPL(kho_scratch_overlap); I don't think we need to EXPORT_SYMBOL() it and it'd better grouped with scratch allocation functions. > + > static int __init kho_mem_retrieve(const void *fdt) > { > struct kho_radix_tree tree; -- Sincerely yours, Mike.