|
@@ -710,9 +710,18 @@ int is_hugepage_only_range(struct mm_struct *mm, unsigned long addr,
|
|
unsigned long len)
|
|
unsigned long len)
|
|
{
|
|
{
|
|
struct slice_mask mask, available;
|
|
struct slice_mask mask, available;
|
|
|
|
+ unsigned int psize = mm->context.user_psize;
|
|
|
|
|
|
mask = slice_range_to_mask(addr, len);
|
|
mask = slice_range_to_mask(addr, len);
|
|
- available = slice_mask_for_size(mm, mm->context.user_psize);
|
|
|
|
|
|
+ available = slice_mask_for_size(mm, psize);
|
|
|
|
+#ifdef CONFIG_PPC_64K_PAGES
|
|
|
|
+ /* We need to account for 4k slices too */
|
|
|
|
+ if (psize == MMU_PAGE_64K) {
|
|
|
|
+ struct slice_mask compat_mask;
|
|
|
|
+ compat_mask = slice_mask_for_size(mm, MMU_PAGE_4K);
|
|
|
|
+ or_mask(available, compat_mask);
|
|
|
|
+ }
|
|
|
|
+#endif
|
|
|
|
|
|
#if 0 /* too verbose */
|
|
#if 0 /* too verbose */
|
|
slice_dbg("is_hugepage_only_range(mm=%p, addr=%lx, len=%lx)\n",
|
|
slice_dbg("is_hugepage_only_range(mm=%p, addr=%lx, len=%lx)\n",
|