mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 08:43:31 +00:00
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>
This commit is contained in:
parent
d08d4e7cd6
commit
0031f1c7cf
1 changed files with 4 additions and 9 deletions
|
@ -199,20 +199,15 @@ void page_table_free_rcu(struct mmu_gather *tlb, unsigned long *table,
|
|||
mm = tlb->mm;
|
||||
if (mm_alloc_pgste(mm))
|
||||
gmap_unlink(mm, table, vmaddr);
|
||||
table = (unsigned long *)((unsigned long)table | 0x01U);
|
||||
tlb_remove_ptdesc(tlb, table);
|
||||
}
|
||||
|
||||
void __tlb_remove_table(void *_table)
|
||||
void __tlb_remove_table(void *table)
|
||||
{
|
||||
struct ptdesc *ptdesc;
|
||||
unsigned int mask;
|
||||
void *table;
|
||||
struct ptdesc *ptdesc = virt_to_ptdesc(table);
|
||||
struct page *page = ptdesc_page(ptdesc);
|
||||
|
||||
mask = (unsigned long)_table & 0x01U;
|
||||
table = (void *)((unsigned long)_table ^ mask);
|
||||
ptdesc = virt_to_ptdesc(table);
|
||||
if (!mask) {
|
||||
if (compound_order(page) == CRST_ALLOC_ORDER) {
|
||||
/* pmd, pud, or p4d */
|
||||
pagetable_free(ptdesc);
|
||||
return;
|
||||
|
|
Loading…
Add table
Reference in a new issue