From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pl1-f169.google.com (mail-pl1-f169.google.com [209.85.214.169]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A556637BE6F for ; Wed, 13 May 2026 13:09:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.169 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778677772; cv=none; b=ZlA16EiIw3TCmTzPqdV3Q1pnU5hFKY5QEMqpvQ3jr7LXs/3rWQl7R3Oj0yXduuTB0v41lk8zUcO4yNzAetk8M34QKgUT8IyALmxKImxFHPepDt5bkhCMKoFy9l3nJVOdgjwn9xIcGHGqM4eHr3fDxVvlDbv1i4yPEUjKuv213Ew= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778677772; c=relaxed/simple; bh=86av5gAi9cHHlwVsT86n7SSqcVeZvOQTejpAdxtHEEg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=DJgeXIcCss9cDl3x0LbEjjt1hoQub7gfO3x1ZbFakEXIaOlhuSQehFdEKUesFkuMYn+hnvjltV5hRnnVgyCH+ny6yrke8b2yFgFJG88WP0CJc+scJKG9SD4NWS4DAPib08hnDZdh3kC2b/764xfKTwaFgaAe78gubPwk3AuehRQ= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=bytedance.com; spf=pass smtp.mailfrom=bytedance.com; dkim=pass (2048-bit key) header.d=bytedance.com header.i=@bytedance.com header.b=MJwM5aaf; arc=none smtp.client-ip=209.85.214.169 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=bytedance.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bytedance.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bytedance.com header.i=@bytedance.com header.b="MJwM5aaf" Received: by mail-pl1-f169.google.com with SMTP id d9443c01a7336-2ba4efedbeaso47457305ad.1 for ; Wed, 13 May 2026 06:09:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1778677770; x=1779282570; darn=vger.kernel.org; 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=G/meEdlZTZDHs3WMdtJ4iXM2mc4vrDnOJRWI7aUMJSw=; b=MJwM5aaf9vrBbdliPCq0BUKydBwini7mVF+ZkcwBkN2A5zUxpgb5mFdMhF6XB4hqh+ ZIeAZy3Xo5Wjox1FZLzKBEYkJaVy/2xgmvVv1wTOwChLPzYaWTlpSNBpANLaLGpWxFSM EvqMXp20sATyfGQov1EnTEd4DQr09yudF2Oue3ow2FJ3fKlpGS/I/g2KD7LwDjH6IBD1 I5HCKt+x3HT79NUbl0uyRajN/BoeFAg5I+jZ3HhZd/g09jsJDI4UUQ+EhXVT6GiBNjAR YDizWmtgAE5obWynJOfg6qT9e9hGZLpnddBfqQ8igQEG7lZzB/lXyitrB3RBpZf7C6N9 QlOg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778677770; x=1779282570; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=G/meEdlZTZDHs3WMdtJ4iXM2mc4vrDnOJRWI7aUMJSw=; b=VlKNcZpAfsFA5m2ppGpIpBPe1+41HVCOpKhTWgFDEna/Bazx34y6b3py0uLi7xYCAf +CteCD94hj2Z/eWWznhvnxAJFmXNe41eDCosFWnw45RlMeqvp8kxBwQefLlNFDb5KDBz R7O5R8vf+plJqy0LbGCtvfNbkTuZxA+OB5JiPwOZoPBPpTPYqsLHshYCaVZZQL5AwhlQ dA3UiMgDpG5uzBrZ7pqpAIOBD3RqAiMyRXc1cItwb9QtF3IMbGOkdPsVNnihtWCqjgk3 O3fTF4R48Qur2mRSYELHRf/9MEKv3lFsLh4dDHlb6OzaYgaroJl+jXxM+wQmk1SRe5kB OTag== X-Forwarded-Encrypted: i=1; AFNElJ+fLLIcjtH0aqgXv9a3DerC75Uqlh3XERCE+VBjdszKPxUMXxUhtOs0G8P5y1uW7861OmREcAIQtjg7qqI=@vger.kernel.org X-Gm-Message-State: AOJu0YznXmQwA8MSHfp/1En8Yqpi2aocN88nGYV+9j/QFeHKzKUg0+CX W2AP4mISvepCZeFg944ih0vokTGb0WiKphTySbHbX2ouBJPu2uSongPSIJQF6ixYD10= X-Gm-Gg: Acq92OFDOIYa/CS6/McwYyteZ6RBwikhf8hhUDnIrVcwUM2Bylt2GUMlSZZBpYzLDtJ 08WK1+IDw3qf6Z5JtanbZygw92AaletqUeJWLGjhV/I3m1ZAUI3hvuo+kL1oi3CN9ClBndszULM rEsthVGrKZsxchmqPwhLb6MqNxnJijfQZFlqzX8SytVydtjC6dfOu1pgn1fcuJu5syExSU0jRhd YMFTj0RUPxjYZi7ThIC5+t6X1Tvuxak+IAB6hCDJVzVlCTGQq9NLH7ftBAgUm72aP4IhUWgW/ZN mrQd3YTvafKiiGGlmMO7r7t5TQz5pd0WvG6DrxsQ/ZNScOr02wIyEwl0sdSQIYPZxToZKstbZCG PsaeAR3a2LjH6Y5MdLYlXLCuiDhYSXCKbSBoY5mTLvtTqx3Ss9M1D4MiLanOh8G3JYoQHFt9uka aA7upRXSta3a8I7ggkeccUq8BhLyQueFOsUBUJ52Duk1uOQOZz16XTUgjJw9o= X-Received: by 2002:a17:903:38c8:b0:2b0:6f21:8289 with SMTP id d9443c01a7336-2bd30210f0dmr30869055ad.25.1778677769571; Wed, 13 May 2026 06:09:29 -0700 (PDT) Received: from PXLDJ45XCM.bytedance.net ([61.213.176.6]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2baf1e90854sm166641925ad.66.2026.05.13.06.09.24 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Wed, 13 May 2026 06:09:28 -0700 (PDT) From: Muchun Song To: Andrew Morton , David Hildenbrand , Muchun Song , Oscar Salvador , Michael Ellerman , Madhavan Srinivasan Cc: Lorenzo Stoakes , "Liam R . Howlett" , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , Nicholas Piggin , Christophe Leroy , Ackerley Tng , Frank van der Linden , aneesh.kumar@linux.ibm.com, joao.m.martins@oracle.com, linux-mm@kvack.org, linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org, Muchun Song Subject: [PATCH v2 21/69] mm: Rename vmemmap optimization macros around folio semantics Date: Wed, 13 May 2026 21:04:49 +0800 Message-ID: <20260513130542.35604-22-songmuchun@bytedance.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260513130542.35604-1-songmuchun@bytedance.com> References: <20260513130542.35604-1-songmuchun@bytedance.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit The existing vmemmap optimization macros are named in terms of tail pages, but they actually describe which folio sizes can use the optimization and how much vmemmap backing an optimized folio keeps. Rename them to reflect that meaning directly. This makes the names work for both HugeTLB and other folio-based users such as DAX. Signed-off-by: Muchun Song --- include/linux/mmzone.h | 18 ++++++++++-------- mm/hugetlb.c | 4 ++-- mm/hugetlb_vmemmap.c | 2 +- mm/sparse-vmemmap.c | 4 ++-- 4 files changed, 15 insertions(+), 13 deletions(-) diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h index 362e16497533..40b1cea98b82 100644 --- a/include/linux/mmzone.h +++ b/include/linux/mmzone.h @@ -107,13 +107,15 @@ is_power_of_2(sizeof(struct page)) ? \ MAX_FOLIO_NR_PAGES * sizeof(struct page) : 0) -/* - * vmemmap optimization (like HVO) is only possible for page orders that fill - * two or more pages with struct pages. - */ -#define VMEMMAP_TAIL_MIN_ORDER (ilog2(2 * PAGE_SIZE / sizeof(struct page))) -#define __NR_VMEMMAP_TAILS (MAX_FOLIO_ORDER - VMEMMAP_TAIL_MIN_ORDER + 1) -#define NR_VMEMMAP_TAILS (__NR_VMEMMAP_TAILS > 0 ? __NR_VMEMMAP_TAILS : 0) +/* The number of vmemmap pages required by a vmemmap-optimized folio. */ +#define OPTIMIZED_FOLIO_VMEMMAP_PAGES 1 +#define OPTIMIZED_FOLIO_VMEMMAP_SIZE (OPTIMIZED_FOLIO_VMEMMAP_PAGES * PAGE_SIZE) +#define OPTIMIZED_FOLIO_VMEMMAP_NR_STRUCT_PAGES (OPTIMIZED_FOLIO_VMEMMAP_SIZE / sizeof(struct page)) +#define OPTIMIZABLE_FOLIO_MIN_ORDER (ilog2(OPTIMIZED_FOLIO_VMEMMAP_NR_STRUCT_PAGES) + 1) + +#define __NR_OPTIMIZABLE_FOLIO_ORDERS (MAX_FOLIO_ORDER - OPTIMIZABLE_FOLIO_MIN_ORDER + 1) +#define NR_OPTIMIZABLE_FOLIO_ORDERS \ + (__NR_OPTIMIZABLE_FOLIO_ORDERS > 0 ? __NR_OPTIMIZABLE_FOLIO_ORDERS : 0) enum migratetype { MIGRATE_UNMOVABLE, @@ -1146,7 +1148,7 @@ struct zone { atomic_long_t vm_stat[NR_VM_ZONE_STAT_ITEMS]; atomic_long_t vm_numa_event[NR_VM_NUMA_EVENT_ITEMS]; #ifdef CONFIG_HUGETLB_PAGE_OPTIMIZE_VMEMMAP - struct page *vmemmap_tails[NR_VMEMMAP_TAILS]; + struct page *vmemmap_tails[NR_OPTIMIZABLE_FOLIO_ORDERS]; #endif } ____cacheline_internodealigned_in_smp; diff --git a/mm/hugetlb.c b/mm/hugetlb.c index 1f0a0e31d624..53448b05ca11 100644 --- a/mm/hugetlb.c +++ b/mm/hugetlb.c @@ -3318,7 +3318,7 @@ void __init hugetlb_struct_page_init(void) struct zone *zone; for_each_zone(zone) { - for (int i = 0; i < NR_VMEMMAP_TAILS; i++) { + for (int i = 0; i < NR_OPTIMIZABLE_FOLIO_ORDERS; i++) { struct page *tail, *p; unsigned int order; @@ -3326,7 +3326,7 @@ void __init hugetlb_struct_page_init(void) if (!tail) continue; - order = i + VMEMMAP_TAIL_MIN_ORDER; + order = i + OPTIMIZABLE_FOLIO_MIN_ORDER; p = page_to_virt(tail); for (int j = 0; j < PAGE_SIZE / sizeof(struct page); j++) init_compound_tail(p + j, NULL, order, zone); diff --git a/mm/hugetlb_vmemmap.c b/mm/hugetlb_vmemmap.c index 952216a49bcb..e9906d32a64c 100644 --- a/mm/hugetlb_vmemmap.c +++ b/mm/hugetlb_vmemmap.c @@ -495,7 +495,7 @@ static bool vmemmap_should_optimize_folio(const struct hstate *h, struct folio * static struct page *vmemmap_get_tail(unsigned int order, struct zone *zone) { - const unsigned int idx = order - VMEMMAP_TAIL_MIN_ORDER; + const unsigned int idx = order - OPTIMIZABLE_FOLIO_MIN_ORDER; struct page *tail, *p; int node = zone_to_nid(zone); diff --git a/mm/sparse-vmemmap.c b/mm/sparse-vmemmap.c index d7e9fb47f7ee..39529245d790 100644 --- a/mm/sparse-vmemmap.c +++ b/mm/sparse-vmemmap.c @@ -318,12 +318,12 @@ static __meminit struct page *vmemmap_get_tail(unsigned int order, struct zone * unsigned int idx; int node = zone_to_nid(zone); - if (WARN_ON_ONCE(order < VMEMMAP_TAIL_MIN_ORDER)) + if (WARN_ON_ONCE(order < OPTIMIZABLE_FOLIO_MIN_ORDER)) return NULL; if (WARN_ON_ONCE(order > MAX_FOLIO_ORDER)) return NULL; - idx = order - VMEMMAP_TAIL_MIN_ORDER; + idx = order - OPTIMIZABLE_FOLIO_MIN_ORDER; tail = zone->vmemmap_tails[idx]; if (tail) return tail; -- 2.54.0