@@ -144,7 +144,9 @@ struct paca_struct {
u16 mm_ctx_sllp;
#endif
#endif
-
+#ifdef CONFIG_PPC_STD_MMU_64
+ u64 task_size;
+#endif
/*
* then miscellaneous read-write fields
*/
@@ -189,6 +189,10 @@ int main(void)
#endif /* CONFIG_PPC_MM_SLICES */
#endif
+#ifdef CONFIG_PPC_STD_MMU_64
+ DEFINE(PACATASKSIZE, offsetof(struct paca_struct, task_size));
+#endif
+
#ifdef CONFIG_PPC_BOOK3E
OFFSET(PACAPGD, paca_struct, pgd);
OFFSET(PACA_KERNELPGD, paca_struct, kernel_pgd);
@@ -254,6 +254,7 @@ void copy_mm_to_paca(struct mm_struct *mm)
get_paca()->mm_ctx_id = context->id;
#ifdef CONFIG_PPC_MM_SLICES
VM_BUG_ON(!mm->task_size);
+ get_paca()->task_size = mm->task_size;
get_paca()->mm_ctx_low_slices_psize = context->low_slices_psize;
memcpy(&get_paca()->mm_ctx_high_slices_psize,
&context->high_slices_psize, TASK_SLICE_ARRAY_SZ(mm));
@@ -149,7 +149,13 @@ END_MMU_FTR_SECTION_IFCLR(MMU_FTR_1T_SEGMENT)
* For userspace addresses, make sure this is region 0.
*/
cmpdi r9, 0
- bne 8f
+ bne- 8f
+ /*
+ * user space make sure we are within the allowed limit
+ */
+ ld r11,PACATASKSIZE(r13)
+ cmpld r3,r11
+ bge- 8f
/* when using slices, we extract the psize off the slice bitmaps
* and then we need to get the sllp encoding off the mmu_psize_defs
We optmize the slice page size array copy to paca by copying only the range based on task size. This will require us to not look at page size array beyond task size in PACA on slb fault. To enable that copy task size to paca which will be used during slb fault. Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com> --- arch/powerpc/include/asm/paca.h | 4 +++- arch/powerpc/kernel/asm-offsets.c | 4 ++++ arch/powerpc/kernel/paca.c | 1 + arch/powerpc/mm/slb_low.S | 8 +++++++- 4 files changed, 15 insertions(+), 2 deletions(-)