From nobody Mon Apr 6 09:18:51 2026 Received: from mail-wm1-f74.google.com (mail-wm1-f74.google.com [209.85.128.74]) (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 110523E7150 for ; Fri, 20 Mar 2026 18:23:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774031026; cv=none; b=Wzs74ZbXPStOtXEOEBYg919iJWvCIOl1V8LZDBre+xOjMv56OAWf8QdoyxYWhpRmYzO+K5Kh/Wa7FtQtsxpqmCDK8MG3/67sUy11P6Z3C0kPlaOI4IUsqMr06F78KbIr5LvY66wAkn5DR1iKoqSxPtY7wsSvYLYVmy36kTA0lFg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774031026; c=relaxed/simple; bh=BqhpLz4DaEs4tQg+w1/OgbHZD1a5S0YzvtZfnkCjZdg=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=nv+EisUiMVPSo7wSalkqv0cEcLFaNPgw6uK1bGDxE+kskp2iKmHT/6URLmiEUxCfc6Go9/64HkpAbLNVDo0yPjy/3zketi7yu2738K8nZETRNrO2KAdP9XhtqscCIPSW7VL01zQ60e7fFvWmP9EBqrK5rgEZfAiYxWji69nFFVg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--jackmanb.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=i1T0P76O; arc=none smtp.client-ip=209.85.128.74 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--jackmanb.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="i1T0P76O" Received: by mail-wm1-f74.google.com with SMTP id 5b1f17b1804b1-4870221e1fdso4001035e9.0 for ; Fri, 20 Mar 2026 11:23:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1774031023; x=1774635823; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=hsIAd6ccjWbW954pR6oCy9OY9Eau050KLHgEMawbPLI=; b=i1T0P76OMaKOqkThfx0RM04R8q+ddtABG9RUqv1ACSB22XT3rPqu3RU/r0iVGZsy9Z yGVa8aeHenKJpfFbzLfTiV7CA8nAPHc8gGubEfm6i63GnhNtqvra6RsFV5z+Ojf/oEk4 x1bYdh6jmmSnmn81yB3B2FIhVOJsQMv9EtqKrhnm0SlUVVtuXH6Rvb6PvUpgam+IQdjY UuU5IwI8E3WEoKPC4jFi45m2w9dxk59z24j1aIY9yy8JUftwOJsq+L4nJY3cweeejCqk PlrU2YRO0gTg8aAcJL7k3sG1ZpiRmZHWwLiDI/Sw+tSZ2T5eHWPXUb1T2qK4CFv6hpV3 qg+w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774031023; x=1774635823; h=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; bh=hsIAd6ccjWbW954pR6oCy9OY9Eau050KLHgEMawbPLI=; b=JCYT77ifFiJz7XnCeSDdC9nLysBZexEV1A0z4Tl9HIqqlkIbQ/nhcQ4jsg2EGx1PQn +XbQ1KuuW0nLy4IGw8YEq4xvzSXxJvcO5pFUv8euTXmRbMPtruVjtnpi8FArNDcLxt1U qp65AwT4wwPAhnRZYng5sUhVsiJr0ab9bemQz3eVzdskehry1tet0G+1xuUlzYH8eVN3 VAQW8qSzhruOtXu/zXW565K3DI/ybGI7ig5ErEUcNuSjdEZw0HnhFvkyh/nMqW8EVCfC fvKtbfpch9AbihUM46/lK6arnEvytTRphwXNibXHEddIjNsIxGdLH4KB71BbDJcuOsf6 YeHw== X-Forwarded-Encrypted: i=1; AJvYcCUyN9Ny6P5EqsIXBdgR8NaTv9g06wniBEPwIgGw+iqIBkryqpsHokqns1kZ+tpJADWDZhyl5wWz0hiApVM=@vger.kernel.org X-Gm-Message-State: AOJu0YxGRSp9hhb5myauzQkBs+7UOXuUHuCjWtztsnBeVb7Fuc9NfAy2 WsGaSDOsDkXtKgPx52L0+GstAcQ495iHUqPEVCYbDJBz1W+d7+gPVEOufKnIHIOLOcx/9poqtt+ PUrgYArJAsDKGvg== X-Received: from wmbdx7.prod.google.com ([2002:a05:600c:63c7:b0:47d:5bef:a379]) (user=jackmanb job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600c:8215:b0:46e:59bd:f7e2 with SMTP id 5b1f17b1804b1-486fe8e4038mr64340455e9.11.1774031023244; Fri, 20 Mar 2026 11:23:43 -0700 (PDT) Date: Fri, 20 Mar 2026 18:23:28 +0000 In-Reply-To: <20260320-page_alloc-unmapped-v2-0-28bf1bd54f41@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260320-page_alloc-unmapped-v2-0-28bf1bd54f41@google.com> X-Mailer: b4 0.14.3 Message-ID: <20260320-page_alloc-unmapped-v2-4-28bf1bd54f41@google.com> Subject: [PATCH v2 04/22] mm: Create flags arg for __apply_to_page_range() From: Brendan Jackman To: Borislav Petkov , Dave Hansen , Peter Zijlstra , Andrew Morton , David Hildenbrand , Vlastimil Babka , Wei Xu , Johannes Weiner , Zi Yan , Lorenzo Stoakes Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, x86@kernel.org, rppt@kernel.org, Sumit Garg , derkling@google.com, reijiw@google.com, Will Deacon , rientjes@google.com, "Kalyazin, Nikita" , patrick.roy@linux.dev, "Itazuri, Takahiro" , Andy Lutomirski , David Kaplan , Thomas Gleixner , Brendan Jackman , Yosry Ahmed Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Preparatory patch, no functional change intended. To prepare for making this function more generic, convert the boolean "create" arg into a flags arg with a single flag that has the same meaning. Signed-off-by: Brendan Jackman --- mm/internal.h | 10 ++++++++++ mm/memory.c | 29 +++++++++++++++++------------ 2 files changed, 27 insertions(+), 12 deletions(-) diff --git a/mm/internal.h b/mm/internal.h index f98f4746ac412..4b389431b1639 100644 --- a/mm/internal.h +++ b/mm/internal.h @@ -1870,4 +1870,14 @@ static inline int get_sysctl_max_map_count(void) return READ_ONCE(sysctl_max_map_count); } =20 +/* + * Create a mapping if it doesn't exist. (Otherwise, skip regions with no + * existing mapping, and return an error for regions with no leaf pagetabl= e). + */ +#define PGRANGE_CREATE (1 << 0) + +int __apply_to_page_range(struct mm_struct *mm, unsigned long addr, + unsigned long size, pte_fn_t fn, + void *data, unsigned int flags); + #endif /* __MM_INTERNAL_H */ diff --git a/mm/memory.c b/mm/memory.c index 219b9bf6cae00..7e55014e5560b 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -3208,9 +3208,10 @@ EXPORT_SYMBOL(vm_iomap_memory); =20 static int apply_to_pte_range(struct mm_struct *mm, pmd_t *pmd, unsigned long addr, unsigned long end, - pte_fn_t fn, void *data, bool create, + pte_fn_t fn, void *data, unsigned int flags, pgtbl_mod_mask *mask) { + bool create =3D flags & PGRANGE_CREATE; pte_t *pte, *mapped_pte; int err =3D 0; spinlock_t *ptl; @@ -3251,10 +3252,11 @@ static int apply_to_pte_range(struct mm_struct *mm,= pmd_t *pmd, =20 static int apply_to_pmd_range(struct mm_struct *mm, pud_t *pud, unsigned long addr, unsigned long end, - pte_fn_t fn, void *data, bool create, + pte_fn_t fn, void *data, unsigned int flags, pgtbl_mod_mask *mask) { pmd_t *pmd; + bool create =3D flags & PGRANGE_CREATE; unsigned long next; int err =3D 0; =20 @@ -3279,7 +3281,7 @@ static int apply_to_pmd_range(struct mm_struct *mm, p= ud_t *pud, pmd_clear_bad(pmd); } err =3D apply_to_pte_range(mm, pmd, addr, next, - fn, data, create, mask); + fn, data, flags, mask); if (err) break; } while (pmd++, addr =3D next, addr !=3D end); @@ -3289,10 +3291,11 @@ static int apply_to_pmd_range(struct mm_struct *mm,= pud_t *pud, =20 static int apply_to_pud_range(struct mm_struct *mm, p4d_t *p4d, unsigned long addr, unsigned long end, - pte_fn_t fn, void *data, bool create, + pte_fn_t fn, void *data, unsigned int flags, pgtbl_mod_mask *mask) { pud_t *pud; + bool create =3D flags & PGRANGE_CREATE; unsigned long next; int err =3D 0; =20 @@ -3325,10 +3328,11 @@ static int apply_to_pud_range(struct mm_struct *mm,= p4d_t *p4d, =20 static int apply_to_p4d_range(struct mm_struct *mm, pgd_t *pgd, unsigned long addr, unsigned long end, - pte_fn_t fn, void *data, bool create, + pte_fn_t fn, void *data, unsigned int flags, pgtbl_mod_mask *mask) { p4d_t *p4d; + bool create =3D flags & PGRANGE_CREATE; unsigned long next; int err =3D 0; =20 @@ -3351,7 +3355,7 @@ static int apply_to_p4d_range(struct mm_struct *mm, p= gd_t *pgd, p4d_clear_bad(p4d); } err =3D apply_to_pud_range(mm, p4d, addr, next, - fn, data, create, mask); + fn, data, flags, mask); if (err) break; } while (p4d++, addr =3D next, addr !=3D end); @@ -3359,11 +3363,12 @@ static int apply_to_p4d_range(struct mm_struct *mm,= pgd_t *pgd, return err; } =20 -static int __apply_to_page_range(struct mm_struct *mm, unsigned long addr, - unsigned long size, pte_fn_t fn, - void *data, bool create) +int __apply_to_page_range(struct mm_struct *mm, unsigned long addr, + unsigned long size, pte_fn_t fn, + void *data, unsigned int flags) { pgd_t *pgd; + bool create =3D flags & PGRANGE_CREATE; unsigned long start =3D addr, next; unsigned long end =3D addr + size; pgtbl_mod_mask mask =3D 0; @@ -3387,7 +3392,7 @@ static int __apply_to_page_range(struct mm_struct *mm= , unsigned long addr, pgd_clear_bad(pgd); } err =3D apply_to_p4d_range(mm, pgd, addr, next, - fn, data, create, &mask); + fn, data, flags, &mask); if (err) break; } while (pgd++, addr =3D next, addr !=3D end); @@ -3405,7 +3410,7 @@ static int __apply_to_page_range(struct mm_struct *mm= , unsigned long addr, int apply_to_page_range(struct mm_struct *mm, unsigned long addr, unsigned long size, pte_fn_t fn, void *data) { - return __apply_to_page_range(mm, addr, size, fn, data, true); + return __apply_to_page_range(mm, addr, size, fn, data, PGRANGE_CREATE); } EXPORT_SYMBOL_GPL(apply_to_page_range); =20 @@ -3419,7 +3424,7 @@ EXPORT_SYMBOL_GPL(apply_to_page_range); int apply_to_existing_page_range(struct mm_struct *mm, unsigned long addr, unsigned long size, pte_fn_t fn, void *data) { - return __apply_to_page_range(mm, addr, size, fn, data, false); + return __apply_to_page_range(mm, addr, size, fn, data, 0); } =20 /* --=20 2.51.2