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 4D4FEC02198 for ; Tue, 18 Feb 2025 15:50:10 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id DFB59280148; Tue, 18 Feb 2025 10:50:09 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id D840428013C; Tue, 18 Feb 2025 10:50:09 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id BFE47280148; Tue, 18 Feb 2025 10:50:09 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 9D97C28013C for ; Tue, 18 Feb 2025 10:50:09 -0500 (EST) Received: from smtpin30.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 27A0CA0258 for ; Tue, 18 Feb 2025 15:50:09 +0000 (UTC) X-FDA: 83133501738.30.384DF3F Received: from mail-ej1-f42.google.com (mail-ej1-f42.google.com [209.85.218.42]) by imf16.hostedemail.com (Postfix) with ESMTP id 20DE4180002 for ; Tue, 18 Feb 2025 15:50:06 +0000 (UTC) Authentication-Results: imf16.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=HtZHsPTb; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf16.hostedemail.com: domain of richard.weiyang@gmail.com designates 209.85.218.42 as permitted sender) smtp.mailfrom=richard.weiyang@gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1739893807; a=rsa-sha256; cv=none; b=10o5DUsiIi6jqVXJyIaUBcFDLoXL8lciHMxp5vVhBsESW1tiI0ssFNOzQhx2pTbbjbsNjs pYudfKnX+hmC4Ve7U40XgvjvpGVpXPfsYS/1/vAAQPp+lg9GOrv3ITvGoAlCno4d7/K5Tq MC1NK+KNuEGIx9OciLRx4EAyBmmKjZM= ARC-Authentication-Results: i=1; imf16.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=HtZHsPTb; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf16.hostedemail.com: domain of richard.weiyang@gmail.com designates 209.85.218.42 as permitted sender) smtp.mailfrom=richard.weiyang@gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1739893807; h=from:from:sender:reply-to: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=mReLmHdUalr80UPhI614ZZFtZiFvIOnOjgDKsfY1PQg=; b=hrCUL92xsJOrtcKujVHFwPF58mflMNn9SMNCGo350XjVuJ4Eb5knBH4MT2nM5xBqyXaghF LWpQaeX87pyiCzS6hr/pOglind9RH4Pcyu0/5W/BL3ImnvfvV6HBRDrfpKvakHlRYY/eOV Hy2vVdrc2NjiBHd+VU0f2lOniJ28MZ4= Received: by mail-ej1-f42.google.com with SMTP id a640c23a62f3a-abadccdfe5aso705005466b.0 for ; Tue, 18 Feb 2025 07:50:06 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739893805; x=1740498605; darn=kvack.org; h=user-agent:in-reply-to:content-disposition:mime-version:references :reply-to:message-id:subject:cc:to:from:date:from:to:cc:subject:date :message-id:reply-to; bh=mReLmHdUalr80UPhI614ZZFtZiFvIOnOjgDKsfY1PQg=; b=HtZHsPTbXe97s3e6n7O+y5DGWxfytFyBgjlWS2LSVHZK1ZdGjRiIz1LcgBy+cNTRHE EUqabX9BnGcc1Rimel1jvfR4FUhbwLEIg0jgBky8wg/0bRXUB9nApGx9wb9eLUtwB112 JWAFdDRG465BQzBj3oRTx1iq12dYXI1FElEJrWsZDeeNL/ETYZmRn4Hc+LP+OjmXV2b/ 3o3Jvt4bw2/EyKStwoQalAf3jf+FSyGtT+IuGyvQvIxprBRGlf5cRb5Qgpt9FqVQtd6a 284TkOz/lgB9beyNCl3pcfjR7IdmXES3miHg6GIpyn3+CPf86x5RoMKVaT7oI9DnbVcC C0rw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739893805; x=1740498605; h=user-agent:in-reply-to:content-disposition:mime-version:references :reply-to:message-id:subject:cc:to:from:date:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=mReLmHdUalr80UPhI614ZZFtZiFvIOnOjgDKsfY1PQg=; b=MSgC3gH69GEQzIJWv4hmcO/7EH3STfuFogCo6glCL6KrOVMXUI8AwB70fTkkTppjZ2 wYVJBUFV0cH+u5qdw7pg8krj8zfDTahIdsufCFoB+/7XAlldssLcewY71SMNiFUBwH4Z GZ6mf7/hPNg/HIguQ05aH6Bd5o3KJoa+elvm6HLdwZkhS/dHfLUcgbxPTPKwcAWG2YQM DJsWjT2dRhkuKXYjtb6O1nPI6X7+xUK8gzG1no2A85WfKBZn3WqVQs+SejYmSuGPxMH6 EnMOpfQ7nbguWP291lpduKyWnoGfjqucKbr6sx9hibYw8s/xvGZMcq96Wd9HuUWZMCnm 6nrw== X-Forwarded-Encrypted: i=1; AJvYcCUUaRqeX6EPTZ0cxcpvA78/J9dAyZiCf+olCUiWsXuurMLNr1g+KL4GqiCeqsEa5KjazhiM7RMchg==@kvack.org X-Gm-Message-State: AOJu0YxZV5Cap1mjaIfSDSb9SMTAN6EOCjeQPlvGXipBMwcPjrxA33/t Kgv1U88IK3lluVkGV4IdZg1T5N+XD68/Pz7m7L3PSppcBkCLleVp X-Gm-Gg: ASbGnctbrzfY6aqlT24syOeQNufnxkrSAwOlQ2cDlZxKHRuXJzJSYaZ5wQuKYo6KCp9 F5OfjHJLjfeIotjcgIT0W4TTYHLYhIeE6N0iAaibfL8jOVQI1bIGSX+VQksUPJrtUyRntbY3gbi VqO7AAvgOZ3QtEB4ttz8QPmrBtunnq3k1r23Hm5R/VoseGqe+rT2Ys18Ti0siHQCmyBB1+Ks3Tq pTdaOde2YLiZPoyOcoRB/i7jRpd9FVgtmwU7G6Kd8sGXCxZdW42gF/CF6CvoLEn+udvYJgkoDEg 60miJqwkIRGW70Y= X-Google-Smtp-Source: AGHT+IHtAyydbfoXbx9zeo04VNjwSnQ27Knmz0ItYzncGEjZUASU18pITXXeMFFJlPuU/Bj7x5gW4g== X-Received: by 2002:a17:907:3d8e:b0:ab7:462f:647f with SMTP id a640c23a62f3a-abb70b35f1amr1476203766b.25.1739893805155; Tue, 18 Feb 2025 07:50:05 -0800 (PST) Received: from localhost ([185.92.221.13]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-abba002f790sm351966766b.164.2025.02.18.07.50.04 (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Tue, 18 Feb 2025 07:50:04 -0800 (PST) Date: Tue, 18 Feb 2025 15:50:04 +0000 From: Wei Yang To: Mike Rapoport Cc: linux-kernel@vger.kernel.org, Alexander Graf , Andrew Morton , Andy Lutomirski , Anthony Yznaga , Arnd Bergmann , Ashish Kalra , Benjamin Herrenschmidt , Borislav Petkov , Catalin Marinas , Dave Hansen , David Woodhouse , Eric Biederman , Ingo Molnar , James Gowans , Jonathan Corbet , Krzysztof Kozlowski , Mark Rutland , Paolo Bonzini , Pasha Tatashin , "H. Peter Anvin" , Peter Zijlstra , Pratyush Yadav , Rob Herring , Rob Herring , Saravana Kannan , Stanislav Kinsburskii , Steven Rostedt , Thomas Gleixner , Tom Lendacky , Usama Arif , Will Deacon , devicetree@vger.kernel.org, kexec@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-doc@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org Subject: Re: [PATCH v4 02/14] memblock: add MEMBLOCK_RSRV_KERN flag Message-ID: <20250218155004.n53fcuj2lrl5rxll@master> Reply-To: Wei Yang References: <20250206132754.2596694-1-rppt@kernel.org> <20250206132754.2596694-3-rppt@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20250206132754.2596694-3-rppt@kernel.org> User-Agent: NeoMutt/20170113 (1.7.2) X-Rspam-User: X-Rspamd-Queue-Id: 20DE4180002 X-Rspamd-Server: rspam12 X-Stat-Signature: mn5iejsr5c97ppsyeqzj766kpparfzmc X-HE-Tag: 1739893806-631775 X-HE-Meta: U2FsdGVkX1/bYOSDqzcztcbu3g4pQZz4khZ821/XFWDwLLwcm0FCETjcNVMTzn57R91u1gJUfS2CNr5q3yTQmQxldtKQVWSXq+kaaskIt+8wL31G4XjZ/ma2gtlZEMzU2Z23T5vAAv6ndTlwlYnDdJCNpoV1Etg1gnkiPjdZ+Rt0T2jPpJelL6+fOteWpYT7lv5oE8ZH5ewsQhltjODYINnxqcr9xezNt+GnACFbQNCVd0aN6j73PgeLYpRwediIjOMCAMwpqGceTDNOYwQ7055/C1Et7k9dp1ZxeXAzHeFcbzrikD7hHaPkrqL5i0KY8+k1FUsLn07NtumU34bjnnhcSlGMUX8xb1o2M/X+zXqwsrGD49PLFkf5qtQIMfNZ/4b0ryUdTLuxtpYDOh4TYNX9MoZQMhwm+1k8jaMDsDSpHait+y/fa9Immms9VpDIzTdWzmWLFUtTbx4ihJIhdDX7A4neYLfHjljK4dME9qDMamWX0YslTM+ZrqS5DFNd1fHHQ0bfLlLoU+PUmvUo/egU8A21tziFutByKQHBJqiB618dKRo6mUmmtZZXffEXIG6t/C6NIJ04TZNaHUyYggka2EBV7aDjKGkn17Q6fSaJwZWN1kmQ/M89EWkGiEXvc3+tK6ITUvQS1mCJza3//Wvj4Zf13Ag6vxif9eK5KBIa0okbcIZODo2OLxOG9tW7r7vrvmGV+72sPeiz5TC8d2hEv37iDD4GfMeNJfMIqtCx1t48RdObtJIt53VS13FSqVzZF4tpOFwfLAJS8fpC/LR+cxbpOCTezCvUG8AA3Vdc1/NdiNZBWbsA8DRi2sJrzbWlCgvahR0lleaS1XDJ/FXygjLvkn8R9/HYohZklUUw3EwNL0Z4hRR5HK4hCQw/Us06KfHj40IY3xTVC7zQwfp0FX94lMMdPfvqVycaNMror6P3TtbyAtLkrB5gYz69f5vNd0xW6mZUYbf61BU 4dTFY2b5 Mx/nMMzwW5zJwV46eUbIdZ+YTReEwglkpoopQBx3L7UsNVB6D+XVUwSAzIsb8vWNU6I35lvm6kb/lVhE2swNSGhFLR/4k+6XyfkUrsKJILBHjiLkmSrfC9Sy1pMmb3Vc41FNZI9Japn1iDlZGkZIWoLjNogDMLie+4aqXVHGmuXxFZYF+JM97HehkQENAjGwKIIKU8VIjuLV5SiAmcmfOkpyJ+CbU1TuFm+8/IZ8i0IqGxBWoEwmYPbHAA0onl8MUv9Pd7J0RZhvSGOq706R39V0IjG+dnizDymViOEL30hhccnXWpU5fiqHiKmdufFNNPqFGNkLy0LLse9gE98nC7xmVVJR3NzJE06sOz9dY8M1aANUt02jlN9ce3VJaUeVEM7kH6CDrBiDGuhiihrTvfaENbfaoI3OXQFYOksa5uaho5A3ft0srSPCdvl+23DsV0juR+kVgbNuRGkvtxhcrsJ1UH8zgbJtJfAKeCUkN6pJnS+Gqahx0x+/V2YOoiLD6xIcuMQCt/Yl9v/Vlo5JQ4TAC5UaSPsDqi4A/IolFRhFCGrNH/rbvXk7BTniOvgP/vNLDxVWv0Eo/PVwSolgDwkfU4xnlkpJFwsjZgo55pqSwvKU3GV2NGR5x02cNxlMMg7QLY4FMKXpP+NaXcppZdmC/NWMyIs24XsEIEp6AqiCFwfAlur+hgPCKm0JyM41cPkPFedjOgQ6Vre01S5Jf9NKhNX+xQwiWVrJj9DisuK3f5dAqzetGRDOMmg== 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 Thu, Feb 06, 2025 at 03:27:42PM +0200, Mike Rapoport wrote: >From: "Mike Rapoport (Microsoft)" > >to denote areas that were reserved for kernel use either directly with >memblock_reserve_kern() or via memblock allocations. > >Signed-off-by: Mike Rapoport (Microsoft) >--- > include/linux/memblock.h | 16 +++++++++++++++- > mm/memblock.c | 32 ++++++++++++++++++++++++-------- > 2 files changed, 39 insertions(+), 9 deletions(-) > >diff --git a/include/linux/memblock.h b/include/linux/memblock.h >index e79eb6ac516f..65e274550f5d 100644 >--- a/include/linux/memblock.h >+++ b/include/linux/memblock.h >@@ -50,6 +50,7 @@ enum memblock_flags { > MEMBLOCK_NOMAP = 0x4, /* don't add to kernel direct mapping */ > MEMBLOCK_DRIVER_MANAGED = 0x8, /* always detected via a driver */ > MEMBLOCK_RSRV_NOINIT = 0x10, /* don't initialize struct pages */ >+ MEMBLOCK_RSRV_KERN = 0x20, /* memory reserved for kernel use */ Above memblock_flags, there are comments on explaining those flags. Seems we miss it for MEMBLOCK_RSRV_KERN. > }; > > /** >@@ -116,7 +117,19 @@ int memblock_add_node(phys_addr_t base, phys_addr_t size, int nid, > int memblock_add(phys_addr_t base, phys_addr_t size); > int memblock_remove(phys_addr_t base, phys_addr_t size); > int memblock_phys_free(phys_addr_t base, phys_addr_t size); >-int memblock_reserve(phys_addr_t base, phys_addr_t size); >+int __memblock_reserve(phys_addr_t base, phys_addr_t size, int nid, >+ enum memblock_flags flags); >+ >+static __always_inline int memblock_reserve(phys_addr_t base, phys_addr_t size) >+{ >+ return __memblock_reserve(base, size, NUMA_NO_NODE, 0); ^ MEMBLOCK_NONE ? >+} >+ >+static __always_inline int memblock_reserve_kern(phys_addr_t base, phys_addr_t size) >+{ >+ return __memblock_reserve(base, size, NUMA_NO_NODE, MEMBLOCK_RSRV_KERN); >+} >+ > #ifdef CONFIG_HAVE_MEMBLOCK_PHYS_MAP > int memblock_physmem_add(phys_addr_t base, phys_addr_t size); > #endif >@@ -477,6 +490,7 @@ static inline __init_memblock bool memblock_bottom_up(void) > > phys_addr_t memblock_phys_mem_size(void); > phys_addr_t memblock_reserved_size(void); >+phys_addr_t memblock_reserved_kern_size(int nid); > unsigned long memblock_estimated_nr_free_pages(void); > phys_addr_t memblock_start_of_DRAM(void); > phys_addr_t memblock_end_of_DRAM(void); >diff --git a/mm/memblock.c b/mm/memblock.c >index 95af35fd1389..4c33baf4d97c 100644 >--- a/mm/memblock.c >+++ b/mm/memblock.c >@@ -491,7 +491,7 @@ static int __init_memblock memblock_double_array(struct memblock_type *type, > * needn't do it > */ > if (!use_slab) >- BUG_ON(memblock_reserve(addr, new_alloc_size)); >+ BUG_ON(memblock_reserve_kern(addr, new_alloc_size)); > > /* Update slab flag */ > *in_slab = use_slab; >@@ -641,7 +641,7 @@ static int __init_memblock memblock_add_range(struct memblock_type *type, > #ifdef CONFIG_NUMA > WARN_ON(nid != memblock_get_region_node(rgn)); > #endif >- WARN_ON(flags != rgn->flags); >+ WARN_ON(flags != MEMBLOCK_NONE && flags != rgn->flags); > nr_new++; > if (insert) { > if (start_rgn == -1) >@@ -901,14 +901,15 @@ int __init_memblock memblock_phys_free(phys_addr_t base, phys_addr_t size) > return memblock_remove_range(&memblock.reserved, base, size); > } > >-int __init_memblock memblock_reserve(phys_addr_t base, phys_addr_t size) >+int __init_memblock __memblock_reserve(phys_addr_t base, phys_addr_t size, >+ int nid, enum memblock_flags flags) > { > phys_addr_t end = base + size - 1; > >- memblock_dbg("%s: [%pa-%pa] %pS\n", __func__, >- &base, &end, (void *)_RET_IP_); >+ memblock_dbg("%s: [%pa-%pa] nid=%d flags=%x %pS\n", __func__, >+ &base, &end, nid, flags, (void *)_RET_IP_); > >- return memblock_add_range(&memblock.reserved, base, size, MAX_NUMNODES, 0); >+ return memblock_add_range(&memblock.reserved, base, size, nid, flags); > } > > #ifdef CONFIG_HAVE_MEMBLOCK_PHYS_MAP >@@ -1459,14 +1460,14 @@ phys_addr_t __init memblock_alloc_range_nid(phys_addr_t size, > again: > found = memblock_find_in_range_node(size, align, start, end, nid, > flags); >- if (found && !memblock_reserve(found, size)) >+ if (found && !__memblock_reserve(found, size, nid, MEMBLOCK_RSRV_KERN)) Maybe we could use memblock_reserve_kern() directly. If my understanding is correct, the reserved region's nid is not used. BTW, one question here. How we handle concurrent memblock allocation? If two threads find the same available range and do the reservation, it seems to be a problem to me. Or I missed something? > goto done; > > if (numa_valid_node(nid) && !exact_nid) { > found = memblock_find_in_range_node(size, align, start, > end, NUMA_NO_NODE, > flags); >- if (found && !memblock_reserve(found, size)) >+ if (found && !memblock_reserve_kern(found, size)) > goto done; > } > >@@ -1751,6 +1752,20 @@ phys_addr_t __init_memblock memblock_reserved_size(void) > return memblock.reserved.total_size; > } > >+phys_addr_t __init_memblock memblock_reserved_kern_size(int nid) >+{ >+ struct memblock_region *r; >+ phys_addr_t total = 0; >+ >+ for_each_reserved_mem_region(r) { >+ if (nid == memblock_get_region_node(r) || !numa_valid_node(nid)) >+ if (r->flags & MEMBLOCK_RSRV_KERN) >+ total += r->size; >+ } >+ >+ return total; >+} >+ > /** > * memblock_estimated_nr_free_pages - return estimated number of free pages > * from memblock point of view >@@ -2397,6 +2412,7 @@ static const char * const flagname[] = { > [ilog2(MEMBLOCK_NOMAP)] = "NOMAP", > [ilog2(MEMBLOCK_DRIVER_MANAGED)] = "DRV_MNG", > [ilog2(MEMBLOCK_RSRV_NOINIT)] = "RSV_NIT", >+ [ilog2(MEMBLOCK_RSRV_KERN)] = "RSV_KERN", > }; > > static int memblock_debug_show(struct seq_file *m, void *private) >-- >2.47.2 > -- Wei Yang Help you, Help me