On Mon, Jun 08, 2026 at 04:37:08AM -0400, Michael S. Tsirkin wrote:
> Now that the generic vma_alloc_zeroed_movable_folio() uses
> __GFP_ZERO, the arch-specific macros on alpha, m68k, s390, and
> x86 that did the same thing are redundant. Remove them.
>
> arm64 is not affected: it has a real function override that
> handles MTE tag zeroing, not just __GFP_ZERO.
>
> Suggested-by: David Hildenbrand <[email protected]>
> Acked-by: Magnus Lindholm <[email protected]>
> Acked-by: Greg Ungerer <[email protected]>
> Acked-by: Geert Uytterhoeven <[email protected]> # m68k
> Signed-off-by: Michael S. Tsirkin <[email protected]>
> Assisted-by: Claude:claude-opus-4-6
> Reviewed-by: Gregory Price <[email protected]>
> ---
> arch/alpha/include/asm/page.h | 3 ---
> arch/m68k/include/asm/page_no.h | 3 ---
> arch/s390/include/asm/page.h | 3 ---
> arch/x86/include/asm/page.h | 3 ---
> include/linux/highmem.h | 8 +++++---
> 5 files changed, 5 insertions(+), 15 deletions(-)
>
> diff --git a/arch/alpha/include/asm/page.h b/arch/alpha/include/asm/page.h
> index 59d01f9b77f6..4327029cd660 100644
> --- a/arch/alpha/include/asm/page.h
> +++ b/arch/alpha/include/asm/page.h
> @@ -12,9 +12,6 @@
>
> extern void clear_page(void *page);
>
> -#define vma_alloc_zeroed_movable_folio(vma, vaddr) \
> - vma_alloc_folio(GFP_HIGHUSER_MOVABLE | __GFP_ZERO, 0, vma, vaddr)
> -
> extern void copy_page(void * _to, void * _from);
> #define copy_user_page(to, from, vaddr, pg) copy_page(to, from)
>
> diff --git a/arch/m68k/include/asm/page_no.h b/arch/m68k/include/asm/page_no.h
> index d2532bc407ef..f511b763a235 100644
> --- a/arch/m68k/include/asm/page_no.h
> +++ b/arch/m68k/include/asm/page_no.h
> @@ -12,9 +12,6 @@ extern unsigned long memory_end;
>
> #define copy_user_page(to, from, vaddr, pg) copy_page(to, from)
>
> -#define vma_alloc_zeroed_movable_folio(vma, vaddr) \
> - vma_alloc_folio(GFP_HIGHUSER_MOVABLE | __GFP_ZERO, 0, vma, vaddr)
> -
> #define __pa(vaddr) ((unsigned long)(vaddr))
> #define __va(paddr) ((void *)((unsigned long)(paddr)))
>
> diff --git a/arch/s390/include/asm/page.h b/arch/s390/include/asm/page.h
> index 56da819a79e6..e995d2a413f9 100644
> --- a/arch/s390/include/asm/page.h
> +++ b/arch/s390/include/asm/page.h
> @@ -67,9 +67,6 @@ static inline void copy_page(void *to, void *from)
>
> #define copy_user_page(to, from, vaddr, pg) copy_page(to, from)
>
> -#define vma_alloc_zeroed_movable_folio(vma, vaddr) \
> - vma_alloc_folio(GFP_HIGHUSER_MOVABLE | __GFP_ZERO, 0, vma, vaddr)
> -
> #ifdef CONFIG_STRICT_MM_TYPECHECKS
> #define STRICT_MM_TYPECHECKS
> #endif
> diff --git a/arch/x86/include/asm/page.h b/arch/x86/include/asm/page.h
> index 416dc88e35c1..92fa975b46f3 100644
> --- a/arch/x86/include/asm/page.h
> +++ b/arch/x86/include/asm/page.h
> @@ -28,9 +28,6 @@ static inline void copy_user_page(void *to, void *from,
> unsigned long vaddr,
> copy_page(to, from);
> }
>
> -#define vma_alloc_zeroed_movable_folio(vma, vaddr) \
> - vma_alloc_folio(GFP_HIGHUSER_MOVABLE | __GFP_ZERO, 0, vma, vaddr)
> -
> #ifndef __pa
> #define __pa(x) __phys_addr((unsigned long)(x))
> #endif
> diff --git a/include/linux/highmem.h b/include/linux/highmem.h
> index 8b0afaabbc6e..642718a50c27 100644
> --- a/include/linux/highmem.h
> +++ b/include/linux/highmem.h
> @@ -303,7 +303,6 @@ static inline void clear_user_highpages(struct page
> *page, unsigned long vaddr,
> #endif
> }
>
> -#ifndef vma_alloc_zeroed_movable_folio
We're specifying this function unconditionally even though arm64 overrides?
> /**
> * vma_alloc_zeroed_movable_folio - Allocate a zeroed page for a VMA.
> * @vma: The VMA the page is to be allocated for.
> @@ -317,12 +316,15 @@ static inline void clear_user_highpages(struct page
> *page, unsigned long vaddr,
> * we are out of memory.
> */
> static inline
> -struct folio *vma_alloc_zeroed_movable_folio(struct vm_area_struct *vma,
> +struct folio *vma_alloc_zeroed_movable_folio_noprof(struct vm_area_struct
> *vma,
> unsigned long vaddr)
> {
> - return vma_alloc_folio(GFP_HIGHUSER_MOVABLE | __GFP_ZERO,
> + return vma_alloc_folio_noprof(GFP_HIGHUSER_MOVABLE | __GFP_ZERO,
> 0, vma, vaddr);
This whole change seems unnecessary?
> }
> +#ifndef vma_alloc_zeroed_movable_folio
> +#define vma_alloc_zeroed_movable_folio(...) \
> + alloc_hooks(vma_alloc_zeroed_movable_folio_noprof(__VA_ARGS__))
> #endif
I don't know why we need to add more of this alloc_hooks() dance when we could
just do:
#define vma_alloc_zeroed_movable_folio(vma, vaddr) \
vma_alloc_folio(GFP_HIGHUSER_MOVABLE | __GFP_ZERO, 0, vma, vaddr)
Like the existing arch stuff?
>
> static inline void clear_highpage(struct page *page)
> --
> MST
>
Thanks, Lorenzo