Skip to content

Commit 72fe6da

Browse files
VMoolageertu
authored andcommitted
m68k: mm: Convert get_pointer_table() to use ptdescs
Motorola uses get_pointer_table() for page tables, so it should be using struct ptdesc, not struct page. This helps us prepare to allocate ptdescs as their own memory descriptor, and prepares to remove a user of page->lru. Signed-off-by: "Vishal Moola (Oracle)" <[email protected]> Reviewed-by: Geert Uytterhoeven <[email protected]> Link: https://lore.kernel.org/[email protected] Signed-off-by: Geert Uytterhoeven <[email protected]>
1 parent e04c78d commit 72fe6da

File tree

1 file changed

+15
-11
lines changed

1 file changed

+15
-11
lines changed

arch/m68k/mm/motorola.c

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -148,40 +148,44 @@ void *get_pointer_table(struct mm_struct *mm, int type)
148148

149149
/*
150150
* For a pointer table for a user process address space, a
151-
* table is taken from a page allocated for the purpose. Each
152-
* page can hold 8 pointer tables. The page is remapped in
151+
* table is taken from a ptdesc allocated for the purpose. Each
152+
* ptdesc can hold 8 pointer tables. The ptdesc is remapped in
153153
* virtual address space to be noncacheable.
154154
*/
155155
if (mask == 0) {
156-
void *page;
156+
struct ptdesc *ptdesc;
157157
ptable_desc *new;
158+
void *pt_addr;
158159

159-
if (!(page = (void *)get_zeroed_page(GFP_KERNEL)))
160+
ptdesc = pagetable_alloc(GFP_KERNEL | __GFP_ZERO, 0);
161+
if (!ptdesc)
160162
return NULL;
161163

164+
pt_addr = ptdesc_address(ptdesc);
165+
162166
switch (type) {
163167
case TABLE_PTE:
164168
/*
165169
* m68k doesn't have SPLIT_PTE_PTLOCKS for not having
166170
* SMP.
167171
*/
168-
pagetable_pte_ctor(mm, virt_to_ptdesc(page));
172+
pagetable_pte_ctor(mm, ptdesc);
169173
break;
170174
case TABLE_PMD:
171-
pagetable_pmd_ctor(mm, virt_to_ptdesc(page));
175+
pagetable_pmd_ctor(mm, ptdesc);
172176
break;
173177
case TABLE_PGD:
174-
pagetable_pgd_ctor(virt_to_ptdesc(page));
178+
pagetable_pgd_ctor(ptdesc);
175179
break;
176180
}
177181

178-
mmu_page_ctor(page);
182+
mmu_page_ctor(pt_addr);
179183

180-
new = PD_PTABLE(page);
184+
new = PD_PTABLE(pt_addr);
181185
PD_MARKBITS(new) = ptable_mask(type) - 1;
182186
list_add_tail(new, dp);
183187

184-
return (pmd_t *)page;
188+
return (pmd_t *)pt_addr;
185189
}
186190

187191
for (tmp = 1, off = 0; (mask & tmp) == 0; tmp <<= 1, off += ptable_size(type))
@@ -191,7 +195,7 @@ void *get_pointer_table(struct mm_struct *mm, int type)
191195
/* move to end of list */
192196
list_move_tail(dp, &ptable_list[type]);
193197
}
194-
return page_address(PD_PAGE(dp)) + off;
198+
return ptdesc_address(PD_PTDESC(dp)) + off;
195199
}
196200

197201
int free_pointer_table(void *table, int type)

0 commit comments

Comments
 (0)