summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoel Fernandes (Google) <joel@joelfernandes.org>2019-01-03 18:28:34 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2019-01-04 16:13:47 -0500
commit4cf58924951ef80eec636b863e7a53973c44261a (patch)
tree388816f0df0547713a1977d3aa8f120065822487
parentff1522bb7d98450c72aea729f0b4147bc9986aed (diff)
mm: treewide: remove unused address argument from pte_alloc functions
Patch series "Add support for fast mremap". This series speeds up the mremap(2) syscall by copying page tables at the PMD level even for non-THP systems. There is concern that the extra 'address' argument that mremap passes to pte_alloc may do something subtle architecture related in the future that may make the scheme not work. Also we find that there is no point in passing the 'address' to pte_alloc since its unused. This patch therefore removes this argument tree-wide resulting in a nice negative diff as well. Also ensuring along the way that the enabled architectures do not do anything funky with the 'address' argument that goes unnoticed by the optimization. Build and boot tested on x86-64. Build tested on arm64. The config enablement patch for arm64 will be posted in the future after more testing. The changes were obtained by applying the following Coccinelle script. (thanks Julia for answering all Coccinelle questions!). Following fix ups were done manually: * Removal of address argument from pte_fragment_alloc * Removal of pte_alloc_one_fast definitions from m68k and microblaze. // Options: --include-headers --no-includes // Note: I split the 'identifier fn' line, so if you are manually // running it, please unsplit it so it runs for you. virtual patch @pte_alloc_func_def depends on patch exists@ identifier E2; identifier fn =~ "^(__pte_alloc|pte_alloc_one|pte_alloc|__pte_alloc_kernel|pte_alloc_one_kernel)$"; type T2; @@ fn(... - , T2 E2 ) { ... } @pte_alloc_func_proto_noarg depends on patch exists@ type T1, T2, T3, T4; identifier fn =~ "^(__pte_alloc|pte_alloc_one|pte_alloc|__pte_alloc_kernel|pte_alloc_one_kernel)$"; @@ ( - T3 fn(T1, T2); + T3 fn(T1); | - T3 fn(T1, T2, T4); + T3 fn(T1, T2); ) @pte_alloc_func_proto depends on patch exists@ identifier E1, E2, E4; type T1, T2, T3, T4; identifier fn =~ "^(__pte_alloc|pte_alloc_one|pte_alloc|__pte_alloc_kernel|pte_alloc_one_kernel)$"; @@ ( - T3 fn(T1 E1, T2 E2); + T3 fn(T1 E1); | - T3 fn(T1 E1, T2 E2, T4 E4); + T3 fn(T1 E1, T2 E2); ) @pte_alloc_func_call depends on patch exists@ expression E2; identifier fn =~ "^(__pte_alloc|pte_alloc_one|pte_alloc|__pte_alloc_kernel|pte_alloc_one_kernel)$"; @@ fn(... -, E2 ) @pte_alloc_macro depends on patch exists@ identifier fn =~ "^(__pte_alloc|pte_alloc_one|pte_alloc|__pte_alloc_kernel|pte_alloc_one_kernel)$"; identifier a, b, c; expression e; position p; @@ ( - #define fn(a, b, c) e + #define fn(a, b) e | - #define fn(a, b) e + #define fn(a) e ) Link: http://lkml.kernel.org/r/20181108181201.88826-2-joelaf@google.com Signed-off-by: Joel Fernandes (Google) <joel@joelfernandes.org> Suggested-by: Kirill A. Shutemov <kirill@shutemov.name> Acked-by: Kirill A. Shutemov <kirill@shutemov.name> Cc: Michal Hocko <mhocko@kernel.org> Cc: Julia Lawall <Julia.Lawall@lip6.fr> Cc: Kirill A. Shutemov <kirill@shutemov.name> Cc: William Kucharski <william.kucharski@oracle.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r--arch/alpha/include/asm/pgalloc.h6
-rw-r--r--arch/arc/include/asm/pgalloc.h5
-rw-r--r--arch/arm/include/asm/pgalloc.h4
-rw-r--r--arch/arm64/include/asm/pgalloc.h4
-rw-r--r--arch/hexagon/include/asm/pgalloc.h6
-rw-r--r--arch/ia64/include/asm/pgalloc.h5
-rw-r--r--arch/m68k/include/asm/mcf_pgalloc.h8
-rw-r--r--arch/m68k/include/asm/motorola_pgalloc.h4
-rw-r--r--arch/m68k/include/asm/sun3_pgalloc.h6
-rw-r--r--arch/microblaze/include/asm/pgalloc.h19
-rw-r--r--arch/microblaze/mm/pgtable.c3
-rw-r--r--arch/mips/include/asm/pgalloc.h6
-rw-r--r--arch/nds32/include/asm/pgalloc.h5
-rw-r--r--arch/nios2/include/asm/pgalloc.h6
-rw-r--r--arch/openrisc/include/asm/pgalloc.h5
-rw-r--r--arch/openrisc/mm/ioremap.c3
-rw-r--r--arch/parisc/include/asm/pgalloc.h4
-rw-r--r--arch/powerpc/include/asm/book3s/32/pgalloc.h6
-rw-r--r--arch/powerpc/include/asm/book3s/64/pgalloc.h12
-rw-r--r--arch/powerpc/include/asm/nohash/32/pgalloc.h6
-rw-r--r--arch/powerpc/include/asm/nohash/64/pgalloc.h6
-rw-r--r--arch/powerpc/mm/pgtable-frag.c2
-rw-r--r--arch/powerpc/mm/pgtable_32.c8
-rw-r--r--arch/riscv/include/asm/pgalloc.h6
-rw-r--r--arch/s390/include/asm/pgalloc.h4
-rw-r--r--arch/sh/include/asm/pgalloc.h6
-rw-r--r--arch/sparc/include/asm/pgalloc_32.h5
-rw-r--r--arch/sparc/include/asm/pgalloc_64.h6
-rw-r--r--arch/sparc/mm/init_64.c6
-rw-r--r--arch/sparc/mm/srmmu.c4
-rw-r--r--arch/um/include/asm/pgalloc.h4
-rw-r--r--arch/um/kernel/mem.c4
-rw-r--r--arch/unicore32/include/asm/pgalloc.h4
-rw-r--r--arch/x86/include/asm/pgalloc.h4
-rw-r--r--arch/x86/mm/pgtable.c4
-rw-r--r--arch/xtensa/include/asm/pgalloc.h8
-rw-r--r--include/linux/mm.h13
-rw-r--r--mm/huge_memory.c8
-rw-r--r--mm/kasan/init.c2
-rw-r--r--mm/memory.c17
-rw-r--r--mm/migrate.c2
-rw-r--r--mm/mremap.c2
-rw-r--r--mm/userfaultfd.c2
-rw-r--r--virt/kvm/arm/mmu.c2
44 files changed, 101 insertions, 151 deletions
diff --git a/arch/alpha/include/asm/pgalloc.h b/arch/alpha/include/asm/pgalloc.h
index ab3e3a8638fb..02f9f91bb4f0 100644
--- a/arch/alpha/include/asm/pgalloc.h
+++ b/arch/alpha/include/asm/pgalloc.h
@@ -52,7 +52,7 @@ pmd_free(struct mm_struct *mm, pmd_t *pmd)
52} 52}
53 53
54static inline pte_t * 54static inline pte_t *
55pte_alloc_one_kernel(struct mm_struct *mm, unsigned long address) 55pte_alloc_one_kernel(struct mm_struct *mm)
56{ 56{
57 pte_t *pte = (pte_t *)__get_free_page(GFP_KERNEL|__GFP_ZERO); 57 pte_t *pte = (pte_t *)__get_free_page(GFP_KERNEL|__GFP_ZERO);
58 return pte; 58 return pte;
@@ -65,9 +65,9 @@ pte_free_kernel(struct mm_struct *mm, pte_t *pte)
65} 65}
66 66
67static inline pgtable_t 67static inline pgtable_t
68pte_alloc_one(struct mm_struct *mm, unsigned long address) 68pte_alloc_one(struct mm_struct *mm)
69{ 69{
70 pte_t *pte = pte_alloc_one_kernel(mm, address); 70 pte_t *pte = pte_alloc_one_kernel(mm);
71 struct page *page; 71 struct page *page;
72 72
73 if (!pte) 73 if (!pte)
diff --git a/arch/arc/include/asm/pgalloc.h b/arch/arc/include/asm/pgalloc.h
index 3749234b7419..9c9b5a5ebf2e 100644
--- a/arch/arc/include/asm/pgalloc.h
+++ b/arch/arc/include/asm/pgalloc.h
@@ -90,8 +90,7 @@ static inline int __get_order_pte(void)
90 return get_order(PTRS_PER_PTE * sizeof(pte_t)); 90 return get_order(PTRS_PER_PTE * sizeof(pte_t));
91} 91}
92 92
93static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, 93static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm)
94 unsigned long address)
95{ 94{
96 pte_t *pte; 95 pte_t *pte;
97 96
@@ -102,7 +101,7 @@ static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm,
102} 101}
103 102
104static inline pgtable_t 103static inline pgtable_t
105pte_alloc_one(struct mm_struct *mm, unsigned long address) 104pte_alloc_one(struct mm_struct *mm)
106{ 105{
107 pgtable_t pte_pg; 106 pgtable_t pte_pg;
108 struct page *page; 107 struct page *page;
diff --git a/arch/arm/include/asm/pgalloc.h b/arch/arm/include/asm/pgalloc.h
index 2d7344f0e208..17ab72f0cc4e 100644
--- a/arch/arm/include/asm/pgalloc.h
+++ b/arch/arm/include/asm/pgalloc.h
@@ -81,7 +81,7 @@ static inline void clean_pte_table(pte_t *pte)
81 * +------------+ 81 * +------------+
82 */ 82 */
83static inline pte_t * 83static inline pte_t *
84pte_alloc_one_kernel(struct mm_struct *mm, unsigned long addr) 84pte_alloc_one_kernel(struct mm_struct *mm)
85{ 85{
86 pte_t *pte; 86 pte_t *pte;
87 87
@@ -93,7 +93,7 @@ pte_alloc_one_kernel(struct mm_struct *mm, unsigned long addr)
93} 93}
94 94
95static inline pgtable_t 95static inline pgtable_t
96pte_alloc_one(struct mm_struct *mm, unsigned long addr) 96pte_alloc_one(struct mm_struct *mm)
97{ 97{
98 struct page *pte; 98 struct page *pte;
99 99
diff --git a/arch/arm64/include/asm/pgalloc.h b/arch/arm64/include/asm/pgalloc.h
index 2e05bcd944c8..52fa47c73bf0 100644
--- a/arch/arm64/include/asm/pgalloc.h
+++ b/arch/arm64/include/asm/pgalloc.h
@@ -91,13 +91,13 @@ extern pgd_t *pgd_alloc(struct mm_struct *mm);
91extern void pgd_free(struct mm_struct *mm, pgd_t *pgdp); 91extern void pgd_free(struct mm_struct *mm, pgd_t *pgdp);
92 92
93static inline pte_t * 93static inline pte_t *
94pte_alloc_one_kernel(struct mm_struct *mm, unsigned long addr) 94pte_alloc_one_kernel(struct mm_struct *mm)
95{ 95{
96 return (pte_t *)__get_free_page(PGALLOC_GFP); 96 return (pte_t *)__get_free_page(PGALLOC_GFP);
97} 97}
98 98
99static inline pgtable_t 99static inline pgtable_t
100pte_alloc_one(struct mm_struct *mm, unsigned long addr) 100pte_alloc_one(struct mm_struct *mm)
101{ 101{
102 struct page *pte; 102 struct page *pte;
103 103
diff --git a/arch/hexagon/include/asm/pgalloc.h b/arch/hexagon/include/asm/pgalloc.h
index eeebf862c46c..d36183887b60 100644
--- a/arch/hexagon/include/asm/pgalloc.h
+++ b/arch/hexagon/include/asm/pgalloc.h
@@ -59,8 +59,7 @@ static inline void pgd_free(struct mm_struct *mm, pgd_t *pgd)
59 free_page((unsigned long) pgd); 59 free_page((unsigned long) pgd);
60} 60}
61 61
62static inline struct page *pte_alloc_one(struct mm_struct *mm, 62static inline struct page *pte_alloc_one(struct mm_struct *mm)
63 unsigned long address)
64{ 63{
65 struct page *pte; 64 struct page *pte;
66 65
@@ -75,8 +74,7 @@ static inline struct page *pte_alloc_one(struct mm_struct *mm,
75} 74}
76 75
77/* _kernel variant gets to use a different allocator */ 76/* _kernel variant gets to use a different allocator */
78static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, 77static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm)
79 unsigned long address)
80{ 78{
81 gfp_t flags = GFP_KERNEL | __GFP_ZERO; 79 gfp_t flags = GFP_KERNEL | __GFP_ZERO;
82 return (pte_t *) __get_free_page(flags); 80 return (pte_t *) __get_free_page(flags);
diff --git a/arch/ia64/include/asm/pgalloc.h b/arch/ia64/include/asm/pgalloc.h
index 3ee5362f2661..c9e481023c25 100644
--- a/arch/ia64/include/asm/pgalloc.h
+++ b/arch/ia64/include/asm/pgalloc.h
@@ -83,7 +83,7 @@ pmd_populate_kernel(struct mm_struct *mm, pmd_t * pmd_entry, pte_t * pte)
83 pmd_val(*pmd_entry) = __pa(pte); 83 pmd_val(*pmd_entry) = __pa(pte);
84} 84}
85 85
86static inline pgtable_t pte_alloc_one(struct mm_struct *mm, unsigned long addr) 86static inline pgtable_t pte_alloc_one(struct mm_struct *mm)
87{ 87{
88 struct page *page; 88 struct page *page;
89 void *pg; 89 void *pg;
@@ -99,8 +99,7 @@ static inline pgtable_t pte_alloc_one(struct mm_struct *mm, unsigned long addr)
99 return page; 99 return page;
100} 100}
101 101
102static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, 102static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm)
103 unsigned long addr)
104{ 103{
105 return quicklist_alloc(0, GFP_KERNEL, NULL); 104 return quicklist_alloc(0, GFP_KERNEL, NULL);
106} 105}
diff --git a/arch/m68k/include/asm/mcf_pgalloc.h b/arch/m68k/include/asm/mcf_pgalloc.h
index 12fe700632f4..4399d712f6db 100644
--- a/arch/m68k/include/asm/mcf_pgalloc.h
+++ b/arch/m68k/include/asm/mcf_pgalloc.h
@@ -12,8 +12,7 @@ extern inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte)
12 12
13extern const char bad_pmd_string[]; 13extern const char bad_pmd_string[];
14 14
15extern inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, 15extern inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm)
16 unsigned long address)
17{ 16{
18 unsigned long page = __get_free_page(GFP_DMA); 17 unsigned long page = __get_free_page(GFP_DMA);
19 18
@@ -32,8 +31,6 @@ extern inline pmd_t *pmd_alloc_kernel(pgd_t *pgd, unsigned long address)
32#define pmd_alloc_one_fast(mm, address) ({ BUG(); ((pmd_t *)1); }) 31#define pmd_alloc_one_fast(mm, address) ({ BUG(); ((pmd_t *)1); })
33#define pmd_alloc_one(mm, address) ({ BUG(); ((pmd_t *)2); }) 32#define pmd_alloc_one(mm, address) ({ BUG(); ((pmd_t *)2); })
34 33
35#define pte_alloc_one_fast(mm, addr) pte_alloc_one(mm, addr)
36
37#define pmd_populate(mm, pmd, page) (pmd_val(*pmd) = \ 34#define pmd_populate(mm, pmd, page) (pmd_val(*pmd) = \
38 (unsigned long)(page_address(page))) 35 (unsigned long)(page_address(page)))
39 36
@@ -50,8 +47,7 @@ static inline void __pte_free_tlb(struct mmu_gather *tlb, pgtable_t page,
50 47
51#define __pmd_free_tlb(tlb, pmd, address) do { } while (0) 48#define __pmd_free_tlb(tlb, pmd, address) do { } while (0)
52 49
53static inline struct page *pte_alloc_one(struct mm_struct *mm, 50static inline struct page *pte_alloc_one(struct mm_struct *mm)
54 unsigned long address)
55{ 51{
56 struct page *page = alloc_pages(GFP_DMA, 0); 52 struct page *page = alloc_pages(GFP_DMA, 0);
57 pte_t *pte; 53 pte_t *pte;
diff --git a/arch/m68k/include/asm/motorola_pgalloc.h b/arch/m68k/include/asm/motorola_pgalloc.h
index 7859a86319cf..d04d9ba9b976 100644
--- a/arch/m68k/include/asm/motorola_pgalloc.h
+++ b/arch/m68k/include/asm/motorola_pgalloc.h
@@ -8,7 +8,7 @@
8extern pmd_t *get_pointer_table(void); 8extern pmd_t *get_pointer_table(void);
9extern int free_pointer_table(pmd_t *); 9extern int free_pointer_table(pmd_t *);
10 10
11static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long address) 11static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm)
12{ 12{
13 pte_t *pte; 13 pte_t *pte;
14 14
@@ -28,7 +28,7 @@ static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte)
28 free_page((unsigned long) pte); 28 free_page((unsigned long) pte);
29} 29}
30 30
31static inline pgtable_t pte_alloc_one(struct mm_struct *mm, unsigned long address) 31static inline pgtable_t pte_alloc_one(struct mm_struct *mm)
32{ 32{
33 struct page *page; 33 struct page *page;
34 pte_t *pte; 34 pte_t *pte;
diff --git a/arch/m68k/include/asm/sun3_pgalloc.h b/arch/m68k/include/asm/sun3_pgalloc.h
index 11485d38de4e..1456c5eecbd9 100644
--- a/arch/m68k/include/asm/sun3_pgalloc.h
+++ b/arch/m68k/include/asm/sun3_pgalloc.h
@@ -35,8 +35,7 @@ do { \
35 tlb_remove_page((tlb), pte); \ 35 tlb_remove_page((tlb), pte); \
36} while (0) 36} while (0)
37 37
38static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, 38static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm)
39 unsigned long address)
40{ 39{
41 unsigned long page = __get_free_page(GFP_KERNEL); 40 unsigned long page = __get_free_page(GFP_KERNEL);
42 41
@@ -47,8 +46,7 @@ static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm,
47 return (pte_t *) (page); 46 return (pte_t *) (page);
48} 47}
49 48
50static inline pgtable_t pte_alloc_one(struct mm_struct *mm, 49static inline pgtable_t pte_alloc_one(struct mm_struct *mm)
51 unsigned long address)
52{ 50{
53 struct page *page = alloc_pages(GFP_KERNEL, 0); 51 struct page *page = alloc_pages(GFP_KERNEL, 0);
54 52
diff --git a/arch/microblaze/include/asm/pgalloc.h b/arch/microblaze/include/asm/pgalloc.h
index 7c89390c0c13..f4cc9ffc449e 100644
--- a/arch/microblaze/include/asm/pgalloc.h
+++ b/arch/microblaze/include/asm/pgalloc.h
@@ -108,10 +108,9 @@ static inline void free_pgd_slow(pgd_t *pgd)
108#define pmd_alloc_one_fast(mm, address) ({ BUG(); ((pmd_t *)1); }) 108#define pmd_alloc_one_fast(mm, address) ({ BUG(); ((pmd_t *)1); })
109#define pmd_alloc_one(mm, address) ({ BUG(); ((pmd_t *)2); }) 109#define pmd_alloc_one(mm, address) ({ BUG(); ((pmd_t *)2); })
110 110
111extern pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long addr); 111extern pte_t *pte_alloc_one_kernel(struct mm_struct *mm);
112 112
113static inline struct page *pte_alloc_one(struct mm_struct *mm, 113static inline struct page *pte_alloc_one(struct mm_struct *mm)
114 unsigned long address)
115{ 114{
116 struct page *ptepage; 115 struct page *ptepage;
117 116
@@ -132,20 +131,6 @@ static inline struct page *pte_alloc_one(struct mm_struct *mm,
132 return ptepage; 131 return ptepage;
133} 132}
134 133
135static inline pte_t *pte_alloc_one_fast(struct mm_struct *mm,
136 unsigned long address)
137{
138 unsigned long *ret;
139
140 ret = pte_quicklist;
141 if (ret != NULL) {
142 pte_quicklist = (unsigned long *)(*ret);
143 ret[0] = 0;
144 pgtable_cache_size--;
145 }
146 return (pte_t *)ret;
147}
148
149static inline void pte_free_fast(pte_t *pte) 134static inline void pte_free_fast(pte_t *pte)
150{ 135{
151 *(unsigned long **)pte = pte_quicklist; 136 *(unsigned long **)pte = pte_quicklist;
diff --git a/arch/microblaze/mm/pgtable.c b/arch/microblaze/mm/pgtable.c
index 7f525962cdfa..c2ce1e42b888 100644
--- a/arch/microblaze/mm/pgtable.c
+++ b/arch/microblaze/mm/pgtable.c
@@ -235,8 +235,7 @@ unsigned long iopa(unsigned long addr)
235 return pa; 235 return pa;
236} 236}
237 237
238__ref pte_t *pte_alloc_one_kernel(struct mm_struct *mm, 238__ref pte_t *pte_alloc_one_kernel(struct mm_struct *mm)
239 unsigned long address)
240{ 239{
241 pte_t *pte; 240 pte_t *pte;
242 if (mem_init_done) { 241 if (mem_init_done) {
diff --git a/arch/mips/include/asm/pgalloc.h b/arch/mips/include/asm/pgalloc.h
index 39b9f311c4ef..27808d9461f4 100644
--- a/arch/mips/include/asm/pgalloc.h
+++ b/arch/mips/include/asm/pgalloc.h
@@ -50,14 +50,12 @@ static inline void pgd_free(struct mm_struct *mm, pgd_t *pgd)
50 free_pages((unsigned long)pgd, PGD_ORDER); 50 free_pages((unsigned long)pgd, PGD_ORDER);
51} 51}
52 52
53static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, 53static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm)
54 unsigned long address)
55{ 54{
56 return (pte_t *)__get_free_pages(GFP_KERNEL | __GFP_ZERO, PTE_ORDER); 55 return (pte_t *)__get_free_pages(GFP_KERNEL | __GFP_ZERO, PTE_ORDER);
57} 56}
58 57
59static inline struct page *pte_alloc_one(struct mm_struct *mm, 58static inline struct page *pte_alloc_one(struct mm_struct *mm)
60 unsigned long address)
61{ 59{
62 struct page *pte; 60 struct page *pte;
63 61
diff --git a/arch/nds32/include/asm/pgalloc.h b/arch/nds32/include/asm/pgalloc.h
index 27448869131a..3c5fee5b5759 100644
--- a/arch/nds32/include/asm/pgalloc.h
+++ b/arch/nds32/include/asm/pgalloc.h
@@ -22,8 +22,7 @@ extern void pgd_free(struct mm_struct *mm, pgd_t * pgd);
22 22
23#define check_pgt_cache() do { } while (0) 23#define check_pgt_cache() do { } while (0)
24 24
25static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, 25static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm)
26 unsigned long addr)
27{ 26{
28 pte_t *pte; 27 pte_t *pte;
29 28
@@ -34,7 +33,7 @@ static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm,
34 return pte; 33 return pte;
35} 34}
36 35
37static inline pgtable_t pte_alloc_one(struct mm_struct *mm, unsigned long addr) 36static inline pgtable_t pte_alloc_one(struct mm_struct *mm)
38{ 37{
39 pgtable_t pte; 38 pgtable_t pte;
40 39
diff --git a/arch/nios2/include/asm/pgalloc.h b/arch/nios2/include/asm/pgalloc.h
index bb47d08c8ef7..3a149ead1207 100644
--- a/arch/nios2/include/asm/pgalloc.h
+++ b/arch/nios2/include/asm/pgalloc.h
@@ -37,8 +37,7 @@ static inline void pgd_free(struct mm_struct *mm, pgd_t *pgd)
37 free_pages((unsigned long)pgd, PGD_ORDER); 37 free_pages((unsigned long)pgd, PGD_ORDER);
38} 38}
39 39
40static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, 40static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm)
41 unsigned long address)
42{ 41{
43 pte_t *pte; 42 pte_t *pte;
44 43
@@ -47,8 +46,7 @@ static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm,
47 return pte; 46 return pte;
48} 47}
49 48
50static inline pgtable_t pte_alloc_one(struct mm_struct *mm, 49static inline pgtable_t pte_alloc_one(struct mm_struct *mm)
51 unsigned long address)
52{ 50{
53 struct page *pte; 51 struct page *pte;
54 52
diff --git a/arch/openrisc/include/asm/pgalloc.h b/arch/openrisc/include/asm/pgalloc.h
index 8999b9226512..149c82ee4b8b 100644
--- a/arch/openrisc/include/asm/pgalloc.h
+++ b/arch/openrisc/include/asm/pgalloc.h
@@ -70,10 +70,9 @@ static inline void pgd_free(struct mm_struct *mm, pgd_t *pgd)
70 free_page((unsigned long)pgd); 70 free_page((unsigned long)pgd);
71} 71}
72 72
73extern pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long address); 73extern pte_t *pte_alloc_one_kernel(struct mm_struct *mm);
74 74
75static inline struct page *pte_alloc_one(struct mm_struct *mm, 75static inline struct page *pte_alloc_one(struct mm_struct *mm)
76 unsigned long address)
77{ 76{
78 struct page *pte; 77 struct page *pte;
79 pte = alloc_pages(GFP_KERNEL, 0); 78 pte = alloc_pages(GFP_KERNEL, 0);
diff --git a/arch/openrisc/mm/ioremap.c b/arch/openrisc/mm/ioremap.c
index c9697529b3f0..270d1c9bc0d6 100644
--- a/arch/openrisc/mm/ioremap.c
+++ b/arch/openrisc/mm/ioremap.c
@@ -118,8 +118,7 @@ EXPORT_SYMBOL(iounmap);
118 * the memblock infrastructure. 118 * the memblock infrastructure.
119 */ 119 */
120 120
121pte_t __ref *pte_alloc_one_kernel(struct mm_struct *mm, 121pte_t __ref *pte_alloc_one_kernel(struct mm_struct *mm)
122 unsigned long address)
123{ 122{
124 pte_t *pte; 123 pte_t *pte;
125 124
diff --git a/arch/parisc/include/asm/pgalloc.h b/arch/parisc/include/asm/pgalloc.h
index cf13275f7c6d..d05c678c77c4 100644
--- a/arch/parisc/include/asm/pgalloc.h
+++ b/arch/parisc/include/asm/pgalloc.h
@@ -122,7 +122,7 @@ pmd_populate_kernel(struct mm_struct *mm, pmd_t *pmd, pte_t *pte)
122#define pmd_pgtable(pmd) pmd_page(pmd) 122#define pmd_pgtable(pmd) pmd_page(pmd)
123 123
124static inline pgtable_t 124static inline pgtable_t
125pte_alloc_one(struct mm_struct *mm, unsigned long address) 125pte_alloc_one(struct mm_struct *mm)
126{ 126{
127 struct page *page = alloc_page(GFP_KERNEL|__GFP_ZERO); 127 struct page *page = alloc_page(GFP_KERNEL|__GFP_ZERO);
128 if (!page) 128 if (!page)
@@ -135,7 +135,7 @@ pte_alloc_one(struct mm_struct *mm, unsigned long address)
135} 135}
136 136
137static inline pte_t * 137static inline pte_t *
138pte_alloc_one_kernel(struct mm_struct *mm, unsigned long addr) 138pte_alloc_one_kernel(struct mm_struct *mm)
139{ 139{
140 pte_t *pte = (pte_t *)__get_free_page(GFP_KERNEL|__GFP_ZERO); 140 pte_t *pte = (pte_t *)__get_free_page(GFP_KERNEL|__GFP_ZERO);
141 return pte; 141 return pte;
diff --git a/arch/powerpc/include/asm/book3s/32/pgalloc.h b/arch/powerpc/include/asm/book3s/32/pgalloc.h
index b5b955eb2fb7..3633502e102c 100644
--- a/arch/powerpc/include/asm/book3s/32/pgalloc.h
+++ b/arch/powerpc/include/asm/book3s/32/pgalloc.h
@@ -61,10 +61,10 @@ static inline void pmd_populate(struct mm_struct *mm, pmd_t *pmdp,
61 61
62#define pmd_pgtable(pmd) ((pgtable_t)pmd_page_vaddr(pmd)) 62#define pmd_pgtable(pmd) ((pgtable_t)pmd_page_vaddr(pmd))
63 63
64extern pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long addr); 64extern pte_t *pte_alloc_one_kernel(struct mm_struct *mm);
65extern pgtable_t pte_alloc_one(struct mm_struct *mm, unsigned long addr); 65extern pgtable_t pte_alloc_one(struct mm_struct *mm);
66void pte_frag_destroy(void *pte_frag); 66void pte_frag_destroy(void *pte_frag);
67pte_t *pte_fragment_alloc(struct mm_struct *mm, unsigned long vmaddr, int kernel); 67pte_t *pte_fragment_alloc(struct mm_struct *mm, int kernel);
68void pte_fragment_free(unsigned long *table, int kernel); 68void pte_fragment_free(unsigned long *table, int kernel);
69 69
70static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte) 70static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte)
diff --git a/arch/powerpc/include/asm/book3s/64/pgalloc.h b/arch/powerpc/include/asm/book3s/64/pgalloc.h
index 4aba625389c4..9c1173283b96 100644
--- a/arch/powerpc/include/asm/book3s/64/pgalloc.h
+++ b/arch/powerpc/include/asm/book3s/64/pgalloc.h
@@ -39,7 +39,7 @@ extern struct vmemmap_backing *vmemmap_list;
39extern struct kmem_cache *pgtable_cache[]; 39extern struct kmem_cache *pgtable_cache[];
40#define PGT_CACHE(shift) pgtable_cache[shift] 40#define PGT_CACHE(shift) pgtable_cache[shift]
41 41
42extern pte_t *pte_fragment_alloc(struct mm_struct *, unsigned long, int); 42extern pte_t *pte_fragment_alloc(struct mm_struct *, int);
43extern pmd_t *pmd_fragment_alloc(struct mm_struct *, unsigned long); 43extern pmd_t *pmd_fragment_alloc(struct mm_struct *, unsigned long);
44extern void pte_fragment_free(unsigned long *, int); 44extern void pte_fragment_free(unsigned long *, int);
45extern void pmd_fragment_free(unsigned long *); 45extern void pmd_fragment_free(unsigned long *);
@@ -190,16 +190,14 @@ static inline pgtable_t pmd_pgtable(pmd_t pmd)
190 return (pgtable_t)pmd_page_vaddr(pmd); 190 return (pgtable_t)pmd_page_vaddr(pmd);
191} 191}
192 192
193static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, 193static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm)
194 unsigned long address)
195{ 194{
196 return (pte_t *)pte_fragment_alloc(mm, address, 1); 195 return (pte_t *)pte_fragment_alloc(mm, 1);
197} 196}
198 197
199static inline pgtable_t pte_alloc_one(struct mm_struct *mm, 198static inline pgtable_t pte_alloc_one(struct mm_struct *mm)
200 unsigned long address)
201{ 199{
202 return (pgtable_t)pte_fragment_alloc(mm, address, 0); 200 return (pgtable_t)pte_fragment_alloc(mm, 0);
203} 201}
204 202
205static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte) 203static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte)
diff --git a/arch/powerpc/include/asm/nohash/32/pgalloc.h b/arch/powerpc/include/asm/nohash/32/pgalloc.h
index 17963951bdb0..bd186e85b4f7 100644
--- a/arch/powerpc/include/asm/nohash/32/pgalloc.h
+++ b/arch/powerpc/include/asm/nohash/32/pgalloc.h
@@ -79,10 +79,10 @@ static inline void pmd_populate(struct mm_struct *mm, pmd_t *pmdp,
79#define pmd_pgtable(pmd) ((pgtable_t)pmd_page_vaddr(pmd)) 79#define pmd_pgtable(pmd) ((pgtable_t)pmd_page_vaddr(pmd))
80#endif 80#endif
81 81
82extern pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long addr); 82extern pte_t *pte_alloc_one_kernel(struct mm_struct *mm);
83extern pgtable_t pte_alloc_one(struct mm_struct *mm, unsigned long addr); 83extern pgtable_t pte_alloc_one(struct mm_struct *mm);
84void pte_frag_destroy(void *pte_frag); 84void pte_frag_destroy(void *pte_frag);
85pte_t *pte_fragment_alloc(struct mm_struct *mm, unsigned long vmaddr, int kernel); 85pte_t *pte_fragment_alloc(struct mm_struct *mm, int kernel);
86void pte_fragment_free(unsigned long *table, int kernel); 86void pte_fragment_free(unsigned long *table, int kernel);
87 87
88static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte) 88static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte)
diff --git a/arch/powerpc/include/asm/nohash/64/pgalloc.h b/arch/powerpc/include/asm/nohash/64/pgalloc.h
index e95eb499a174..66d086f85bd5 100644
--- a/arch/powerpc/include/asm/nohash/64/pgalloc.h
+++ b/arch/powerpc/include/asm/nohash/64/pgalloc.h
@@ -93,14 +93,12 @@ static inline void pmd_free(struct mm_struct *mm, pmd_t *pmd)
93} 93}
94 94
95 95
96static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, 96static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm)
97 unsigned long address)
98{ 97{
99 return (pte_t *)__get_free_page(GFP_KERNEL | __GFP_ZERO); 98 return (pte_t *)__get_free_page(GFP_KERNEL | __GFP_ZERO);
100} 99}
101 100
102static inline pgtable_t pte_alloc_one(struct mm_struct *mm, 101static inline pgtable_t pte_alloc_one(struct mm_struct *mm)
103 unsigned long address)
104{ 102{
105 struct page *page; 103 struct page *page;
106 pte_t *pte; 104 pte_t *pte;
diff --git a/arch/powerpc/mm/pgtable-frag.c b/arch/powerpc/mm/pgtable-frag.c
index af23a587f019..a7b05214760c 100644
--- a/arch/powerpc/mm/pgtable-frag.c
+++ b/arch/powerpc/mm/pgtable-frag.c
@@ -95,7 +95,7 @@ static pte_t *__alloc_for_ptecache(struct mm_struct *mm, int kernel)
95 return (pte_t *)ret; 95 return (pte_t *)ret;
96} 96}
97 97
98pte_t *pte_fragment_alloc(struct mm_struct *mm, unsigned long vmaddr, int kernel) 98pte_t *pte_fragment_alloc(struct mm_struct *mm, int kernel)
99{ 99{
100 pte_t *pte; 100 pte_t *pte;
101 101
diff --git a/arch/powerpc/mm/pgtable_32.c b/arch/powerpc/mm/pgtable_32.c
index d67215248d82..ded71126ce4c 100644
--- a/arch/powerpc/mm/pgtable_32.c
+++ b/arch/powerpc/mm/pgtable_32.c
@@ -43,17 +43,17 @@ EXPORT_SYMBOL(ioremap_bot); /* aka VMALLOC_END */
43 43
44extern char etext[], _stext[], _sinittext[], _einittext[]; 44extern char etext[], _stext[], _sinittext[], _einittext[];
45 45
46__ref pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long address) 46__ref pte_t *pte_alloc_one_kernel(struct mm_struct *mm)
47{ 47{
48 if (!slab_is_available()) 48 if (!slab_is_available())
49 return memblock_alloc(PTE_FRAG_SIZE, PTE_FRAG_SIZE); 49 return memblock_alloc(PTE_FRAG_SIZE, PTE_FRAG_SIZE);
50 50
51 return (pte_t *)pte_fragment_alloc(mm, address, 1); 51 return (pte_t *)pte_fragment_alloc(mm, 1);
52} 52}
53 53
54pgtable_t pte_alloc_one(struct mm_struct *mm, unsigned long address) 54pgtable_t pte_alloc_one(struct mm_struct *mm)
55{ 55{
56 return (pgtable_t)pte_fragment_alloc(mm, address, 0); 56 return (pgtable_t)pte_fragment_alloc(mm, 0);
57} 57}
58 58
59void __iomem * 59void __iomem *
diff --git a/arch/riscv/include/asm/pgalloc.h b/arch/riscv/include/asm/pgalloc.h
index a79ed5faff3a..94043cf83c90 100644
--- a/arch/riscv/include/asm/pgalloc.h
+++ b/arch/riscv/include/asm/pgalloc.h
@@ -82,15 +82,13 @@ static inline void pmd_free(struct mm_struct *mm, pmd_t *pmd)
82 82
83#endif /* __PAGETABLE_PMD_FOLDED */ 83#endif /* __PAGETABLE_PMD_FOLDED */
84 84
85static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, 85static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm)
86 unsigned long address)
87{ 86{
88 return (pte_t *)__get_free_page( 87 return (pte_t *)__get_free_page(
89 GFP_KERNEL | __GFP_RETRY_MAYFAIL | __GFP_ZERO); 88 GFP_KERNEL | __GFP_RETRY_MAYFAIL | __GFP_ZERO);
90} 89}
91 90
92static inline struct page *pte_alloc_one(struct mm_struct *mm, 91static inline struct page *pte_alloc_one(struct mm_struct *mm)
93 unsigned long address)
94{ 92{
95 struct page *pte; 93 struct page *pte;
96 94
diff --git a/arch/s390/include/asm/pgalloc.h b/arch/s390/include/asm/pgalloc.h
index 5ee733720a57..bccb8f4a63e2 100644
--- a/arch/s390/include/asm/pgalloc.h
+++ b/arch/s390/include/asm/pgalloc.h
@@ -139,8 +139,8 @@ static inline void pmd_populate(struct mm_struct *mm,
139/* 139/*
140 * page table entry allocation/free routines. 140 * page table entry allocation/free routines.
141 */ 141 */
142#define pte_alloc_one_kernel(mm, vmaddr) ((pte_t *) page_table_alloc(mm)) 142#define pte_alloc_one_kernel(mm) ((pte_t *)page_table_alloc(mm))
143#define pte_alloc_one(mm, vmaddr) ((pte_t *) page_table_alloc(mm)) 143#define pte_alloc_one(mm) ((pte_t *)page_table_alloc(mm))
144 144
145#define pte_free_kernel(mm, pte) page_table_free(mm, (unsigned long *) pte) 145#define pte_free_kernel(mm, pte) page_table_free(mm, (unsigned long *) pte)
146#define pte_free(mm, pte) page_table_free(mm, (unsigned long *) pte) 146#define pte_free(mm, pte) page_table_free(mm, (unsigned long *) pte)
diff --git a/arch/sh/include/asm/pgalloc.h b/arch/sh/include/asm/pgalloc.h
index ed053a359ab7..8ad73cb31121 100644
--- a/arch/sh/include/asm/pgalloc.h
+++ b/arch/sh/include/asm/pgalloc.h
@@ -32,14 +32,12 @@ static inline void pmd_populate(struct mm_struct *mm, pmd_t *pmd,
32/* 32/*
33 * Allocate and free page tables. 33 * Allocate and free page tables.
34 */ 34 */
35static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, 35static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm)
36 unsigned long address)
37{ 36{
38 return quicklist_alloc(QUICK_PT, GFP_KERNEL, NULL); 37 return quicklist_alloc(QUICK_PT, GFP_KERNEL, NULL);
39} 38}
40 39
41static inline pgtable_t pte_alloc_one(struct mm_struct *mm, 40static inline pgtable_t pte_alloc_one(struct mm_struct *mm)
42 unsigned long address)
43{ 41{
44 struct page *page; 42 struct page *page;
45 void *pg; 43 void *pg;
diff --git a/arch/sparc/include/asm/pgalloc_32.h b/arch/sparc/include/asm/pgalloc_32.h
index 90459481c6c7..282be50a4adf 100644
--- a/arch/sparc/include/asm/pgalloc_32.h
+++ b/arch/sparc/include/asm/pgalloc_32.h
@@ -58,10 +58,9 @@ void pmd_populate(struct mm_struct *mm, pmd_t *pmdp, struct page *ptep);
58void pmd_set(pmd_t *pmdp, pte_t *ptep); 58void pmd_set(pmd_t *pmdp, pte_t *ptep);
59#define pmd_populate_kernel(MM, PMD, PTE) pmd_set(PMD, PTE) 59#define pmd_populate_kernel(MM, PMD, PTE) pmd_set(PMD, PTE)
60 60
61pgtable_t pte_alloc_one(struct mm_struct *mm, unsigned long address); 61pgtable_t pte_alloc_one(struct mm_struct *mm);
62 62
63static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, 63static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm)
64 unsigned long address)
65{ 64{
66 return srmmu_get_nocache(PTE_SIZE, PTE_SIZE); 65 return srmmu_get_nocache(PTE_SIZE, PTE_SIZE);
67} 66}
diff --git a/arch/sparc/include/asm/pgalloc_64.h b/arch/sparc/include/asm/pgalloc_64.h
index 874632f34f62..48abccba4991 100644
--- a/arch/sparc/include/asm/pgalloc_64.h
+++ b/arch/sparc/include/asm/pgalloc_64.h
@@ -60,10 +60,8 @@ static inline void pmd_free(struct mm_struct *mm, pmd_t *pmd)
60 kmem_cache_free(pgtable_cache, pmd); 60 kmem_cache_free(pgtable_cache, pmd);
61} 61}
62 62
63pte_t *pte_alloc_one_kernel(struct mm_struct *mm, 63pte_t *pte_alloc_one_kernel(struct mm_struct *mm);
64 unsigned long address); 64pgtable_t pte_alloc_one(struct mm_struct *mm);
65pgtable_t pte_alloc_one(struct mm_struct *mm,
66 unsigned long address);
67void pte_free_kernel(struct mm_struct *mm, pte_t *pte); 65void pte_free_kernel(struct mm_struct *mm, pte_t *pte);
68void pte_free(struct mm_struct *mm, pgtable_t ptepage); 66void pte_free(struct mm_struct *mm, pgtable_t ptepage);
69 67
diff --git a/arch/sparc/mm/init_64.c b/arch/sparc/mm/init_64.c
index 3c8aac21f426..b4221d3727d0 100644
--- a/arch/sparc/mm/init_64.c
+++ b/arch/sparc/mm/init_64.c
@@ -2925,8 +2925,7 @@ void __flush_tlb_all(void)
2925 : : "r" (pstate)); 2925 : : "r" (pstate));
2926} 2926}
2927 2927
2928pte_t *pte_alloc_one_kernel(struct mm_struct *mm, 2928pte_t *pte_alloc_one_kernel(struct mm_struct *mm)
2929 unsigned long address)
2930{ 2929{
2931 struct page *page = alloc_page(GFP_KERNEL | __GFP_ZERO); 2930 struct page *page = alloc_page(GFP_KERNEL | __GFP_ZERO);
2932 pte_t *pte = NULL; 2931 pte_t *pte = NULL;
@@ -2937,8 +2936,7 @@ pte_t *pte_alloc_one_kernel(struct mm_struct *mm,
2937 return pte; 2936 return pte;
2938} 2937}
2939 2938
2940pgtable_t pte_alloc_one(struct mm_struct *mm, 2939pgtable_t pte_alloc_one(struct mm_struct *mm)
2941 unsigned long address)
2942{ 2940{
2943 struct page *page = alloc_page(GFP_KERNEL | __GFP_ZERO); 2941 struct page *page = alloc_page(GFP_KERNEL | __GFP_ZERO);
2944 if (!page) 2942 if (!page)
diff --git a/arch/sparc/mm/srmmu.c b/arch/sparc/mm/srmmu.c
index a6142c5abf61..b609362e846f 100644
--- a/arch/sparc/mm/srmmu.c
+++ b/arch/sparc/mm/srmmu.c
@@ -364,12 +364,12 @@ pgd_t *get_pgd_fast(void)
364 * Alignments up to the page size are the same for physical and virtual 364 * Alignments up to the page size are the same for physical and virtual
365 * addresses of the nocache area. 365 * addresses of the nocache area.
366 */ 366 */
367pgtable_t pte_alloc_one(struct mm_struct *mm, unsigned long address) 367pgtable_t pte_alloc_one(struct mm_struct *mm)
368{ 368{
369 unsigned long pte; 369 unsigned long pte;
370 struct page *page; 370 struct page *page;
371 371
372 if ((pte = (unsigned long)pte_alloc_one_kernel(mm, address)) == 0) 372 if ((pte = (unsigned long)pte_alloc_one_kernel(mm)) == 0)
373 return NULL; 373 return NULL;
374 page = pfn_to_page(__nocache_pa(pte) >> PAGE_SHIFT); 374 page = pfn_to_page(__nocache_pa(pte) >> PAGE_SHIFT);
375 if (!pgtable_page_ctor(page)) { 375 if (!pgtable_page_ctor(page)) {
diff --git a/arch/um/include/asm/pgalloc.h b/arch/um/include/asm/pgalloc.h
index bf90b2aa2002..99eb5682792a 100644
--- a/arch/um/include/asm/pgalloc.h
+++ b/arch/um/include/asm/pgalloc.h
@@ -25,8 +25,8 @@
25extern pgd_t *pgd_alloc(struct mm_struct *); 25extern pgd_t *pgd_alloc(struct mm_struct *);
26extern void pgd_free(struct mm_struct *mm, pgd_t *pgd); 26extern void pgd_free(struct mm_struct *mm, pgd_t *pgd);
27 27
28extern pte_t *pte_alloc_one_kernel(struct mm_struct *, unsigned long); 28extern pte_t *pte_alloc_one_kernel(struct mm_struct *);
29extern pgtable_t pte_alloc_one(struct mm_struct *, unsigned long); 29extern pgtable_t pte_alloc_one(struct mm_struct *);
30 30
31static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte) 31static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte)
32{ 32{
diff --git a/arch/um/kernel/mem.c b/arch/um/kernel/mem.c
index 8d21a83dd289..799b571a8f88 100644
--- a/arch/um/kernel/mem.c
+++ b/arch/um/kernel/mem.c
@@ -199,7 +199,7 @@ void pgd_free(struct mm_struct *mm, pgd_t *pgd)
199 free_page((unsigned long) pgd); 199 free_page((unsigned long) pgd);
200} 200}
201 201
202pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long address) 202pte_t *pte_alloc_one_kernel(struct mm_struct *mm)
203{ 203{
204 pte_t *pte; 204 pte_t *pte;
205 205
@@ -207,7 +207,7 @@ pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long address)
207 return pte; 207 return pte;
208} 208}
209 209
210pgtable_t pte_alloc_one(struct mm_struct *mm, unsigned long address) 210pgtable_t pte_alloc_one(struct mm_struct *mm)
211{ 211{
212 struct page *pte; 212 struct page *pte;
213 213
diff --git a/arch/unicore32/include/asm/pgalloc.h b/arch/unicore32/include/asm/pgalloc.h
index f0fdb268f8f2..7cceabecf4e3 100644
--- a/arch/unicore32/include/asm/pgalloc.h
+++ b/arch/unicore32/include/asm/pgalloc.h
@@ -34,7 +34,7 @@ extern void free_pgd_slow(struct mm_struct *mm, pgd_t *pgd);
34 * Allocate one PTE table. 34 * Allocate one PTE table.
35 */ 35 */
36static inline pte_t * 36static inline pte_t *
37pte_alloc_one_kernel(struct mm_struct *mm, unsigned long addr) 37pte_alloc_one_kernel(struct mm_struct *mm)
38{ 38{
39 pte_t *pte; 39 pte_t *pte;
40 40
@@ -46,7 +46,7 @@ pte_alloc_one_kernel(struct mm_struct *mm, unsigned long addr)
46} 46}
47 47
48static inline pgtable_t 48static inline pgtable_t
49pte_alloc_one(struct mm_struct *mm, unsigned long addr) 49pte_alloc_one(struct mm_struct *mm)
50{ 50{
51 struct page *pte; 51 struct page *pte;
52 52
diff --git a/arch/x86/include/asm/pgalloc.h b/arch/x86/include/asm/pgalloc.h
index 1ea41aaef68b..a281e61ec60c 100644
--- a/arch/x86/include/asm/pgalloc.h
+++ b/arch/x86/include/asm/pgalloc.h
@@ -47,8 +47,8 @@ extern gfp_t __userpte_alloc_gfp;
47extern pgd_t *pgd_alloc(struct mm_struct *); 47extern pgd_t *pgd_alloc(struct mm_struct *);
48extern void pgd_free(struct mm_struct *mm, pgd_t *pgd); 48extern void pgd_free(struct mm_struct *mm, pgd_t *pgd);
49 49
50extern pte_t *pte_alloc_one_kernel(struct mm_struct *, unsigned long); 50extern pte_t *pte_alloc_one_kernel(struct mm_struct *);
51extern pgtable_t pte_alloc_one(struct mm_struct *, unsigned long); 51extern pgtable_t pte_alloc_one(struct mm_struct *);
52 52
53/* Should really implement gc for free page table pages. This could be 53/* Should really implement gc for free page table pages. This could be
54 done with a reference count in struct page. */ 54 done with a reference count in struct page. */
diff --git a/arch/x86/mm/pgtable.c b/arch/x86/mm/pgtable.c
index b0284eab14dc..7bd01709a091 100644
--- a/arch/x86/mm/pgtable.c
+++ b/arch/x86/mm/pgtable.c
@@ -23,12 +23,12 @@ EXPORT_SYMBOL(physical_mask);
23 23
24gfp_t __userpte_alloc_gfp = PGALLOC_GFP | PGALLOC_USER_GFP; 24gfp_t __userpte_alloc_gfp = PGALLOC_GFP | PGALLOC_USER_GFP;
25 25
26pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long address) 26pte_t *pte_alloc_one_kernel(struct mm_struct *mm)
27{ 27{
28 return (pte_t *)__get_free_page(PGALLOC_GFP & ~__GFP_ACCOUNT); 28 return (pte_t *)__get_free_page(PGALLOC_GFP & ~__GFP_ACCOUNT);
29} 29}
30 30
31pgtable_t pte_alloc_one(struct mm_struct *mm, unsigned long address) 31pgtable_t pte_alloc_one(struct mm_struct *mm)
32{ 32{
33 struct page *pte; 33 struct page *pte;
34 34
diff --git a/arch/xtensa/include/asm/pgalloc.h b/arch/xtensa/include/asm/pgalloc.h
index 1065bc8bcae5..b3b388ff2f01 100644
--- a/arch/xtensa/include/asm/pgalloc.h
+++ b/arch/xtensa/include/asm/pgalloc.h
@@ -38,8 +38,7 @@ static inline void pgd_free(struct mm_struct *mm, pgd_t *pgd)
38 free_page((unsigned long)pgd); 38 free_page((unsigned long)pgd);
39} 39}
40 40
41static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, 41static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm)
42 unsigned long address)
43{ 42{
44 pte_t *ptep; 43 pte_t *ptep;
45 int i; 44 int i;
@@ -52,13 +51,12 @@ static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm,
52 return ptep; 51 return ptep;
53} 52}
54 53
55static inline pgtable_t pte_alloc_one(struct mm_struct *mm, 54static inline pgtable_t pte_alloc_one(struct mm_struct *mm)
56 unsigned long addr)
57{ 55{
58 pte_t *pte; 56 pte_t *pte;
59 struct page *page; 57 struct page *page;
60 58
61 pte = pte_alloc_one_kernel(mm, addr); 59 pte = pte_alloc_one_kernel(mm);
62 if (!pte) 60 if (!pte)
63 return NULL; 61 return NULL;
64 page = virt_to_page(pte); 62 page = virt_to_page(pte);
diff --git a/include/linux/mm.h b/include/linux/mm.h
index ea1f12d15365..0d946f063cba 100644
--- a/include/linux/mm.h
+++ b/include/linux/mm.h
@@ -1873,8 +1873,8 @@ static inline void mm_inc_nr_ptes(struct mm_struct *mm) {}
1873static inline void mm_dec_nr_ptes(struct mm_struct *mm) {} 1873static inline void mm_dec_nr_ptes(struct mm_struct *mm) {}
1874#endif 1874#endif
1875 1875
1876int __pte_alloc(struct mm_struct *mm, pmd_t *pmd, unsigned long address); 1876int __pte_alloc(struct mm_struct *mm, pmd_t *pmd);
1877int __pte_alloc_kernel(pmd_t *pmd, unsigned long address); 1877int __pte_alloc_kernel(pmd_t *pmd);
1878 1878
1879/* 1879/*
1880 * The following ifdef needed to get the 4level-fixup.h header to work. 1880 * The following ifdef needed to get the 4level-fixup.h header to work.
@@ -2005,18 +2005,17 @@ static inline void pgtable_page_dtor(struct page *page)
2005 pte_unmap(pte); \ 2005 pte_unmap(pte); \
2006} while (0) 2006} while (0)
2007 2007
2008#define pte_alloc(mm, pmd, address) \ 2008#define pte_alloc(mm, pmd) (unlikely(pmd_none(*(pmd))) && __pte_alloc(mm, pmd))
2009 (unlikely(pmd_none(*(pmd))) && __pte_alloc(mm, pmd, address))
2010 2009
2011#define pte_alloc_map(mm, pmd, address) \ 2010#define pte_alloc_map(mm, pmd, address) \
2012 (pte_alloc(mm, pmd, address) ? NULL : pte_offset_map(pmd, address)) 2011 (pte_alloc(mm, pmd) ? NULL : pte_offset_map(pmd, address))
2013 2012
2014#define pte_alloc_map_lock(mm, pmd, address, ptlp) \ 2013#define pte_alloc_map_lock(mm, pmd, address, ptlp) \
2015 (pte_alloc(mm, pmd, address) ? \ 2014 (pte_alloc(mm, pmd) ? \
2016 NULL : pte_offset_map_lock(mm, pmd, address, ptlp)) 2015 NULL : pte_offset_map_lock(mm, pmd, address, ptlp))
2017 2016
2018#define pte_alloc_kernel(pmd, address) \ 2017#define pte_alloc_kernel(pmd, address) \
2019 ((unlikely(pmd_none(*(pmd))) && __pte_alloc_kernel(pmd, address))? \ 2018 ((unlikely(pmd_none(*(pmd))) && __pte_alloc_kernel(pmd))? \
2020 NULL: pte_offset_kernel(pmd, address)) 2019 NULL: pte_offset_kernel(pmd, address))
2021 2020
2022#if USE_SPLIT_PMD_PTLOCKS 2021#if USE_SPLIT_PMD_PTLOCKS
diff --git a/mm/huge_memory.c b/mm/huge_memory.c
index cbd977b1d60d..faf357eaf0ce 100644
--- a/mm/huge_memory.c
+++ b/mm/huge_memory.c
@@ -568,7 +568,7 @@ static vm_fault_t __do_huge_pmd_anonymous_page(struct vm_fault *vmf,
568 return VM_FAULT_FALLBACK; 568 return VM_FAULT_FALLBACK;
569 } 569 }
570 570
571 pgtable = pte_alloc_one(vma->vm_mm, haddr); 571 pgtable = pte_alloc_one(vma->vm_mm);
572 if (unlikely(!pgtable)) { 572 if (unlikely(!pgtable)) {
573 ret = VM_FAULT_OOM; 573 ret = VM_FAULT_OOM;
574 goto release; 574 goto release;
@@ -702,7 +702,7 @@ vm_fault_t do_huge_pmd_anonymous_page(struct vm_fault *vmf)
702 struct page *zero_page; 702 struct page *zero_page;
703 bool set; 703 bool set;
704 vm_fault_t ret; 704 vm_fault_t ret;
705 pgtable = pte_alloc_one(vma->vm_mm, haddr); 705 pgtable = pte_alloc_one(vma->vm_mm);
706 if (unlikely(!pgtable)) 706 if (unlikely(!pgtable))
707 return VM_FAULT_OOM; 707 return VM_FAULT_OOM;
708 zero_page = mm_get_huge_zero_page(vma->vm_mm); 708 zero_page = mm_get_huge_zero_page(vma->vm_mm);
@@ -791,7 +791,7 @@ vm_fault_t vmf_insert_pfn_pmd(struct vm_area_struct *vma, unsigned long addr,
791 return VM_FAULT_SIGBUS; 791 return VM_FAULT_SIGBUS;
792 792
793 if (arch_needs_pgtable_deposit()) { 793 if (arch_needs_pgtable_deposit()) {
794 pgtable = pte_alloc_one(vma->vm_mm, addr); 794 pgtable = pte_alloc_one(vma->vm_mm);
795 if (!pgtable) 795 if (!pgtable)
796 return VM_FAULT_OOM; 796 return VM_FAULT_OOM;
797 } 797 }
@@ -927,7 +927,7 @@ int copy_huge_pmd(struct mm_struct *dst_mm, struct mm_struct *src_mm,
927 if (!vma_is_anonymous(vma)) 927 if (!vma_is_anonymous(vma))
928 return 0; 928 return 0;
929 929
930 pgtable = pte_alloc_one(dst_mm, addr); 930 pgtable = pte_alloc_one(dst_mm);
931 if (unlikely(!pgtable)) 931 if (unlikely(!pgtable))
932 goto out; 932 goto out;
933 933
diff --git a/mm/kasan/init.c b/mm/kasan/init.c
index 34afad56497b..45a1b5e38e1e 100644
--- a/mm/kasan/init.c
+++ b/mm/kasan/init.c
@@ -123,7 +123,7 @@ static int __ref zero_pmd_populate(pud_t *pud, unsigned long addr,
123 pte_t *p; 123 pte_t *p;
124 124
125 if (slab_is_available()) 125 if (slab_is_available())
126 p = pte_alloc_one_kernel(&init_mm, addr); 126 p = pte_alloc_one_kernel(&init_mm);
127 else 127 else
128 p = early_alloc(PAGE_SIZE, NUMA_NO_NODE); 128 p = early_alloc(PAGE_SIZE, NUMA_NO_NODE);
129 if (!p) 129 if (!p)
diff --git a/mm/memory.c b/mm/memory.c
index 2dd2f9ab57f4..a52663c0612d 100644
--- a/mm/memory.c
+++ b/mm/memory.c
@@ -400,10 +400,10 @@ void free_pgtables(struct mmu_gather *tlb, struct vm_area_struct *vma,
400 } 400 }
401} 401}
402 402
403int __pte_alloc(struct mm_struct *mm, pmd_t *pmd, unsigned long address) 403int __pte_alloc(struct mm_struct *mm, pmd_t *pmd)
404{ 404{
405 spinlock_t *ptl; 405 spinlock_t *ptl;
406 pgtable_t new = pte_alloc_one(mm, address); 406 pgtable_t new = pte_alloc_one(mm);
407 if (!new) 407 if (!new)
408 return -ENOMEM; 408 return -ENOMEM;
409 409
@@ -434,9 +434,9 @@ int __pte_alloc(struct mm_struct *mm, pmd_t *pmd, unsigned long address)
434 return 0; 434 return 0;
435} 435}
436 436
437int __pte_alloc_kernel(pmd_t *pmd, unsigned long address) 437int __pte_alloc_kernel(pmd_t *pmd)
438{ 438{
439 pte_t *new = pte_alloc_one_kernel(&init_mm, address); 439 pte_t *new = pte_alloc_one_kernel(&init_mm);
440 if (!new) 440 if (!new)
441 return -ENOMEM; 441 return -ENOMEM;
442 442
@@ -2896,7 +2896,7 @@ static vm_fault_t do_anonymous_page(struct vm_fault *vmf)
2896 * 2896 *
2897 * Here we only have down_read(mmap_sem). 2897 * Here we only have down_read(mmap_sem).
2898 */ 2898 */
2899 if (pte_alloc(vma->vm_mm, vmf->pmd, vmf->address)) 2899 if (pte_alloc(vma->vm_mm, vmf->pmd))
2900 return VM_FAULT_OOM; 2900 return VM_FAULT_OOM;
2901 2901
2902 /* See the comment in pte_alloc_one_map() */ 2902 /* See the comment in pte_alloc_one_map() */
@@ -3043,7 +3043,7 @@ static vm_fault_t pte_alloc_one_map(struct vm_fault *vmf)
3043 pmd_populate(vma->vm_mm, vmf->pmd, vmf->prealloc_pte); 3043 pmd_populate(vma->vm_mm, vmf->pmd, vmf->prealloc_pte);
3044 spin_unlock(vmf->ptl); 3044 spin_unlock(vmf->ptl);
3045 vmf->prealloc_pte = NULL; 3045 vmf->prealloc_pte = NULL;
3046 } else if (unlikely(pte_alloc(vma->vm_mm, vmf->pmd, vmf->address))) { 3046 } else if (unlikely(pte_alloc(vma->vm_mm, vmf->pmd))) {
3047 return VM_FAULT_OOM; 3047 return VM_FAULT_OOM;
3048 } 3048 }
3049map_pte: 3049map_pte:
@@ -3122,7 +3122,7 @@ static vm_fault_t do_set_pmd(struct vm_fault *vmf, struct page *page)
3122 * related to pte entry. Use the preallocated table for that. 3122 * related to pte entry. Use the preallocated table for that.
3123 */ 3123 */
3124 if (arch_needs_pgtable_deposit() && !vmf->prealloc_pte) { 3124 if (arch_needs_pgtable_deposit() && !vmf->prealloc_pte) {
3125 vmf->prealloc_pte = pte_alloc_one(vma->vm_mm, vmf->address); 3125 vmf->prealloc_pte = pte_alloc_one(vma->vm_mm);
3126 if (!vmf->prealloc_pte) 3126 if (!vmf->prealloc_pte)
3127 return VM_FAULT_OOM; 3127 return VM_FAULT_OOM;
3128 smp_wmb(); /* See comment in __pte_alloc() */ 3128 smp_wmb(); /* See comment in __pte_alloc() */
@@ -3360,8 +3360,7 @@ static vm_fault_t do_fault_around(struct vm_fault *vmf)
3360 start_pgoff + nr_pages - 1); 3360 start_pgoff + nr_pages - 1);
3361 3361
3362 if (pmd_none(*vmf->pmd)) { 3362 if (pmd_none(*vmf->pmd)) {
3363 vmf->prealloc_pte = pte_alloc_one(vmf->vma->vm_mm, 3363 vmf->prealloc_pte = pte_alloc_one(vmf->vma->vm_mm);
3364 vmf->address);
3365 if (!vmf->prealloc_pte) 3364 if (!vmf->prealloc_pte)
3366 goto out; 3365 goto out;
3367 smp_wmb(); /* See comment in __pte_alloc() */ 3366 smp_wmb(); /* See comment in __pte_alloc() */
diff --git a/mm/migrate.c b/mm/migrate.c
index 5d1839a9148d..ccf8966caf6f 100644
--- a/mm/migrate.c
+++ b/mm/migrate.c
@@ -2636,7 +2636,7 @@ static void migrate_vma_insert_page(struct migrate_vma *migrate,
2636 * 2636 *
2637 * Here we only have down_read(mmap_sem). 2637 * Here we only have down_read(mmap_sem).
2638 */ 2638 */
2639 if (pte_alloc(mm, pmdp, addr)) 2639 if (pte_alloc(mm, pmdp))
2640 goto abort; 2640 goto abort;
2641 2641
2642 /* See the comment in pte_alloc_one_map() */ 2642 /* See the comment in pte_alloc_one_map() */
diff --git a/mm/mremap.c b/mm/mremap.c
index def01d86e36f..fc3f92962a7e 100644
--- a/mm/mremap.c
+++ b/mm/mremap.c
@@ -236,7 +236,7 @@ unsigned long move_page_tables(struct vm_area_struct *vma,
236 if (pmd_trans_unstable(old_pmd)) 236 if (pmd_trans_unstable(old_pmd))
237 continue; 237 continue;
238 } 238 }
239 if (pte_alloc(new_vma->vm_mm, new_pmd, new_addr)) 239 if (pte_alloc(new_vma->vm_mm, new_pmd))
240 break; 240 break;
241 next = (new_addr + PMD_SIZE) & PMD_MASK; 241 next = (new_addr + PMD_SIZE) & PMD_MASK;
242 if (extent > next - new_addr) 242 if (extent > next - new_addr)
diff --git a/mm/userfaultfd.c b/mm/userfaultfd.c
index 48368589f519..065c1ce191c4 100644
--- a/mm/userfaultfd.c
+++ b/mm/userfaultfd.c
@@ -550,7 +550,7 @@ retry:
550 break; 550 break;
551 } 551 }
552 if (unlikely(pmd_none(dst_pmdval)) && 552 if (unlikely(pmd_none(dst_pmdval)) &&
553 unlikely(__pte_alloc(dst_mm, dst_pmd, dst_addr))) { 553 unlikely(__pte_alloc(dst_mm, dst_pmd))) {
554 err = -ENOMEM; 554 err = -ENOMEM;
555 break; 555 break;
556 } 556 }
diff --git a/virt/kvm/arm/mmu.c b/virt/kvm/arm/mmu.c
index 3053bf2584f8..fbdf3ac2f001 100644
--- a/virt/kvm/arm/mmu.c
+++ b/virt/kvm/arm/mmu.c
@@ -647,7 +647,7 @@ static int create_hyp_pmd_mappings(pud_t *pud, unsigned long start,
647 BUG_ON(pmd_sect(*pmd)); 647 BUG_ON(pmd_sect(*pmd));
648 648
649 if (pmd_none(*pmd)) { 649 if (pmd_none(*pmd)) {
650 pte = pte_alloc_one_kernel(NULL, addr); 650 pte = pte_alloc_one_kernel(NULL);
651 if (!pte) { 651 if (!pte) {
652 kvm_err("Cannot allocate Hyp pte\n"); 652 kvm_err("Cannot allocate Hyp pte\n");
653 return -ENOMEM; 653 return -ENOMEM;