From 649059f2d2c2a56ec81aaea43e078416087e18cc Mon Sep 17 00:00:00 2001 From: Masamichi Takagi Date: Thu, 13 Dec 2018 10:29:57 +0900 Subject: [PATCH] contiguous PTE: Fix requested page-shift check Change-Id: Iafc505457f7e10c94142070113870cd8b8c6922d --- arch/arm64/kernel/memory.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/arch/arm64/kernel/memory.c b/arch/arm64/kernel/memory.c index f9fd24d4..a7aa9ff9 100644 --- a/arch/arm64/kernel/memory.c +++ b/arch/arm64/kernel/memory.c @@ -2758,10 +2758,11 @@ int set_range_middle(void *args0, pte_t *ptep, uintptr_t base, uintptr_t start, unsigned long pgsize; unsigned long pgshift; unsigned long cont_pgsize; + unsigned long cont_pgshift; } table[] = { - {walk_pte_l1, set_range_l1, PTL2_SIZE, PTL2_SHIFT, PTL2_CONT_SIZE}, /*PTL2: second*/ - {walk_pte_l2, set_range_l2, PTL3_SIZE, PTL3_SHIFT, PTL3_CONT_SIZE}, /*PTL3: first*/ - {walk_pte_l3, set_range_l3, PTL4_SIZE, PTL4_SHIFT, PTL4_CONT_SIZE}, /*PTL4: zero*/ + {walk_pte_l1, set_range_l1, PTL2_SIZE, PTL2_SHIFT, PTL2_CONT_SIZE, PTL2_CONT_SHIFT}, /*PTL2: second*/ + {walk_pte_l2, set_range_l2, PTL3_SIZE, PTL3_SHIFT, PTL3_CONT_SIZE, PTL2_CONT_SHIFT}, /*PTL3: first*/ + {walk_pte_l3, set_range_l3, PTL4_SIZE, PTL4_SHIFT, PTL4_CONT_SIZE, PTL2_CONT_SHIFT}, /*PTL4: zero*/ }; const struct table tbl = table[level-2]; @@ -2780,7 +2781,9 @@ retry: if ((start <= base) && ((base + tbl.pgsize) <= end) && ((args->diff & (tbl.pgsize - 1)) == 0) && (!args->pgshift - || (args->pgshift == tbl.pgshift))) { + || (args->pgshift == tbl.pgshift || + args->pgshift == tbl.cont_pgshift))) { + phys = args->phys + (base - start); //check head pte