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 8770FC001DC for ; Thu, 27 Jul 2023 20:46:43 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 5D0D46B007B; Thu, 27 Jul 2023 16:46:39 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 580486B007D; Thu, 27 Jul 2023 16:46:39 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 3FA7B6B007E; Thu, 27 Jul 2023 16:46:39 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 30C196B007B for ; Thu, 27 Jul 2023 16:46:39 -0400 (EDT) Received: from smtpin29.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id DAB921203AC for ; Thu, 27 Jul 2023 20:46:38 +0000 (UTC) X-FDA: 81058575276.29.C4E9E37 Received: from mail-lj1-f176.google.com (mail-lj1-f176.google.com [209.85.208.176]) by imf11.hostedemail.com (Postfix) with ESMTP id D392940021 for ; Thu, 27 Jul 2023 20:46:36 +0000 (UTC) Authentication-Results: imf11.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=gVT8uA85; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf11.hostedemail.com: domain of usama.arif@bytedance.com designates 209.85.208.176 as permitted sender) smtp.mailfrom=usama.arif@bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1690490797; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=JQe+LnlORYwelNDP2OagFjwF2/T/1IMvjhocyHCh0HM=; b=JzwotKNBUcJn2RFN8EoRTY4Vojtlw0mEqisJjzzRA3VVc4wdTDTkvoUUVM059ANppo45eH DZffyiNk15PlpNwUtN8K+YoDYyAElGzcXfYmT2BY28ExuD83LOnKmXageEvkgKxotybsPR WcuMEgCBGvLwrJBMVvCkJ+Ikqq1L2cM= ARC-Authentication-Results: i=1; imf11.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=gVT8uA85; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf11.hostedemail.com: domain of usama.arif@bytedance.com designates 209.85.208.176 as permitted sender) smtp.mailfrom=usama.arif@bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1690490797; a=rsa-sha256; cv=none; b=R0ugRYy5bq7qc7eNmrOrJIK7EjyAttrrOZ/OwcCzL27wzw+rn2uF7YaLJrWrejbv7PkN7d J9/qDFWfmIkiaVzjaEhp5yc2XhpVpxHNmKeAvm0FbPoNozewM33IdCGZsRB3oQrzhooACI KJlTcTk4t4vTbTulAB4LG+WxJhq2UaA= Received: by mail-lj1-f176.google.com with SMTP id 38308e7fff4ca-2b701e1ca63so21960011fa.1 for ; Thu, 27 Jul 2023 13:46:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1690490795; x=1691095595; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=JQe+LnlORYwelNDP2OagFjwF2/T/1IMvjhocyHCh0HM=; b=gVT8uA85Q/2RybadFL1WMGqwI8huoiPfSEh3Ga80yhJTkx2wqYddCczcvHucvrLvi3 8LyY62f1ojKZNCIJ1RJJ6AJm/H/D5kfULuGeQgjkEhp/sdQz5z18I7dL/szLmlIfJpYD u61EVQdgSt8wbKxI6DB5hsAcwBuLB2hgvn0jrCvRww9Z0lGEXVNLysQBc2Fe36p46uCT jl2OXbNIY2R4lV5NY2Ex7WgCxOm/ALG64TE59hb/8mRc6i3LDTDk1ah1xfi+hOTG8MYd 4LLgZYdnHkKk+A17Ls6+GXL7nzPHfRkZeRmwu0Uv3hqpWoCBuyANT80yrLWtGgfm1gge gtcg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690490795; x=1691095595; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=JQe+LnlORYwelNDP2OagFjwF2/T/1IMvjhocyHCh0HM=; b=VTNUmXwVZB2MYWtdWUTf1m4kl7g3ieYfS6k0o/L8x5QTnaLy36kvQJ6DE/AVyp0bfl LEfqdqW3anSQLkAGnWsJ4xiM7VWv9NXBiOksGFuu72+BkqISPd99qt1KHMiqGPhjR/ag 4c3TTP/3LIfNjV9En3RERx6u2YhVTtdjSIWKMWMBf4wQFMybLte89Eo3NP3DyY6l2wRQ xwqWSIpP4z1Zu6P4l0jA6YaKG7eptrYJ8/Wupt+GC0EcLlqAtdeL9UobOHU/IUeD55t8 qK4R81FXk8hrWCzfcNLURSMwzUTCqrnxR0a2ixSi3zbnAZ+SrShIE41TiEVWvFBbISCI 4dDw== X-Gm-Message-State: ABy/qLb8QQ9Zk7+qSEcLAV45WQsOeIoNaXegXKSUY+pnk7RMgG4gEXMN 5bOiGxb+f3QKMjJJ7+JNtmPstqAXXBUJ/9JgEQA= X-Google-Smtp-Source: APBJJlFfgB46RLeDSeeOkYepjrGae0ZQ1eLESbLa8jxhbH1/PX3Edir8uGhF64v2uGzIFXEGRina+Q== X-Received: by 2002:a2e:3003:0:b0:2b5:974f:385 with SMTP id w3-20020a2e3003000000b002b5974f0385mr129660ljw.9.1690490795035; Thu, 27 Jul 2023 13:46:35 -0700 (PDT) Received: from localhost.localdomain ([2a02:6b6a:b465:0:7e3e:db9e:70fa:9ccb]) by smtp.gmail.com with ESMTPSA id k1-20020a7bc401000000b003fc06169abdsm2701400wmi.2.2023.07.27.13.46.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 27 Jul 2023 13:46:34 -0700 (PDT) From: Usama Arif To: linux-mm@kvack.org, muchun.song@linux.dev, mike.kravetz@oracle.com, rppt@kernel.org Cc: linux-kernel@vger.kernel.org, fam.zheng@bytedance.com, liangma@liangbit.com, simon.evans@bytedance.com, punit.agrawal@bytedance.com, Usama Arif Subject: [v1 4/6] memblock: introduce MEMBLOCK_RSRV_NOINIT flag Date: Thu, 27 Jul 2023 21:46:22 +0100 Message-Id: <20230727204624.1942372-5-usama.arif@bytedance.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230727204624.1942372-1-usama.arif@bytedance.com> References: <20230727204624.1942372-1-usama.arif@bytedance.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: D392940021 X-Rspam-User: X-Rspamd-Server: rspam02 X-Stat-Signature: qaqbh513kr8sffkdbby8mrqmzhxjuyh8 X-HE-Tag: 1690490796-738402 X-HE-Meta: U2FsdGVkX1+rMC/+XRJgbXeezQKESnmnMOWOXAW6J43SJpbo3HS8WrW1C2uPpCOt96j0R2/cu16ML2D1NCHksgMnc4upC7uMwZQxqlIYCTR+c2BCfTzFEVQnmINCQAUUAwgBBODCksoOhqJpdvZ+Nwi5OLtVYmQ69Izc8cse7wXDzHF+g7Ie2uzyx4rBIdI/DVdqAnLhdNtKmgI5x5L7G2S7SCL4kk3jC2f2nNerMcno92rP0BlnkQ1qyIONZUd14l3KO++WaQut4Gkh4ge96C8BDVWE/fc42LorI7envVkDecLfu06//Dzq8nEVutZPoX4kxcgbeQAVYHKJqrgZEOk9zAr5B/V9jO2kVGVRE2lwt9cmpDfwSnUt5Uri+yvvHBo9X2WaMi7db4iba3soFCQOK4nSEBNxeSxy4+qyfdTgyfxli0lFOsbiIyNVaQHmnzQ3IuanfjHyDjpTQQWZU4wd1cG4FiHPV7yf2Pb4nJhymuAhCOSnJr0xfacbby5Sc9sgcGy3J+EN6KDy5RSox/SxMJWhfJA9gJPxuf27Fe757QlHvZbqUnZqfFBgtauqNh7a947x5HvkM+nnWulX7sFn1wljfdSsP7PRx7yq97SXIA+He51JY2UMMyE7ngp6/40wFwZnrWLJMfCWgm/f/dNw+53H/+QMlCemwG4fn3Nbrgul8fe4/+aE49iov5boKqdF9GyhokmmDuwTGVLbknisWQZNoyokZVt5acZltcdix2+5Ntkszpq/qDmhaFEGjLN67mvcQwypwVrkIDT+eMjioG+sQp077muH2wAQqdZx6dr4Yonwu3DRT2sOd9QcY5VEpi99Sws32V/eMHtjF22qAXvJmtHSHfGTjjr19vUTF7XS70ZzQLJh30XAcsLXnnmf9mfuuX1k3f05VPg7nDPCyoMkeuGAT89QIxVCiBI7ycP2aGYllVE0Z6NKwRnaFGgRDJNGqIrdExwVRzB Cwf+XySM h4yMCRtApxOcRCOoGPhE8iT/hyoxmOET/SvFV3PbKEjCs0e40rqmlplQBSOTpGR0iIQdQbEZjNT1C8iKEuCZ2k8G/cF5Sv1hyl3mj5v+PJqsm2XL858USdpY0S48i0nDGBkXCGIuYcZ1UoN3fibKYZK+6EVgvq9c+Pzr41Ex9lz780wwlzuGwANdj0ESKO/4NSVxhnNi+0Ud2HYi17S0nLgUdyHQSJODrxdhly5B+DSa7dtussGjuuacBPK/S7xjcg9UquKSkLmhGpNd9JkGtO3IYBbtxivdgoORrHqt5lCyVoBJYdjvTNb4Uzqn6e1a+Ji7fpxkwvHEYZv+vTjUiEVr83QSArcs3Sn7qOM4MVkI3wIPnz0LztPZ6ZH/vXyPIbzmUjyMJrdpccFtGtY2OSfgeS8CBfCbUhK/qoRzFHnLeLRcz8jkrhKfTq4eIu6MlZLE+4YkIamJBznanpCQ4HdVaYQ== 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: For reserved memory regions marked with this flag, reserve_bootmem_region is not called during memmap_init_reserved_pages. This can be used to avoid struct page initialization for regions which won't need them, for e.g. hugepages with HVO enabled. Signed-off-by: Usama Arif --- include/linux/memblock.h | 7 +++++++ mm/memblock.c | 32 ++++++++++++++++++++++++++------ 2 files changed, 33 insertions(+), 6 deletions(-) diff --git a/include/linux/memblock.h b/include/linux/memblock.h index f71ff9f0ec81..7f9d06c08592 100644 --- a/include/linux/memblock.h +++ b/include/linux/memblock.h @@ -47,6 +47,7 @@ enum memblock_flags { MEMBLOCK_MIRROR = 0x2, /* mirrored region */ 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 call reserve_bootmem_region for this region */ }; /** @@ -125,6 +126,7 @@ int memblock_clear_hotplug(phys_addr_t base, phys_addr_t size); int memblock_mark_mirror(phys_addr_t base, phys_addr_t size); int memblock_mark_nomap(phys_addr_t base, phys_addr_t size); int memblock_clear_nomap(phys_addr_t base, phys_addr_t size); +int memblock_rsrv_mark_noinit(phys_addr_t base, phys_addr_t size); void memblock_free_all(void); void memblock_free(void *ptr, size_t size); @@ -259,6 +261,11 @@ static inline bool memblock_is_nomap(struct memblock_region *m) return m->flags & MEMBLOCK_NOMAP; } +static inline bool memblock_is_noinit(struct memblock_region *m) +{ + return m->flags & MEMBLOCK_RSRV_NOINIT; +} + static inline bool memblock_is_driver_managed(struct memblock_region *m) { return m->flags & MEMBLOCK_DRIVER_MANAGED; diff --git a/mm/memblock.c b/mm/memblock.c index 4fd431d16ef2..3a15708af3b6 100644 --- a/mm/memblock.c +++ b/mm/memblock.c @@ -997,6 +997,22 @@ int __init_memblock memblock_clear_nomap(phys_addr_t base, phys_addr_t size) return memblock_setclr_flag(base, size, 0, MEMBLOCK_NOMAP, 0); } +/** + * memblock_rsrv_mark_noinit - Mark a reserved memory region with flag MEMBLOCK_RSRV_NOINIT. + * @base: the base phys addr of the region + * @size: the size of the region + * + * For memory regions marked with %MEMBLOCK_RSRV_NOINIT, reserve_bootmem_region + * is not called during memmap_init_reserved_pages, hence struct pages are not + * initialized for this region. + * + * Return: 0 on success, -errno on failure. + */ +int __init_memblock memblock_rsrv_mark_noinit(phys_addr_t base, phys_addr_t size) +{ + return memblock_setclr_flag(base, size, 1, MEMBLOCK_RSRV_NOINIT, 1); +} + static bool should_skip_region(struct memblock_type *type, struct memblock_region *m, int nid, int flags) @@ -2113,13 +2129,17 @@ static void __init memmap_init_reserved_pages(void) memblock_set_node(start, end, &memblock.reserved, nid); } - /* initialize struct pages for the reserved regions */ + /* + * initialize struct pages for reserved regions that don't have + * the MEMBLOCK_RSRV_NOINIT flag set + */ for_each_reserved_mem_region(region) { - nid = memblock_get_region_node(region); - start = region->base; - end = start + region->size; - - reserve_bootmem_region(start, end, nid); + if (!memblock_is_noinit(region)) { + nid = memblock_get_region_node(region); + start = region->base; + end = start + region->size; + reserve_bootmem_region(start, end, nid); + } } } -- 2.25.1