Merge branch 'topic/hda' into for-linus
[safe/jmp/linux-2.6] / arch / powerpc / mm / slice.c
index 583be67..ba51948 100644 (file)
@@ -556,7 +556,7 @@ unsigned long slice_get_unmapped_area(unsigned long addr, unsigned long len,
        if (mask.low_slices || mask.high_slices) {
                slice_convert(mm, mask, psize);
                if (psize > MMU_PAGE_BASE)
-                       on_each_cpu(slice_flush_segments, mm, 0, 1);
+                       on_each_cpu(slice_flush_segments, mm, 1);
        }
        return addr;
 
@@ -710,9 +710,18 @@ int is_hugepage_only_range(struct mm_struct *mm, unsigned long addr,
                           unsigned long len)
 {
        struct slice_mask mask, available;
+       unsigned int psize = mm->context.user_psize;
 
        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 */
        slice_dbg("is_hugepage_only_range(mm=%p, addr=%lx, len=%lx)\n",