diff options
author | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2017-04-24 18:19:10 +0200 |
---|---|---|
committer | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2017-06-12 16:25:54 +0200 |
commit | 1aea9b3f921003f0880f0676ae85d87c9f1cb4a2 (patch) | |
tree | 32b9b3100e16b50d515cd05cf249df3f6fb0b779 /arch/s390/mm/pgtable.c | |
parent | 16ddcc34b8bde5d9257114a16565fac73237bef9 (diff) | |
download | linux-1aea9b3f921003f0880f0676ae85d87c9f1cb4a2.tar.gz linux-1aea9b3f921003f0880f0676ae85d87c9f1cb4a2.tar.bz2 linux-1aea9b3f921003f0880f0676ae85d87c9f1cb4a2.zip |
s390/mm: implement 5 level pages tables
Add the logic to upgrade the page table for a 64-bit process to
five levels. This increases the TASK_SIZE from 8PB to 16EB-4K.
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'arch/s390/mm/pgtable.c')
-rw-r--r-- | arch/s390/mm/pgtable.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/arch/s390/mm/pgtable.c b/arch/s390/mm/pgtable.c index 947b66a5cdba..d4d409ba206b 100644 --- a/arch/s390/mm/pgtable.c +++ b/arch/s390/mm/pgtable.c @@ -610,6 +610,7 @@ bool test_and_clear_guest_dirty(struct mm_struct *mm, unsigned long addr) { spinlock_t *ptl; pgd_t *pgd; + p4d_t *p4d; pud_t *pud; pmd_t *pmd; pgste_t pgste; @@ -618,7 +619,10 @@ bool test_and_clear_guest_dirty(struct mm_struct *mm, unsigned long addr) bool dirty; pgd = pgd_offset(mm, addr); - pud = pud_alloc(mm, pgd, addr); + p4d = p4d_alloc(mm, pgd, addr); + if (!p4d) + return false; + pud = pud_alloc(mm, p4d, addr); if (!pud) return false; pmd = pmd_alloc(mm, pud, addr); |