Skip to content

Commit 92638b4

Browse files
pccwilldeacon
authored andcommitted
mm: arch: remove indirection level in alloc_zeroed_user_highpage_movable()
In an upcoming change we would like to add a flag to GFP_HIGHUSER_MOVABLE so that it would no longer be an OR of GFP_HIGHUSER and __GFP_MOVABLE. This poses a problem for alloc_zeroed_user_highpage_movable() which passes __GFP_MOVABLE into an arch-specific __alloc_zeroed_user_highpage() hook which ORs in GFP_HIGHUSER. Since __alloc_zeroed_user_highpage() is only ever called from alloc_zeroed_user_highpage_movable(), we can remove one level of indirection here. Remove __alloc_zeroed_user_highpage(), make alloc_zeroed_user_highpage_movable() the hook, and use GFP_HIGHUSER_MOVABLE in the hook implementations so that they will pick up the new flag that we are going to add. Signed-off-by: Peter Collingbourne <pcc@google.com> Link: https://linux-review.googlesource.com/id/Ic6361c657b2cdcd896adbe0cf7cb5a7fbb1ed7bf Acked-by: Catalin Marinas <catalin.marinas@arm.com> Link: https://lore.kernel.org/r/20210602235230.3928842-2-pcc@google.com Signed-off-by: Will Deacon <will@kernel.org>
1 parent 3d0cca0 commit 92638b4

7 files changed

Lines changed: 26 additions & 45 deletions

File tree

arch/alpha/include/asm/page.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@
1717
extern void clear_page(void *page);
1818
#define clear_user_page(page, vaddr, pg) clear_page(page)
1919

20-
#define __alloc_zeroed_user_highpage(movableflags, vma, vaddr) \
21-
alloc_page_vma(GFP_HIGHUSER | __GFP_ZERO | movableflags, vma, vmaddr)
22-
#define __HAVE_ARCH_ALLOC_ZEROED_USER_HIGHPAGE
20+
#define alloc_zeroed_user_highpage_movable(vma, vaddr) \
21+
alloc_page_vma(GFP_HIGHUSER_MOVABLE | __GFP_ZERO, vma, vmaddr)
22+
#define __HAVE_ARCH_ALLOC_ZEROED_USER_HIGHPAGE_MOVABLE
2323

2424
extern void copy_page(void * _to, void * _from);
2525
#define copy_user_page(to, from, vaddr, pg) copy_page(to, from)

arch/arm64/include/asm/page.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,9 @@ void copy_user_highpage(struct page *to, struct page *from,
2828
void copy_highpage(struct page *to, struct page *from);
2929
#define __HAVE_ARCH_COPY_HIGHPAGE
3030

31-
#define __alloc_zeroed_user_highpage(movableflags, vma, vaddr) \
32-
alloc_page_vma(GFP_HIGHUSER | __GFP_ZERO | movableflags, vma, vaddr)
33-
#define __HAVE_ARCH_ALLOC_ZEROED_USER_HIGHPAGE
31+
#define alloc_zeroed_user_highpage_movable(vma, vaddr) \
32+
alloc_page_vma(GFP_HIGHUSER_MOVABLE | __GFP_ZERO, vma, vaddr)
33+
#define __HAVE_ARCH_ALLOC_ZEROED_USER_HIGHPAGE_MOVABLE
3434

3535
#define clear_user_page(page, vaddr, pg) clear_page(page)
3636
#define copy_user_page(to, from, vaddr, pg) copy_page(to, from)

arch/ia64/include/asm/page.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -82,16 +82,16 @@ do { \
8282
} while (0)
8383

8484

85-
#define __alloc_zeroed_user_highpage(movableflags, vma, vaddr) \
85+
#define alloc_zeroed_user_highpage_movable(vma, vaddr) \
8686
({ \
8787
struct page *page = alloc_page_vma( \
88-
GFP_HIGHUSER | __GFP_ZERO | movableflags, vma, vaddr); \
88+
GFP_HIGHUSER_MOVABLE | __GFP_ZERO, vma, vaddr); \
8989
if (page) \
9090
flush_dcache_page(page); \
9191
page; \
9292
})
9393

94-
#define __HAVE_ARCH_ALLOC_ZEROED_USER_HIGHPAGE
94+
#define __HAVE_ARCH_ALLOC_ZEROED_USER_HIGHPAGE_MOVABLE
9595

9696
#define virt_addr_valid(kaddr) pfn_valid(__pa(kaddr) >> PAGE_SHIFT)
9797

arch/m68k/include/asm/page_no.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@ extern unsigned long memory_end;
1313
#define clear_user_page(page, vaddr, pg) clear_page(page)
1414
#define copy_user_page(to, from, vaddr, pg) copy_page(to, from)
1515

16-
#define __alloc_zeroed_user_highpage(movableflags, vma, vaddr) \
17-
alloc_page_vma(GFP_HIGHUSER | __GFP_ZERO | movableflags, vma, vaddr)
18-
#define __HAVE_ARCH_ALLOC_ZEROED_USER_HIGHPAGE
16+
#define alloc_zeroed_user_highpage_movable(vma, vaddr) \
17+
alloc_page_vma(GFP_HIGHUSER_MOVABLE | __GFP_ZERO, vma, vaddr)
18+
#define __HAVE_ARCH_ALLOC_ZEROED_USER_HIGHPAGE_MOVABLE
1919

2020
#define __pa(vaddr) ((unsigned long)(vaddr))
2121
#define __va(paddr) ((void *)((unsigned long)(paddr)))

arch/s390/include/asm/page.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,9 +68,9 @@ static inline void copy_page(void *to, void *from)
6868
#define clear_user_page(page, vaddr, pg) clear_page(page)
6969
#define copy_user_page(to, from, vaddr, pg) copy_page(to, from)
7070

71-
#define __alloc_zeroed_user_highpage(movableflags, vma, vaddr) \
72-
alloc_page_vma(GFP_HIGHUSER | __GFP_ZERO | movableflags, vma, vaddr)
73-
#define __HAVE_ARCH_ALLOC_ZEROED_USER_HIGHPAGE
71+
#define alloc_zeroed_user_highpage_movable(vma, vaddr) \
72+
alloc_page_vma(GFP_HIGHUSER_MOVABLE | __GFP_ZERO, vma, vaddr)
73+
#define __HAVE_ARCH_ALLOC_ZEROED_USER_HIGHPAGE_MOVABLE
7474

7575
/*
7676
* These are used to make use of C type-checking..

arch/x86/include/asm/page.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,9 @@ static inline void copy_user_page(void *to, void *from, unsigned long vaddr,
3434
copy_page(to, from);
3535
}
3636

37-
#define __alloc_zeroed_user_highpage(movableflags, vma, vaddr) \
38-
alloc_page_vma(GFP_HIGHUSER | __GFP_ZERO | movableflags, vma, vaddr)
39-
#define __HAVE_ARCH_ALLOC_ZEROED_USER_HIGHPAGE
37+
#define alloc_zeroed_user_highpage_movable(vma, vaddr) \
38+
alloc_page_vma(GFP_HIGHUSER_MOVABLE | __GFP_ZERO, vma, vaddr)
39+
#define __HAVE_ARCH_ALLOC_ZEROED_USER_HIGHPAGE_MOVABLE
4040

4141
#ifndef __pa
4242
#define __pa(x) __phys_addr((unsigned long)(x))

include/linux/highmem.h

Lines changed: 8 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -152,28 +152,24 @@ static inline void clear_user_highpage(struct page *page, unsigned long vaddr)
152152
}
153153
#endif
154154

155-
#ifndef __HAVE_ARCH_ALLOC_ZEROED_USER_HIGHPAGE
155+
#ifndef __HAVE_ARCH_ALLOC_ZEROED_USER_HIGHPAGE_MOVABLE
156156
/**
157-
* __alloc_zeroed_user_highpage - Allocate a zeroed HIGHMEM page for a VMA with caller-specified movable GFP flags
158-
* @movableflags: The GFP flags related to the pages future ability to move like __GFP_MOVABLE
157+
* alloc_zeroed_user_highpage_movable - Allocate a zeroed HIGHMEM page for a VMA that the caller knows can move
159158
* @vma: The VMA the page is to be allocated for
160159
* @vaddr: The virtual address the page will be inserted into
161160
*
162-
* This function will allocate a page for a VMA but the caller is expected
163-
* to specify via movableflags whether the page will be movable in the
164-
* future or not
161+
* This function will allocate a page for a VMA that the caller knows will
162+
* be able to migrate in the future using move_pages() or reclaimed
165163
*
166164
* An architecture may override this function by defining
167-
* __HAVE_ARCH_ALLOC_ZEROED_USER_HIGHPAGE and providing their own
165+
* __HAVE_ARCH_ALLOC_ZEROED_USER_HIGHPAGE_MOVABLE and providing their own
168166
* implementation.
169167
*/
170168
static inline struct page *
171-
__alloc_zeroed_user_highpage(gfp_t movableflags,
172-
struct vm_area_struct *vma,
173-
unsigned long vaddr)
169+
alloc_zeroed_user_highpage_movable(struct vm_area_struct *vma,
170+
unsigned long vaddr)
174171
{
175-
struct page *page = alloc_page_vma(GFP_HIGHUSER | movableflags,
176-
vma, vaddr);
172+
struct page *page = alloc_page_vma(GFP_HIGHUSER_MOVABLE, vma, vaddr);
177173

178174
if (page)
179175
clear_user_highpage(page, vaddr);
@@ -182,21 +178,6 @@ __alloc_zeroed_user_highpage(gfp_t movableflags,
182178
}
183179
#endif
184180

185-
/**
186-
* alloc_zeroed_user_highpage_movable - Allocate a zeroed HIGHMEM page for a VMA that the caller knows can move
187-
* @vma: The VMA the page is to be allocated for
188-
* @vaddr: The virtual address the page will be inserted into
189-
*
190-
* This function will allocate a page for a VMA that the caller knows will
191-
* be able to migrate in the future using move_pages() or reclaimed
192-
*/
193-
static inline struct page *
194-
alloc_zeroed_user_highpage_movable(struct vm_area_struct *vma,
195-
unsigned long vaddr)
196-
{
197-
return __alloc_zeroed_user_highpage(__GFP_MOVABLE, vma, vaddr);
198-
}
199-
200181
static inline void clear_highpage(struct page *page)
201182
{
202183
void *kaddr = kmap_atomic(page);

0 commit comments

Comments
 (0)