@@ -171,7 +171,11 @@ typedef struct {
unsigned long vdso_base;
#ifdef CONFIG_PPC_MM_SLICES
u16 user_psize; /* page size index */
- unsigned char low_slices_psize[8]; /* 16 slices */
+#if defined(CONFIG_PPC_16K_PAGES)
+ unsigned char low_slices_psize[32]; /* 64 slices */
+#else
+ unsigned char low_slices_psize[256]; /* 512 slices */
+#endif
unsigned char high_slices_psize[0];
unsigned long slb_addr_limit;
#endif
@@ -62,7 +62,8 @@ extern void copy_page(void *to, void *from);
#ifdef CONFIG_PPC_MM_SLICES
-#define SLICE_LOW_SHIFT 28
+/* SLICE_LOW_SHIFT >= 23 to avoid stack overflow in slice_get_unmapped_area() */
+#define SLICE_LOW_SHIFT (PMD_SHIFT > 23 ? PMD_SHIFT : 23)
#define SLICE_HIGH_SHIFT 0
#define SLICE_LOW_TOP (0xfffffffful)
On the 8xx, we can have as many slices as PMD entries. This means we could have 1024 slices in 4k size pages mode and 64 slices in 16k size pages. However, due to a stack overflow in slice_get_unmapped_area(), we limit to 512 slices. Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr> --- v2: no change arch/powerpc/include/asm/mmu-8xx.h | 6 +++++- arch/powerpc/include/asm/page_32.h | 3 ++- 2 files changed, 7 insertions(+), 2 deletions(-)