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 AB0C7C3600C for ; Thu, 3 Apr 2025 06:19:27 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 8B524280003; Thu, 3 Apr 2025 02:19:25 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 83A96280001; Thu, 3 Apr 2025 02:19:25 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 6DCF9280003; Thu, 3 Apr 2025 02:19:25 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id 503E8280001 for ; Thu, 3 Apr 2025 02:19:25 -0400 (EDT) Received: from smtpin26.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 32296121902 for ; Thu, 3 Apr 2025 06:19:26 +0000 (UTC) X-FDA: 83291730732.26.4CE6E4D Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by imf24.hostedemail.com (Postfix) with ESMTP id 7FBC8180004 for ; Thu, 3 Apr 2025 06:19:24 +0000 (UTC) Authentication-Results: imf24.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=iSwd04mc; dmarc=pass (policy=quarantine) header.from=kernel.org; spf=pass (imf24.hostedemail.com: domain of rppt@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=rppt@kernel.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1743661164; a=rsa-sha256; cv=none; b=oBFGXHxqLxFqBpaSK+RjeoYuUsMw/IC1fOLhIhi7hU4xr1ElmtDnfF+3q8bNqlCnZ3DTYT 5ZgJgwPPQSm0QcG3sWy7G6et6wFgUhudXov6u26u6P+g+OV0OblFbCPmY/AmqLiYY6Af8m MNuxjXf21x4+bF6VzIqkM9kvQO1/HUQ= ARC-Authentication-Results: i=1; imf24.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=iSwd04mc; dmarc=pass (policy=quarantine) header.from=kernel.org; spf=pass (imf24.hostedemail.com: domain of rppt@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=rppt@kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1743661164; 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:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=mVGik8tUK2Eo3+gGsUH9By9lsTNY8cPP8vnZtrKoVQQ=; b=VM9eTD7jzgXFnBRpV9c7eH7Lt1tsYrP0+LsMRhJncj4+TjrHmgwU+V+Emv7vPOIIF06s46 ojdZkUnWuc7VKZIRRqSxj1PiKuo99GYt3//xBi1kw58ghtUpaduy5OqYsZMdqYTpV7ahyU Je9n54ZOC0MwZEHt2/SUwkb2VFmVlxs= Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by dfw.source.kernel.org (Postfix) with ESMTP id 664735C6819; Thu, 3 Apr 2025 06:17:06 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3F9FDC4CEE3; Thu, 3 Apr 2025 06:19:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1743661163; bh=EvqXwivD/+vI4n0GdMLSQHkVGzb6oXmJqRJHBqhD9eQ=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=iSwd04mc4mf3SFl87S8YfHk42W4p+Z7xmeooLWnrflOXK3KgEEdGCJjqFg6C+7FWA rjXR8FsGRCYXPG1nUtRssXOcN1wCP0bLvvYjuqsZUM827E40OKvMStFAWmi4A85eqw B86uFJePNuxUC21qsUt9Udc2UHKKc04FXRP5PrRVxy7gKq0gAJkkMztGKF8PS91wNp q6LaJPUv9yABlUZ+Xg41OELKX+4ub4ij4DFW2q2RIlm6z8wobIL4etvXXqkz7GezWc YAqVyyNoNpXti/2lnFNt8YJ/WhUBuVUKq6HhmnBw8dMzWbNmU784nthcSk5MuzQkbL g7A6ZYZRml9Mg== Date: Thu, 3 Apr 2025 09:19:14 +0300 From: Mike Rapoport To: David Woodhouse Cc: Andrew Morton , "Sauerwein, David" , Anshuman Khandual , Ard Biesheuvel , Catalin Marinas , David Hildenbrand , Marc Zyngier , Mark Rutland , Mike Rapoport , Will Deacon , kvmarm@lists.cs.columbia.edu, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: Re: [RFC PATCH 1/3] mm: Introduce for_each_valid_pfn() and use it from reserve_bootmem_region() Message-ID: References: <20250402201841.3245371-1-dwmw2@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20250402201841.3245371-1-dwmw2@infradead.org> X-Rspamd-Queue-Id: 7FBC8180004 X-Stat-Signature: npdzxipdz4ipwkc8beunmikjz83bpohb X-Rspam-User: X-Rspamd-Server: rspam06 X-HE-Tag: 1743661164-884779 X-HE-Meta: U2FsdGVkX1+4RlWsoKp7DYH4TxXZ/5WBlReBaDR0KN+bK2UBZj6EGMTL5977vCEm8aMh3aivJLhiGjwp1D9x8X0dL/tWx/D6IAKZmnR7SavL1VFzK16CcUGrYj4qmzSZd1p6bO1+JQdOxxOk0jAh5/E+btfoB4Rlqphcr8SfemlE+0qGB3IoQUSQYIofWxyGJaTpoU8VmDclS6nIXJdj3OkxB+wRsRYjSd+jiax5zDUugACasVUCZc8qFctDpl+i0rHhRX3SHo26Kl5OMtcvQ0XhtreCN05rzXyixHOoc+OimotRpFXO19q86U/uXUv+97Pkb2zfZJAAcQnpYEdAmyBbJ+5iK0K7+sWQJcdSNPZA4K1uUz0P73fGDP2LjR/leJMtOavNzjFJ6tVtHxXTna8dRkIbV1oYcPeoM9Kq+IEAEeyph673nlF9ZoAxJK+n0WMuXjwE99vXkfSGZwZHtQhGy+U8TBedtgXPgOv9jA0XtaPQb2W/3JwteRIXU3ZNo0717N9loQANTHlFk5PtQD0qUHliuai2YuuAjCmJiPdA7HJKZ/eiBj8yKwYCd4uuPFiB1Q/upV22aprF41jI2Z6+7UnxMVtT8iLh1MEV/kHH6Mb4IBNa79T7LDVQ5/gtQB1CeVk8+Fqwo2ieQDCGY5Znn5KiLnjE6Ma4R1Io2fLWQ28qbsUeNKmeJpiZfrk6heePwQ6Ro4sPkXsnI0m92C7OgBbhXvSHIdID4ZdnkpbNYez1/XSSu59M9gOEDH6YE4Rcaibtc3R9McoThcAGfK5/rISL3+41An/2Mn1uexUKNL2+iuA6JoBTpAeq0sGhS1HMDrNH1Y63HguWc7nui2e8WUt0cotjKXEuksnnqEIg4naeJhlKjIOrErWn7N7LtGTJrv0tYSUKHh2nFEFhhgLu+7lQNv4srF5NWWTssn5DbxJcNy4cQqV8U+e4JlvP1qVVklQSOiEeO6HhpqM 1n8UtRuJ 2hSBGHx7hYfXxJoUqKkkXzAL/owYRwtJ0jAhciwLFj8FOKTxko9eUqzROGhZuSEmF74dxkNLfoO1fF5tacI8YdTTndNpFOtnbQDD7emCI7xykvAXnG7XddQ2Su8OmIjiaVJWQLR1VXGHWWC+RNyZIiNEYXSs5etPJ9mUtJ9+ZjYC3OHDND33RcbzH2kRbgu5v0uXgFsMgcPmxTc4LcvTDSck1cEkBaIjwDYRpjqZDcaai1PMMgtUbr2BmxPHubY592RTb1nc/hMKuf68B/9nqQ638c/gc2cad55W9mxL4nm4cEay3bFs2DmFK3SsEq40ivvtrnEjc8AEDrmj/SKsiFCv2NRMtbhaPZGNRPMjih+/RtyX4VUz064pGDQ== 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 Wed, Apr 02, 2025 at 09:18:39PM +0100, David Woodhouse wrote: > From: David Woodhouse > > Especially since commit 9092d4f7a1f8 ("memblock: update initialization > of reserved pages"), the reserve_bootmem_region() function can spend a > significant amount of time iterating over every 4KiB PFN in a range, > calling pfn_valid() on each one, and ultimately doing absolutely nothing. > > On a platform used for virtualization, with large NOMAP regions that > eventually get used for guest RAM, this leads to a significant increase > in steal time experienced during kexec for a live update. > > Introduce for_each_valid_pfn() and use it from reserve_bootmem_region(). > This implementation is precisely the same naïve loop that the function > used to have, but subsequent commits will provide optimised versions > for FLATMEM and SPARSEMEM, and this version will remain for those > architectures which provide their own pfn_valid() implementation, > until/unless they also provide a matching for_each_valid_pfn(). > > Signed-off-by: David Woodhouse Reviewed-by: Mike Rapoport (Microsoft) > --- > include/linux/mmzone.h | 10 ++++++++++ > mm/mm_init.c | 23 ++++++++++------------- > 2 files changed, 20 insertions(+), 13 deletions(-) > > diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h > index 25e80b2ca7f4..32ecb5cadbaf 100644 > --- a/include/linux/mmzone.h > +++ b/include/linux/mmzone.h > @@ -2176,6 +2176,16 @@ void sparse_init(void); > #define subsection_map_init(_pfn, _nr_pages) do {} while (0) > #endif /* CONFIG_SPARSEMEM */ > > +/* > + * Fallback case for when the architecture provides its own pfn_valid() but > + * not a corresponding for_each_valid_pfn(). > + */ > +#ifndef for_each_valid_pfn > +#define for_each_valid_pfn(_pfn, _start_pfn, _end_pfn) \ > + for ((_pfn) = (_start_pfn); (_pfn) < (_end_pfn); (_pfn)++) \ > + if (pfn_valid(_pfn)) > +#endif > + > #endif /* !__GENERATING_BOUNDS.H */ > #endif /* !__ASSEMBLY__ */ > #endif /* _LINUX_MMZONE_H */ > diff --git a/mm/mm_init.c b/mm/mm_init.c > index a38a1909b407..7c699bad42ad 100644 > --- a/mm/mm_init.c > +++ b/mm/mm_init.c > @@ -777,22 +777,19 @@ static inline void init_deferred_page(unsigned long pfn, int nid) > void __meminit reserve_bootmem_region(phys_addr_t start, > phys_addr_t end, int nid) > { > - unsigned long start_pfn = PFN_DOWN(start); > - unsigned long end_pfn = PFN_UP(end); > + unsigned long pfn; > > - for (; start_pfn < end_pfn; start_pfn++) { > - if (pfn_valid(start_pfn)) { > - struct page *page = pfn_to_page(start_pfn); > + for_each_valid_pfn (pfn, PFN_DOWN(start), PFN_UP(end)) { > + struct page *page = pfn_to_page(pfn); > > - init_deferred_page(start_pfn, nid); > + init_deferred_page(pfn, nid); > > - /* > - * no need for atomic set_bit because the struct > - * page is not visible yet so nobody should > - * access it yet. > - */ > - __SetPageReserved(page); > - } > + /* > + * no need for atomic set_bit because the struct > + * page is not visible yet so nobody should > + * access it yet. > + */ > + __SetPageReserved(page); > } > } > > -- > 2.49.0 > -- Sincerely yours, Mike.