From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pl1-f201.google.com (mail-pl1-f201.google.com [209.85.214.201]) (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 7C3B9366546 for ; Wed, 8 Jul 2026 03:11:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783480309; cv=none; b=WnSYjOH1df9gHnkqO1G6zHFzZV7qUkERXvdDi8yQPhQM1m0J1vDcfV/TCtoK5/98vwvYBoWLnSbNiSBbaT6jgc3qtkgsD7zg+TeJkKmrukIll7c+L+y/yg+edecLJEXjZMHWO5xvOqP8y/2WE3xdZQxXzLFH8QYlPuwxzKjJhFU= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783480309; c=relaxed/simple; bh=JlDWKMEfonliU9WCnmk9UqKsOG4sRq4sPy12HQ1C2oo=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=L47GFgyqtqV4HaWrRp9np0LnBw3PWZXlIt4AA8eZU9ZzCFhmQYhjo3ki5LVAGdB23iwWXAuWWquxs3G0rpjg6JzuUl5c/7Y6gP0hOWj1CG/BC4H9h9eu0KnAqERMTvIpy+ccSxaIKroMP7QOWIatGf6GIfuRiWSq7QlLdD2dGkw= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--jthoughton.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=gFKDrYCi; arc=none smtp.client-ip=209.85.214.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--jthoughton.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="gFKDrYCi" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-2cceabd70f5so4349675ad.1 for ; Tue, 07 Jul 2026 20:11:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1783480307; x=1784085107; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:from:to:cc:subject:date:message-id:reply-to :content-type; bh=7DxyegdDTBkuws1o4l0mkPGvs9ZTLGu40cJligZL/Yo=; b=gFKDrYCi2iPJZ1J/HJGq1ogNzG2D8BPmmhUAoR2UZSv+09g60FRu5HU5xvymx89dwl fA9GgqBSTpuR9JK8CkUsQzRgG8fCbKr7qyEkw+/j4bo/uO/mSQOUCr4d6VwrIyIU5KPR QlQNzDYojAXBLiUPva0AnD7bi9eIABz6NLUesey3l5yizDOcwuVRQPqFrHmWhwk5tj4S ovX9cYB+JncCG3l8UlP0pB+OYjduyjjSspqBfeld6C1jbQ5b/JiukUq2Lmr8BTWqu7O9 rR03EyX57UZw/zQnSMoc//ekSV0aq3dzcmmW7C6ZQtPCBT8QiRcQs6FHDunyOckWy5O+ +XVQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783480307; x=1784085107; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=7DxyegdDTBkuws1o4l0mkPGvs9ZTLGu40cJligZL/Yo=; b=jX+acaM/7LSg3d72yGBPo1v22uBX4BouazIkU1WuRdfnMuIM8TCP5w/Pr22uY4BJ7Q LpumJdaktBadHyfq+tWhZEAXFlj2R+W+YEJ+W18dHYZTnVCyQ2IH2IJCMejT00t+3yUp 9+V4bZ3vU2FxYM8UgjniMSjUbJFhC1hklSwgBZm5OjXRALTfQ1+Y+nSlexfF8SvugVuk EzRWYmIxa5d0DCCz+6nH0BZajvrmGcB6ut/FH0UfDgzdCXK92fsjqcbbL5lUQyv0Wt9Z RUZyzWfOU71d9v8gVq3ozCbvgv+pRCwSAKF942E4NSXS/UyQpt2/jLChTm1kiWCo59dQ eYyQ== X-Forwarded-Encrypted: i=1; AHgh+RpegBabS7e8lL8KMd/ol8tr+YrRuaHWPpwTZIJfD3rVXWu2tuUGvVEYcGVQhiTV/a6tMoA7LfDxK+9pNUY=@vger.kernel.org X-Gm-Message-State: AOJu0YyIXQbJhvpANtkVOVyEcOwWGfR38+zUtIQEaCbLgJ62xeNkfk8q rT5YwFhSIbDz6HDUakwSO777rzHID9GoTWN1rIVc16cIEM3PBWEp7v/LTZuOhR9QcEegZ5WhbeE nnP8+54FCrdJ7vXfStsEGJQ== X-Received: from plbjl21.prod.google.com ([2002:a17:903:1355:b0:2cc:7709:3bc8]) (user=jthoughton job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:4b4e:b0:2ca:c7a:859b with SMTP id d9443c01a7336-2ccea36d9cfmr6381555ad.36.1783480306686; Tue, 07 Jul 2026 20:11:46 -0700 (PDT) Date: Wed, 8 Jul 2026 03:11:25 +0000 In-Reply-To: <20260708031129.3503195-1-jthoughton@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260708031129.3503195-1-jthoughton@google.com> X-Mailer: git-send-email 2.55.0.795.g602f6c329a-goog Message-ID: <20260708031129.3503195-16-jthoughton@google.com> Subject: [PATCH 15/18] hugetlb_vmemmap: Add a way to permanently disable HVO when needed From: James Houghton To: Will Deacon , Catalin Marinas , Muchun Song , Oscar Salvador Cc: Nikos Nikoleris , Linu Cherian , Mark Rutland , David Hildenbrand , Andrew Morton , Ryan Roberts , Nanyong Sun , Yu Zhao , Frank van der Linden , David Rientjes , James Houghton , linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mm@kvack.org Content-Type: text/plain; charset="UTF-8" hugetlb_vmemmap_optimization_try_disable() is used by callers to permanently disable HVO if it becomes impossible to use. If HVO is already actively in use, hugetlb_vmemmap_optimization_try_disable() returns false to inform the caller to take appropriate action (e.g., for arm64, not to online an incompatible late CPU). Signed-off-by: James Houghton --- MAINTAINERS | 1 + include/linux/hugetlb_vmemmap.h | 20 +++++++++++++++++ mm/hugetlb_vmemmap.c | 40 +++++++++++++++++++++++++++++++++ 3 files changed, 61 insertions(+) create mode 100644 include/linux/hugetlb_vmemmap.h diff --git a/MAINTAINERS b/MAINTAINERS index ff47013ce995..55bd4c09f494 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -12013,6 +12013,7 @@ F: Documentation/mm/hugetlbfs_reserv.rst F: Documentation/mm/vmemmap_dedup.rst F: fs/hugetlbfs/ F: include/linux/hugetlb.h +F: include/linux/hugetlb_vmemmap.h F: include/trace/events/hugetlbfs.h F: mm/hugetlb.c F: mm/hugetlb_cgroup.c diff --git a/include/linux/hugetlb_vmemmap.h b/include/linux/hugetlb_vmemmap.h new file mode 100644 index 000000000000..a671eb4a4ff4 --- /dev/null +++ b/include/linux/hugetlb_vmemmap.h @@ -0,0 +1,20 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef _LINUX_HUGETLB_VMEMMAP_H +#define _LINUX_HUGETLB_VMEMMAP_H + +#include + +#ifdef CONFIG_HUGETLB_PAGE_OPTIMIZE_VMEMMAP + +bool hugetlb_vmemmap_optimization_try_disable(void); + +#else /* CONFIG_HUGETLB_PAGE_OPTIMIZE_VMEMMAP */ + +static inline bool hugetlb_vmemmap_optimization_try_disable(void) +{ + return true; +} + +#endif + +#endif /* _LINUX_HUGETLB_VMEMMAP_H */ diff --git a/mm/hugetlb_vmemmap.c b/mm/hugetlb_vmemmap.c index a490a34998d9..7e7f8579cc2a 100644 --- a/mm/hugetlb_vmemmap.c +++ b/mm/hugetlb_vmemmap.c @@ -17,6 +17,7 @@ #include #include #include +#include #include #include "hugetlb_vmemmap_internal.h" @@ -463,6 +464,39 @@ static int vmemmap_remap_alloc(const struct hstate *h, struct folio *folio, return ret; } +enum hugetlb_hvo_status { + HVO_INACTIVE = 0, + HVO_ACTIVE, + HVO_PERMANENTLY_INACTIVE, +}; +static enum hugetlb_hvo_status hvo_status = HVO_INACTIVE; + +static bool hugetlb_hvo_status_try_set(enum hugetlb_hvo_status status) +{ + enum hugetlb_hvo_status old; + + old = READ_ONCE(hvo_status); + +retry: + /* The current setting is what we want. */ + if (old == status) + return true; + + /* The current setting cannot be changed. */ + if (old != HVO_INACTIVE) + return false; + + if (!try_cmpxchg_relaxed(&hvo_status, &old, status)) + goto retry; + + return true; +} + +bool hugetlb_vmemmap_optimization_try_disable(void) +{ + return hugetlb_hvo_status_try_set(HVO_PERMANENTLY_INACTIVE); +} + static bool vmemmap_optimize_enabled = IS_ENABLED(CONFIG_HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON); static int __init hugetlb_vmemmap_optimize_param(char *buf) { @@ -571,6 +605,9 @@ static bool vmemmap_should_optimize_folio(const struct hstate *h, struct folio * if (!hugetlb_vmemmap_optimizable(h)) return false; + if (!hugetlb_hvo_status_try_set(HVO_ACTIVE)) + return false; + return true; } @@ -809,6 +846,9 @@ static bool vmemmap_should_optimize_bootmem_page(struct huge_bootmem_page *m) !IS_ALIGNED(psize, pmd_vmemmap_size)) return false; + if (!hugetlb_hvo_status_try_set(HVO_ACTIVE)) + return false; + return true; } -- 2.55.0.795.g602f6c329a-goog