Re: [PATCH v8 1/7] treewide: provide a generic clear_user_page() variant

David Hildenbrand (Red Hat)
2025-11-18T07:32:53Z

On 27.10.25 21:21, Ankur Arora wrote:
> From: David Hildenbrand <david@redhat.com>
>
> Let's drop all variants that effectively map to clear_page() and
> provide it in a generic variant instead.
>
> We'll use __HAVE_ARCH_CLEAR_USER_PAGE, similar to
> __HAVE_ARCH_COPY_USER_HIGHPAGE, to indicate whether an architecture
> provides it's own variant.
>
> We have to be a bit careful if an architecture provides a custom
> clear_user_highpage(), because then it's very likely that some special
> flushing magic is happening behind the scenes.
>
> Maybe at some point these should be CONFIG_ options.
>
> Note that for parisc, clear_page() and clear_user_page() map to
> clear_page_asm(), so we can just get rid of the custom clear_user_page()
> implementation. There is a clear_user_page_asm() function on parisc,
> that seems to be unused. Not sure what's up with that.
>
> Signed-off-by: David Hildenbrand <david@redhat.com>
> ---
> arch/alpha/include/asm/page.h | 1 -
> arch/arc/include/asm/page.h | 2 ++
> arch/arm/include/asm/page-nommu.h | 1 -
> arch/arm64/include/asm/page.h | 1 -
> arch/csky/abiv1/inc/abi/page.h | 1 +
> arch/csky/abiv2/inc/abi/page.h | 7 -------
> arch/hexagon/include/asm/page.h | 1 -
> arch/loongarch/include/asm/page.h | 1 -
> arch/m68k/include/asm/page_mm.h | 1 +
> arch/m68k/include/asm/page_no.h | 1 -
> arch/microblaze/include/asm/page.h | 1 -
> arch/mips/include/asm/page.h | 1 +
> arch/nios2/include/asm/page.h | 1 +
> arch/openrisc/include/asm/page.h | 1 -
> arch/parisc/include/asm/page.h | 1 -
> arch/powerpc/include/asm/page.h | 1 +
> arch/riscv/include/asm/page.h | 1 -
> arch/s390/include/asm/page.h | 1 -
> arch/sparc/include/asm/page_32.h | 2 ++
> arch/sparc/include/asm/page_64.h | 1 +
> arch/um/include/asm/page.h | 1 -
> arch/x86/include/asm/page.h | 6 ------
> arch/xtensa/include/asm/page.h | 1 -
> include/linux/mm.h | 22 ++++++++++++++++++++++
> 24 files changed, 32 insertions(+), 26 deletions(-)
>
> diff --git a/arch/alpha/include/asm/page.h b/arch/alpha/include/asm/page.h
> index 5ec4c77e432e..d71ef845deca 100644
> --- a/arch/alpha/include/asm/page.h
> +++ b/arch/alpha/include/asm/page.h
> @@ -11,7 +11,6 @@
> #define STRICT_MM_TYPECHECKS
>
> extern void clear_page(void *page);
> -#define clear_user_page(page, vaddr, pg) clear_page(page)
>
> #define vma_alloc_zeroed_movable_folio(vma, vaddr) \
> vma_alloc_folio(GFP_HIGHUSER_MOVABLE | __GFP_ZERO, 0, vma, vaddr)
> diff --git a/arch/arc/include/asm/page.h b/arch/arc/include/asm/page.h
> index 9720fe6b2c24..cb4d69b473e6 100644
> --- a/arch/arc/include/asm/page.h
> +++ b/arch/arc/include/asm/page.h
> @@ -32,6 +32,8 @@ struct page;
>
> void copy_user_highpage(struct page *to, struct page *from,
> unsigned long u_vaddr, struct vm_area_struct *vma);
> +
> +#define __HAVE_ARCH_CLEAR_USER_PAGE

After talking to Linus, the preferred way here is using

#define clear_user_page clear_user_page

Can you adjust the patch (+description) to avoid
__HAVE_ARCH_CLEAR_USER_PAGE? If you want me to do it, just let me know.

--
Cheers

David