Skip to content

Commit

Permalink
powerpc/mm/radix: Add checks in slice code to catch radix usage
Browse files Browse the repository at this point in the history
Radix doesn't need slice support. Catch incorrect usage of slice code
when radix is enabled.

Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
  • Loading branch information
Aneesh Kumar K.V authored and Michael Ellerman committed May 11, 2016
1 parent d8c476e commit 764041e
Showing 1 changed file with 16 additions and 0 deletions.
16 changes: 16 additions & 0 deletions arch/powerpc/mm/slice.c
Original file line number Diff line number Diff line change
Expand Up @@ -395,6 +395,7 @@ unsigned long slice_get_unmapped_area(unsigned long addr, unsigned long len,

/* Sanity checks */
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(" addr=%lx, len=%lx, flags=%lx, topdown=%d\n",
Expand Down Expand Up @@ -568,6 +569,16 @@ unsigned int get_slice_psize(struct mm_struct *mm, unsigned long addr)
unsigned char *hpsizes;
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) {
u64 lpsizes;
lpsizes = mm->context.low_slices_psize;
Expand Down Expand Up @@ -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);

VM_BUG_ON(radix_enabled());
spin_lock_irqsave(&slice_convert_lock, flags);

old_psize = mm->context.user_psize;
Expand Down Expand Up @@ -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);

VM_BUG_ON(radix_enabled());
slice_convert(mm, mask, psize);
}

Expand Down Expand Up @@ -678,6 +691,9 @@ int is_hugepage_only_range(struct mm_struct *mm, unsigned long addr,
struct slice_mask mask, available;
unsigned int psize = mm->context.user_psize;

if (radix_enabled())
return 0;

mask = slice_range_to_mask(addr, len);
available = slice_mask_for_size(mm, psize);
#ifdef CONFIG_PPC_64K_PAGES
Expand Down

0 comments on commit 764041e

Please sign in to comment.