Lines Matching refs:mm
100 static int slice_area_is_free(struct mm_struct *mm, unsigned long addr, in slice_area_is_free() argument
105 if ((mm->task_size - len) < addr) in slice_area_is_free()
107 vma = find_vma(mm, addr); in slice_area_is_free()
111 static int slice_low_has_vma(struct mm_struct *mm, unsigned long slice) in slice_low_has_vma() argument
113 return !slice_area_is_free(mm, slice << SLICE_LOW_SHIFT, in slice_low_has_vma()
117 static int slice_high_has_vma(struct mm_struct *mm, unsigned long slice) in slice_high_has_vma() argument
128 return !slice_area_is_free(mm, start, end - start); in slice_high_has_vma()
131 static struct slice_mask slice_mask_for_free(struct mm_struct *mm) in slice_mask_for_free() argument
137 if (!slice_low_has_vma(mm, i)) in slice_mask_for_free()
140 if (mm->task_size <= SLICE_LOW_TOP) in slice_mask_for_free()
144 if (!slice_high_has_vma(mm, i)) in slice_mask_for_free()
150 static struct slice_mask slice_mask_for_size(struct mm_struct *mm, int psize) in slice_mask_for_size() argument
158 lpsizes = mm->context.low_slices_psize; in slice_mask_for_size()
163 hpsizes = mm->context.high_slices_psize; in slice_mask_for_size()
182 struct mm_struct *mm = parm; in slice_flush_segments() local
185 if (mm != current->active_mm) in slice_flush_segments()
196 static void slice_convert(struct mm_struct *mm, struct slice_mask mask, int psize) in slice_convert() argument
204 slice_dbg("slice_convert(mm=%p, psize=%d)\n", mm, psize); in slice_convert()
212 lpsizes = mm->context.low_slices_psize; in slice_convert()
219 mm->context.low_slices_psize = lpsizes; in slice_convert()
221 hpsizes = mm->context.high_slices_psize; in slice_convert()
232 mm->context.low_slices_psize, in slice_convert()
233 mm->context.high_slices_psize); in slice_convert()
237 copro_flush_all_slbs(mm); in slice_convert()
265 static unsigned long slice_find_area_bottomup(struct mm_struct *mm, in slice_find_area_bottomup() argument
308 static unsigned long slice_find_area_topdown(struct mm_struct *mm, in slice_find_area_topdown() argument
322 addr = mm->mmap_base; in slice_find_area_topdown()
354 return slice_find_area_bottomup(mm, len, available, psize); in slice_find_area_topdown()
358 static unsigned long slice_find_area(struct mm_struct *mm, unsigned long len, in slice_find_area() argument
363 return slice_find_area_topdown(mm, len, mask, psize); in slice_find_area()
365 return slice_find_area_bottomup(mm, len, mask, psize); in slice_find_area()
394 struct mm_struct *mm = current->mm; in slice_get_unmapped_area() local
398 BUG_ON(mm->task_size == 0); in slice_get_unmapped_area()
400 slice_dbg("slice_get_unmapped_area(mm=%p, psize=%d...\n", mm, psize); in slice_get_unmapped_area()
404 if (len > mm->task_size) in slice_get_unmapped_area()
410 if (fixed && addr > (mm->task_size - len)) in slice_get_unmapped_area()
418 if (addr > mm->task_size - len || in slice_get_unmapped_area()
419 !slice_area_is_free(mm, addr, len)) in slice_get_unmapped_area()
426 good_mask = slice_mask_for_size(mm, psize); in slice_get_unmapped_area()
451 compat_mask = slice_mask_for_size(mm, MMU_PAGE_4K); in slice_get_unmapped_area()
474 newaddr = slice_find_area(mm, len, good_mask, psize, topdown); in slice_get_unmapped_area()
487 potential_mask = slice_mask_for_free(mm); in slice_get_unmapped_area()
506 addr = slice_find_area(mm, len, good_mask, psize, topdown); in slice_get_unmapped_area()
516 addr = slice_find_area(mm, len, potential_mask, psize, topdown); in slice_get_unmapped_area()
522 addr = slice_find_area(mm, len, potential_mask, psize, in slice_get_unmapped_area()
538 slice_convert(mm, mask, psize); in slice_get_unmapped_area()
540 on_each_cpu(slice_flush_segments, mm, 1); in slice_get_unmapped_area()
554 current->mm->context.user_psize, 0); in arch_get_unmapped_area()
564 current->mm->context.user_psize, 1); in arch_get_unmapped_area_topdown()
567 unsigned int get_slice_psize(struct mm_struct *mm, unsigned long addr) in get_slice_psize() argument
574 lpsizes = mm->context.low_slices_psize; in get_slice_psize()
578 hpsizes = mm->context.high_slices_psize; in get_slice_psize()
599 void slice_set_user_psize(struct mm_struct *mm, unsigned int psize) in slice_set_user_psize() argument
607 slice_dbg("slice_set_user_psize(mm=%p, psize=%d)\n", mm, psize); in slice_set_user_psize()
611 old_psize = mm->context.user_psize; in slice_set_user_psize()
616 mm->context.user_psize = psize; in slice_set_user_psize()
619 lpsizes = mm->context.low_slices_psize; in slice_set_user_psize()
625 mm->context.low_slices_psize = lpsizes; in slice_set_user_psize()
627 hpsizes = mm->context.high_slices_psize; in slice_set_user_psize()
641 mm->context.low_slices_psize, in slice_set_user_psize()
642 mm->context.high_slices_psize); in slice_set_user_psize()
648 void slice_set_range_psize(struct mm_struct *mm, unsigned long start, in slice_set_range_psize() argument
653 slice_convert(mm, mask, psize); in slice_set_range_psize()
676 int is_hugepage_only_range(struct mm_struct *mm, unsigned long addr, in is_hugepage_only_range() argument
680 unsigned int psize = mm->context.user_psize; in is_hugepage_only_range()
683 available = slice_mask_for_size(mm, psize); in is_hugepage_only_range()
688 compat_mask = slice_mask_for_size(mm, MMU_PAGE_4K); in is_hugepage_only_range()
695 mm, addr, len); in is_hugepage_only_range()