Skip to content

Commit 0031f1c

Browse files
Alexander GordeevVasily Gorbik
authored andcommitted
s390/mm: use compound page order to distinguish page tables
CRSTs always have size of four pages, while 2KB-size page tables always occupy a single page. Use that information to distinguish page tables from CRSTs. Reviewed-by: Heiko Carstens <hca@linux.ibm.com> Reviewed-by: Gerald Schaefer <gerald.schaefer@linux.ibm.com> Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com> Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
1 parent d08d4e7 commit 0031f1c

File tree

1 file changed

+4
-9
lines changed

1 file changed

+4
-9
lines changed

arch/s390/mm/pgalloc.c

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -199,20 +199,15 @@ void page_table_free_rcu(struct mmu_gather *tlb, unsigned long *table,
199199
mm = tlb->mm;
200200
if (mm_alloc_pgste(mm))
201201
gmap_unlink(mm, table, vmaddr);
202-
table = (unsigned long *)((unsigned long)table | 0x01U);
203202
tlb_remove_ptdesc(tlb, table);
204203
}
205204

206-
void __tlb_remove_table(void *_table)
205+
void __tlb_remove_table(void *table)
207206
{
208-
struct ptdesc *ptdesc;
209-
unsigned int mask;
210-
void *table;
207+
struct ptdesc *ptdesc = virt_to_ptdesc(table);
208+
struct page *page = ptdesc_page(ptdesc);
211209

212-
mask = (unsigned long)_table & 0x01U;
213-
table = (void *)((unsigned long)_table ^ mask);
214-
ptdesc = virt_to_ptdesc(table);
215-
if (!mask) {
210+
if (compound_order(page) == CRST_ALLOC_ORDER) {
216211
/* pmd, pud, or p4d */
217212
pagetable_free(ptdesc);
218213
return;

0 commit comments

Comments
 (0)