|
@@ -395,6 +395,7 @@ unsigned long slice_get_unmapped_area(unsigned long addr, unsigned long len,
|
|
|
|
|
|
/* Sanity checks */
|
|
/* Sanity checks */
|
|
BUG_ON(mm->task_size == 0);
|
|
BUG_ON(mm->task_size == 0);
|
|
|
|
+ VM_BUG_ON(radix_enabled());
|
|
|
|
|
|
slice_dbg("slice_get_unmapped_area(mm=%p, psize=%d...\n", mm, psize);
|
|
slice_dbg("slice_get_unmapped_area(mm=%p, psize=%d...\n", mm, psize);
|
|
slice_dbg(" addr=%lx, len=%lx, flags=%lx, topdown=%d\n",
|
|
slice_dbg(" addr=%lx, len=%lx, flags=%lx, topdown=%d\n",
|
|
@@ -568,6 +569,16 @@ unsigned int get_slice_psize(struct mm_struct *mm, unsigned long addr)
|
|
unsigned char *hpsizes;
|
|
unsigned char *hpsizes;
|
|
int index, mask_index;
|
|
int index, mask_index;
|
|
|
|
|
|
|
|
+ /*
|
|
|
|
+ * Radix doesn't use slice, but can get enabled along with MMU_SLICE
|
|
|
|
+ */
|
|
|
|
+ if (radix_enabled()) {
|
|
|
|
+#ifdef CONFIG_PPC_64K_PAGES
|
|
|
|
+ return MMU_PAGE_64K;
|
|
|
|
+#else
|
|
|
|
+ return MMU_PAGE_4K;
|
|
|
|
+#endif
|
|
|
|
+ }
|
|
if (addr < SLICE_LOW_TOP) {
|
|
if (addr < SLICE_LOW_TOP) {
|
|
u64 lpsizes;
|
|
u64 lpsizes;
|
|
lpsizes = mm->context.low_slices_psize;
|
|
lpsizes = mm->context.low_slices_psize;
|
|
@@ -605,6 +616,7 @@ void slice_set_user_psize(struct mm_struct *mm, unsigned int psize)
|
|
|
|
|
|
slice_dbg("slice_set_user_psize(mm=%p, psize=%d)\n", mm, psize);
|
|
slice_dbg("slice_set_user_psize(mm=%p, psize=%d)\n", mm, psize);
|
|
|
|
|
|
|
|
+ VM_BUG_ON(radix_enabled());
|
|
spin_lock_irqsave(&slice_convert_lock, flags);
|
|
spin_lock_irqsave(&slice_convert_lock, flags);
|
|
|
|
|
|
old_psize = mm->context.user_psize;
|
|
old_psize = mm->context.user_psize;
|
|
@@ -649,6 +661,7 @@ void slice_set_range_psize(struct mm_struct *mm, unsigned long start,
|
|
{
|
|
{
|
|
struct slice_mask mask = slice_range_to_mask(start, len);
|
|
struct slice_mask mask = slice_range_to_mask(start, len);
|
|
|
|
|
|
|
|
+ VM_BUG_ON(radix_enabled());
|
|
slice_convert(mm, mask, psize);
|
|
slice_convert(mm, mask, psize);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -678,6 +691,9 @@ int is_hugepage_only_range(struct mm_struct *mm, unsigned long addr,
|
|
struct slice_mask mask, available;
|
|
struct slice_mask mask, available;
|
|
unsigned int psize = mm->context.user_psize;
|
|
unsigned int psize = mm->context.user_psize;
|
|
|
|
|
|
|
|
+ if (radix_enabled())
|
|
|
|
+ return 0;
|
|
|
|
+
|
|
mask = slice_range_to_mask(addr, len);
|
|
mask = slice_range_to_mask(addr, len);
|
|
available = slice_mask_for_size(mm, psize);
|
|
available = slice_mask_for_size(mm, psize);
|
|
#ifdef CONFIG_PPC_64K_PAGES
|
|
#ifdef CONFIG_PPC_64K_PAGES
|