Re: [PATCH v7 12/16] arm: mm: define clear_user_highpages()

From: David Hildenbrand

Date: Tue Sep 30 2025 - 05:51:48 EST



assumes one of the following:
1. clear_user_highpages is defined by the architecture or,
2. HIGHMEM => arch defines clear_user_highpage or clear_user_page
3. !HIGHMEM => arch defines clear_user_pages or clear_user_page
Case 2 is fine, since ARM has clear_user_highpage().
Case 3 runs into a problem since ARM doesn't have clear_user_pages()
or clear_user_page() (it does have the second, but only with !CONFIG_MMU).

I think we should look into having a generic fallback version in common code
instead for that case, and not require the arch to implement such a loop around
clear_user_highpage().

So, as you suggested, I moved clear_user_pages() to mm/utils.c and
conditioned it on clear_user_page() also existing.

#if defined(clear_user_page) && !defined(clear_user_pages)
void clear_user_pages(void *addr, unsigned long vaddr, struct page *page,
unsigned int npages) {
...
}
#endif

That fixed this issue as well since there's no more bogus reference to
clear_user_page().

I'll have to see the resulting code to comment on details, but if we can handle it in
common code, all good.


Are there cases in which (TRANSPARENT_HUGEPAGE || HUGETLB) might be enabled
on ARM?

Arm has

arch/arm/Kconfig: select HAVE_ARCH_TRANSPARENT_HUGEPAGE if ARM_LPAE

and supports hugetlb. So yes on both.

--
Cheers

David / dhildenb