mm: convert generic code to 5-level paging
Convert all non-architecture-specific code to 5-level paging. It's mostly mechanical adding handling one more page table level in places where we deal with pud_t. Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> Acked-by: Michal Hocko <mhocko@suse.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
committed by
Linus Torvalds
parent
048456dcf2
commit
c2febafc67
@@ -1517,7 +1517,7 @@ static inline int unuse_pmd_range(struct vm_area_struct *vma, pud_t *pud,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int unuse_pud_range(struct vm_area_struct *vma, pgd_t *pgd,
|
||||
static inline int unuse_pud_range(struct vm_area_struct *vma, p4d_t *p4d,
|
||||
unsigned long addr, unsigned long end,
|
||||
swp_entry_t entry, struct page *page)
|
||||
{
|
||||
@@ -1525,7 +1525,7 @@ static inline int unuse_pud_range(struct vm_area_struct *vma, pgd_t *pgd,
|
||||
unsigned long next;
|
||||
int ret;
|
||||
|
||||
pud = pud_offset(pgd, addr);
|
||||
pud = pud_offset(p4d, addr);
|
||||
do {
|
||||
next = pud_addr_end(addr, end);
|
||||
if (pud_none_or_clear_bad(pud))
|
||||
@@ -1537,6 +1537,26 @@ static inline int unuse_pud_range(struct vm_area_struct *vma, pgd_t *pgd,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int unuse_p4d_range(struct vm_area_struct *vma, pgd_t *pgd,
|
||||
unsigned long addr, unsigned long end,
|
||||
swp_entry_t entry, struct page *page)
|
||||
{
|
||||
p4d_t *p4d;
|
||||
unsigned long next;
|
||||
int ret;
|
||||
|
||||
p4d = p4d_offset(pgd, addr);
|
||||
do {
|
||||
next = p4d_addr_end(addr, end);
|
||||
if (p4d_none_or_clear_bad(p4d))
|
||||
continue;
|
||||
ret = unuse_pud_range(vma, p4d, addr, next, entry, page);
|
||||
if (ret)
|
||||
return ret;
|
||||
} while (p4d++, addr = next, addr != end);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int unuse_vma(struct vm_area_struct *vma,
|
||||
swp_entry_t entry, struct page *page)
|
||||
{
|
||||
@@ -1560,7 +1580,7 @@ static int unuse_vma(struct vm_area_struct *vma,
|
||||
next = pgd_addr_end(addr, end);
|
||||
if (pgd_none_or_clear_bad(pgd))
|
||||
continue;
|
||||
ret = unuse_pud_range(vma, pgd, addr, next, entry, page);
|
||||
ret = unuse_p4d_range(vma, pgd, addr, next, entry, page);
|
||||
if (ret)
|
||||
return ret;
|
||||
} while (pgd++, addr = next, addr != end);
|
||||
|
||||
Reference in New Issue
Block a user