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 8DBF8C36014 for ; Tue, 1 Apr 2025 11:33:38 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 44277280003; Tue, 1 Apr 2025 07:33:37 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 3A398280001; Tue, 1 Apr 2025 07:33:37 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 2451C280003; Tue, 1 Apr 2025 07:33:37 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id 03516280001 for ; Tue, 1 Apr 2025 07:33:36 -0400 (EDT) Received: from smtpin19.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 4EF7F1A1127 for ; Tue, 1 Apr 2025 11:33:37 +0000 (UTC) X-FDA: 83285264874.19.E55A979 Received: from nyc.source.kernel.org (nyc.source.kernel.org [147.75.193.91]) by imf10.hostedemail.com (Postfix) with ESMTP id 9911DC000F for ; Tue, 1 Apr 2025 11:33:35 +0000 (UTC) Authentication-Results: imf10.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=kQ7+TlbZ; spf=pass (imf10.hostedemail.com: domain of rppt@kernel.org designates 147.75.193.91 as permitted sender) smtp.mailfrom=rppt@kernel.org; dmarc=pass (policy=quarantine) header.from=kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1743507215; 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=wbVch+zHYOCndBgA1cY7MQ4Zoe58gTWuQcTyIG25cIk=; b=0A25a4ai+D0Uq3T49SXnlV61/UAPVKHDoVruArvmyQ+FBCh1FRfa4Qz8PwqiFj2MIbVk3p SCV9zqUP1DxKHwwdxuX5Tox5+92kfHNUcZjOkR6iB3EKhU54SMpNCB75Jz5J6xWl5JK7zu bVr2uMcVm13Pv0bGAFQoTwCGyb2a0zI= ARC-Authentication-Results: i=1; imf10.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=kQ7+TlbZ; spf=pass (imf10.hostedemail.com: domain of rppt@kernel.org designates 147.75.193.91 as permitted sender) smtp.mailfrom=rppt@kernel.org; dmarc=pass (policy=quarantine) header.from=kernel.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1743507215; a=rsa-sha256; cv=none; b=K9mHOv3vTUw7sZSQJV5vkYVe/S2YA+telgbUVazjo8xulpRiOS6HwQ2WHm3brV2ro/fbjI 2OUw+E1Xgo3Qm8otxI71b9iSjV1U1J/t2CrL9b/Ddgo//s4Uq4ehBsUf9SnACnZ4fYTfHN NRUFXP1orq/ioII19DFb7XScbo/G/WE= Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by nyc.source.kernel.org (Postfix) with ESMTP id 20CD8A44665; Tue, 1 Apr 2025 11:28:06 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id D1D89C4CEE4; Tue, 1 Apr 2025 11:33:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1743507214; bh=MSiUoVdDeD/owNol8s9zGlBrDOxClJLf4FDx5m/hEsU=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=kQ7+TlbZFGday6F66wCc6Mj8FCsVOgzRf3x/EBAEeFRwGpJMFImo4y+kbZrIow662 ta53p8FR4siSwV0A+kRdo9nX82WVlFPI/6QS5KPCe7b8wrCiVlhpZAsKX95vqxrS1I O6QuwcWWBQ9je8KrhEJNr268w2jvLZgKO/ASMrsjB0FSMA957/ULchEGwkawZwGKzJ JQbPLAmiGEPDKTF2NwWVGuXvoKl0OudXGBO0QH6TyB59bmMLAcHd7DJT69km6gnaQK LLSkabpmai4IP0/hzPWvudn4o9K+ZHbx6+OEnKlP4v3ITB3Y1F7a74aydHecpONRus 6qlDxiICUnX+Q== Date: Tue, 1 Apr 2025 14:33:26 +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: [PATCH v4 2/4] memblock: update initialization of reserved pages Message-ID: References: <20210511100550.28178-1-rppt@kernel.org> <20210511100550.28178-3-rppt@kernel.org> <9f33c0b4517eaf5f36c515b92bdcb6170a4a576a.camel@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: X-Rspam-User: X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: 9911DC000F X-Stat-Signature: 99j3ii938f4qtjen1cf5w9eoefoqyrmc X-HE-Tag: 1743507215-399968 X-HE-Meta: U2FsdGVkX1+KnN6Y24XFTb/iEPKuXkzu813PCCe64wk0JAcHTEoKStNa9CrG5HVaWKtAvb1DkCTqYiOnoCf00orEX03F7R11bIqsT6TEqAFK8aHZHALOa2vpQ0cxD2hFfvqWcIWsGk9wqm3YoZnFPdfarmCgN9Gh0UwdApladd+JBs4vWNuXtnROPoNyEC3JFRgCK1LmVESUmKp3B5n1G8dOcj+AU/p7OE6Wa4mCKBdwePFEFTljYf54hx2OBbpTGlWnCiAdOZvcGHoHZrmwIxyVT3v5mZdE16VEErhmT94fAaqjSTtJcLqURn4LVoc8u35YzF7j7VcPXYCOVfEZKiDTytFvC54oS/Qwbj0acYN4PqBWipQHt38HogIM4co/0lWlTcCQZNyeszcexFRJSmOCWfCPgLqGRLX6qc8vPHgtW3oy0wmMlThw/U6GkGNHI/5h7ND+bpWG83FARcX8e6FtjMKL8KErrwki8GEC8GJt3HtQekwig/2FW77ttWfUj9MIQm6FMNdbtYmeAFIRBgA+SRKxWQpKZgJh6IvIvnR3nPYBLH52wbI6aAN/t9ttTRR7fGt/YzZkDnm6O/NmVhuao3teRffwpVt4+WjFiVN6HEM/CtNyGdOg6bP7pGMNGyeNvKJ+7hicCFd58RxiLQaDkLRF3oxJyFPZwjiymsOoC4qNO60zzyLhYvDL7N4jHDwYYB5Cp2a88os2b2PmqmJfqRKGqW0CI1D/PTCjyjMn/MglrrDeLve5Ki45QU3EZVHt+4ymO3yaGJyhciwK/eQVCeqAAjZl3cBYhLGCfI/8E0LCS9Ei5pXDSwakQSQwmcAbn7ZtKVpRzu3BqtFCFz3sPGX3C/nc2XGMi4pwb7EilIu8AMgD8g3wYwXAYi5ZMte2celqxjM5dvOUS5KF19GgMsIa0fiF5FMyIfShDadQQoqeSD/G7glwiSXDkUxW9WhUIZXfiCDjRmu3KSe Egc8558j Fz/tzKorcvUuEronxVepEej4DpSOqfT0yJWVljI97XVN9bSWHDhYWJK5zcQlFL0hn804Xssri7i+vaO2dKflr/XUrkeQtTECtlNm6ZxrPft2ojRHVSM4GzAZWNRd87smKOEN4+2br2pUKVRyWJYHw3/o8wO/Z1txjvs4rLpbewRQIlO8aMKJ5eYvHYbVzm9tnFpaQyyMxw7OFn/fy5d0StApsw/pKp5m0VT00aotHnGnnvHM+mfV1uMk1FPpJd/6F0i5z7ETNLaZ+av82a8RVgZhcBQ== 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 Mon, Mar 31, 2025 at 04:13:56PM +0100, David Woodhouse wrote: > On Mon, 2025-03-31 at 17:50 +0300, Mike Rapoport wrote: > > On Mon, Mar 31, 2025 at 01:50:33PM +0100, David Woodhouse wrote: > > > On Tue, 2021-05-11 at 13:05 +0300, Mike Rapoport wrote: > > > > > > On platforms with large NOMAP regions (e.g. which are actually reserved > > > for guest memory to keep it out of the Linux address map and allow for > > > kexec-based live update of the hypervisor), this pointless loop ends up > > > taking a significant amount of time which is visible as guest steal > > > time during the live update. > > > > > > Can reserve_bootmem_region() skip the loop *completely* if no PFN in > > > the range from start to end is valid? Or tweak the loop itself to have > > > an 'else' case which skips to the next valid PFN? Something like > > > > > >  for(...) { > > >     if (pfn_valid(start_pfn)) { > > >        ... > > >     } else { > > >        start_pfn = next_valid_pfn(start_pfn); > > >     } > > >  } > > > > My understanding is that you have large reserved NOMAP ranges that don't > > appear as memory at all, so no memory map for them is created and so > > pfn_valid() is false for pfns in those ranges. > > > > If this is the case one way indeed would be to make > > reserve_bootmem_region() skip ranges with no valid pfns. > > > > Another way could be to memblock_reserved_mark_noinit() such ranges and > > then reserve_bootmem_region() won't even get called, but that would require > > firmware to pass that information somehow. > > I was thinking along these lines (not even build tested)... > > I don't much like the (unsigned long)-1 part. I might make the helper > 'static inline bool first_valid_pfn (unsigned long *pfn)' and return > success or failure. But that's an implementation detail. > > index 6d1fb6162ac1..edd27ba3e908 100644 > --- a/include/asm-generic/memory_model.h > +++ b/include/asm-generic/memory_model.h > @@ -29,8 +29,43 @@ static inline int pfn_valid(unsigned long pfn) > return pfn >= pfn_offset && (pfn - pfn_offset) < max_mapnr; > } > #define pfn_valid pfn_valid > + > +static inline unsigned long first_valid_pfn(unsigned long pfn) > +{ > + /* avoid include hell */ > + extern unsigned long max_mapnr; > + unsigned long pfn_offset = ARCH_PFN_OFFSET; > + > + if (pfn < pfn_offset) > + return pfn_offset; > + > + if ((pfn - pfn_offset) < max_mapnr) > + return pfn; > + > + return (unsigned long)(-1); > +} This seems about right for FLATMEM. For SPARSEMEM it would be something along these lines (I kept dubious -1): static inline unsigned long first_valid_pfn(unsigned long pfn) { unsigned long nr = pfn_to_section_nr(pfn); do { if (pfn_valid(pfn)) return pfn; pfn = section_nr_to_pfn(nr++); } while (nr < NR_MEM_SECTIONS); return (unsigned long)-1; } -- Sincerely yours, Mike.