On Mon, Apr 27, 2026 at 12:45:49PM +0100, Kiryl Shutsemau (Meta) wrote: > pte_protnone() and pmd_protnone() detect present-but-inaccessible page > table entries. This capability is useful beyond NUMA balancing — for > example, userfaultfd working set tracking uses protnone PTEs to track > page access without unmapping pages. > > Introduce CONFIG_ARCH_HAS_PTE_PROTNONE to decouple the protnone PTE > infrastructure from CONFIG_NUMA_BALANCING. The six architectures that > support protnone PTEs (x86_64, arm64, powerpc, s390, riscv, loongarch) > now select this option, and CONFIG_NUMA_BALANCING depends on it. > > No functional change — the same set of architectures continues to have > working protnone support, but the infrastructure is now available > independently of NUMA balancing. > > Signed-off-by: Kiryl Shutsemau (Meta) <[email protected]> > Assisted-by: Claude:claude-opus-4-6
With a small nit below Acked-by: Mike Rapoport (Microsoft) <[email protected]> > --- > arch/arm64/Kconfig | 1 + > arch/arm64/include/asm/pgtable.h | 7 ++----- > arch/loongarch/Kconfig | 1 + > arch/loongarch/include/asm/pgtable.h | 4 ++-- > arch/powerpc/include/asm/book3s/64/pgtable.h | 8 +++---- > arch/powerpc/platforms/Kconfig.cputype | 1 + > arch/riscv/Kconfig | 1 + > arch/riscv/include/asm/pgtable.h | 7 ++----- > arch/s390/Kconfig | 1 + > arch/s390/include/asm/pgtable.h | 4 ++-- > arch/x86/Kconfig | 1 + > arch/x86/include/asm/pgtable.h | 8 ++----- > include/linux/pgtable.h | 22 +++++++++----------- > init/Kconfig | 8 +++++++ > mm/debug_vm_pgtable.c | 4 ++-- > 15 files changed, 40 insertions(+), 38 deletions(-) > > @@ -2052,18 +2052,12 @@ static inline int pud_trans_unstable(pud_t *pud) > return 0; > } > > -#ifndef CONFIG_NUMA_BALANCING > +#ifndef CONFIG_ARCH_HAS_PTE_PROTNONE > /* > - * In an inaccessible (PROT_NONE) VMA, pte_protnone() may indicate "yes". It > is > - * perfectly valid to indicate "no" in that case, which is why our default > - * implementation defaults to "always no". > - * > - * In an accessible VMA, however, pte_protnone() reliably indicates PROT_NONE > - * page protection due to NUMA hinting. NUMA hinting faults only apply in > - * accessible VMAs. > - * > - * So, to reliably identify PROT_NONE PTEs that require a NUMA hinting fault, > - * looking at the VMA accessibility is sufficient. I think it's better to rephrase the original comment so that it'll actually describe what pte_protnone() means rather than remove it altogether. > + * Stubs for architectures that do not support present-but-inaccessible > + * (PROT_NONE) page table entries. Generic code may still reference > + * PAGE_NONE from paths that fold to dead code on these arches; the > + * BUILD_BUG() fallback fires only if such a reference is actually live. > */ > static inline int pte_protnone(pte_t pte) > { > @@ -2074,7 +2068,11 @@ static inline int pmd_protnone(pmd_t pmd) > { > return 0; > } > -#endif /* CONFIG_NUMA_BALANCING */ > + > +#ifndef PAGE_NONE > +#define PAGE_NONE ({ BUILD_BUG(); (pgprot_t){0}; }) > +#endif > +#endif /* CONFIG_ARCH_HAS_PTE_PROTNONE */ > > #endif /* CONFIG_MMU */ -- Sincerely yours, Mike.

