Lines Matching refs:addr
53 static inline notrace bool slice_addr_is_low(unsigned long addr)
55 u64 tmp = (u64)addr;
86 static int slice_area_is_free(struct mm_struct *mm, unsigned long addr,
91 if ((mm_ctx_slb_addr_limit(&mm->context) - len) < addr)
93 vma = find_vma(mm, addr);
94 return (!vma || (addr + len) <= vm_start_gap(vma));
255 * Compute which slice addr is part of;
261 static bool slice_scan_available(unsigned long addr,
266 if (slice_addr_is_low(addr)) {
267 slice = GET_LOW_SLICE_INDEX(addr);
271 slice = GET_HIGH_SLICE_INDEX(addr);
284 unsigned long addr, found, next_end;
292 addr = TASK_UNMAPPED_BASE;
296 while (addr < high_limit) {
297 info.low_limit = addr;
298 if (!slice_scan_available(addr, available, 1, &addr))
303 * At this point [info.low_limit; addr) covers
308 if (addr >= high_limit)
309 addr = high_limit;
310 else if (slice_scan_available(addr, available, 1, &next_end)) {
311 addr = next_end;
314 info.high_limit = addr;
330 unsigned long addr, found, prev;
339 addr = mm->mmap_base;
347 addr += mm_ctx_slb_addr_limit(&mm->context) - DEFAULT_MAP_WINDOW;
349 while (addr > min_addr) {
350 info.high_limit = addr;
351 if (!slice_scan_available(addr - 1, available, 0, &addr))
356 * At this point [addr; info.high_limit) covers
361 if (addr < min_addr)
362 addr = min_addr;
363 else if (slice_scan_available(addr - 1, available, 0, &prev)) {
364 addr = prev;
367 info.low_limit = addr;
429 unsigned long slice_get_unmapped_area(unsigned long addr, unsigned long len,
445 if (addr >= high_limit || (fixed && (addr + len > high_limit)))
453 if (addr & (page_size - 1))
455 if (addr > high_limit - len)
476 slice_dbg(" addr=%lx, len=%lx, flags=%lx, topdown=%d\n",
477 addr, len, flags, topdown);
480 if (!fixed && addr) {
481 addr = ALIGN(addr, page_size);
482 slice_dbg(" aligned addr=%lx\n", addr);
484 if (addr > high_limit - len || addr < mmap_min_addr ||
485 !slice_area_is_free(mm, addr, len))
486 addr = 0;
533 if (addr != 0 || fixed) {
537 if (slice_check_range_fits(mm, &good_mask, addr, len)) {
539 newaddr = addr;
564 if (addr != 0 || fixed) {
565 if (slice_check_range_fits(mm, &potential_mask, addr, len)) {
567 newaddr = addr;
581 if (addr) {
643 unsigned long addr,
648 return slice_get_unmapped_area(addr, len, flags,
662 unsigned int notrace get_slice_psize(struct mm_struct *mm, unsigned long addr)
669 if (slice_addr_is_low(addr)) {
671 index = GET_LOW_SLICE_INDEX(addr);
674 index = GET_HIGH_SLICE_INDEX(addr);
760 int slice_is_hugepage_only_range(struct mm_struct *mm, unsigned long addr,
777 return !slice_check_range_fits(mm, &available, addr, len);
780 return !slice_check_range_fits(mm, maskp, addr, len);