Lines Matching full:start

81 static void shm_region_add(abi_ptr start, abi_ptr last)  in shm_region_add()  argument
85 i->start = start; in shm_region_add()
90 static abi_ptr shm_region_find(abi_ptr start) in shm_region_find() argument
94 for (i = interval_tree_iter_first(&shm_regions, start, start); i; in shm_region_find()
95 i = interval_tree_iter_next(i, start, start)) { in shm_region_find()
96 if (i->start == start) { in shm_region_find()
103 static void shm_region_rm_complete(abi_ptr start, abi_ptr last) in shm_region_rm_complete() argument
107 for (i = interval_tree_iter_first(&shm_regions, start, last); i; i = n) { in shm_region_rm_complete()
108 n = interval_tree_iter_next(i, start, last); in shm_region_rm_complete()
109 if (i->start >= start && i->last <= last) { in shm_region_rm_complete()
171 int target_mprotect(abi_ulong start, abi_ulong len, int target_prot) in target_mprotect() argument
180 trace_target_mprotect(start, len, target_prot); in target_mprotect()
182 if ((start & ~TARGET_PAGE_MASK) != 0) { in target_mprotect()
193 if (!guest_range_valid_untagged(start, len)) { in target_mprotect()
197 last = start + len - 1; in target_mprotect()
198 host_start = start & -host_page_size; in target_mprotect()
207 for (abi_ulong a = host_start; a < start; a += TARGET_PAGE_SIZE) { in target_mprotect()
218 if (host_start < start) { in target_mprotect()
221 for (abi_ulong a = host_start; a < start; a += TARGET_PAGE_SIZE) { in target_mprotect()
267 page_set_flags(start, last, page_flags); in target_mprotect()
334 static bool mmap_frag(abi_ulong real_start, abi_ulong start, abi_ulong last, in mmap_frag() argument
359 for (abi_ulong a = real_start; a < start; a += TARGET_PAGE_SIZE) { in mmap_frag()
397 memset(g2h_untagged(start), 0, last - start + 1); in mmap_frag()
398 } else if (!mmap_pread(fd, g2h_untagged(start), last - start + 1, in mmap_frag()
418 static abi_ulong mmap_find_vma_reserved(abi_ulong start, abi_ulong size, in mmap_find_vma_reserved() argument
423 ret = page_find_range_empty(start, reserved_va, size, align); in mmap_find_vma_reserved()
424 if (ret == -1 && start > mmap_min_addr) { in mmap_find_vma_reserved()
426 ret = page_find_range_empty(mmap_min_addr, start - 1, size, align); in mmap_find_vma_reserved()
434 * starts at 'start'.
438 abi_ulong mmap_find_vma(abi_ulong start, abi_ulong size, abi_ulong align) in mmap_find_vma() argument
447 /* If 'start' == 0, then a default start address is used. */ in mmap_find_vma()
448 if (start == 0) { in mmap_find_vma()
449 start = mmap_next_start; in mmap_find_vma()
451 start &= -host_page_size; in mmap_find_vma()
453 start = ROUND_UP(start, align); in mmap_find_vma()
457 return mmap_find_vma_reserved(start, size, align); in mmap_find_vma()
460 addr = start; in mmap_find_vma()
491 if (start == mmap_next_start && addr >= task_unmapped_base) { in mmap_find_vma()
502 * first with enough free space, so start again at the in mmap_find_vma()
515 /* Start over at low memory. */ in mmap_find_vma()
525 * Since the result the kernel gave didn't fit, start in mmap_find_vma()
549 } else if (wrapped && addr >= start) { in mmap_find_vma()
558 static abi_long mmap_end(abi_ulong start, abi_ulong last, in mmap_end() argument
568 page_set_flags(start, last, page_flags); in mmap_end()
570 if (start < passthrough_start) { in mmap_end()
571 page_set_flags(start, passthrough_start - 1, page_flags); in mmap_end()
579 shm_region_rm_complete(start, last); in mmap_end()
580 trace_target_mmap_complete(start); in mmap_end()
589 return start; in mmap_end()
596 static abi_long mmap_h_eq_g(abi_ulong start, abi_ulong len, in mmap_h_eq_g() argument
603 if (start || (flags & (MAP_FIXED | MAP_FIXED_NOREPLACE))) { in mmap_h_eq_g()
604 want_p = g2h_untagged(start); in mmap_h_eq_g()
618 start = h2g(p); in mmap_h_eq_g()
619 last = start + len - 1; in mmap_h_eq_g()
620 return mmap_end(start, last, start, last, flags, page_flags); in mmap_h_eq_g()
650 static abi_long mmap_h_lt_g(abi_ulong start, abi_ulong len, int host_prot, in mmap_h_lt_g() argument
659 if (start || (flags & (MAP_FIXED | MAP_FIXED_NOREPLACE))) { in mmap_h_lt_g()
660 want_p = g2h_untagged(start); in mmap_h_lt_g()
718 !page_check_range_empty(start, start + len - 1)) { in mmap_h_lt_g()
765 start = h2g(p); in mmap_h_lt_g()
768 last = start + len - 1; in mmap_h_lt_g()
774 return mmap_end(start, last, start, pass_last, mmap_flags, page_flags); in mmap_h_lt_g()
783 static abi_long mmap_h_gt_g(abi_ulong start, abi_ulong len, in mmap_h_gt_g() argument
794 if (start || (flags & (MAP_FIXED | MAP_FIXED_NOREPLACE))) { in mmap_h_gt_g()
795 want_p = g2h_untagged(start); in mmap_h_gt_g()
808 /* Update start to the file position at offset. */ in mmap_h_gt_g()
811 start = h2g(p); in mmap_h_gt_g()
812 last = start + len - 1; in mmap_h_gt_g()
813 return mmap_end(start, last, start, last, flags, page_flags); in mmap_h_gt_g()
817 misaligned_offset = (start ^ offset) & (host_page_size - 1); in mmap_h_gt_g()
829 last = start + len - 1; in mmap_h_gt_g()
830 real_start = start & -host_page_size; in mmap_h_gt_g()
834 * Handle the start and end of the mapping. in mmap_h_gt_g()
836 if (real_start < start) { in mmap_h_gt_g()
840 if (!mmap_frag(real_start, start, last, target_prot, in mmap_h_gt_g()
844 return mmap_end(start, last, -1, 0, flags, page_flags); in mmap_h_gt_g()
847 if (!mmap_frag(real_start, start, real_page_last, target_prot, in mmap_h_gt_g()
858 offset + real_page_start - start)) { in mmap_h_gt_g()
865 return mmap_end(start, last, -1, 0, flags, page_flags); in mmap_h_gt_g()
873 want_p += real_start - start; in mmap_h_gt_g()
879 offset + real_start - start); in mmap_h_gt_g()
893 if (!mmap_pread(fd, p, host_len, offset + real_start - start, false)) { in mmap_h_gt_g()
902 return mmap_end(start, last, -1, 0, flags, page_flags); in mmap_h_gt_g()
905 static abi_long target_mmap__locked(abi_ulong start, abi_ulong len, in target_mmap__locked() argument
919 if (!page_check_range_empty(start, start + len - 1)) { in target_mmap__locked()
925 abi_ulong real_start = start & -host_page_size; in target_mmap__locked()
930 start = mmap_find_vma(real_start, real_len, align); in target_mmap__locked()
931 if (start == (abi_ulong)-1) { in target_mmap__locked()
935 start += offset - host_offset; in target_mmap__locked()
943 return mmap_h_eq_g(start, len, host_prot, flags, in target_mmap__locked()
946 return mmap_h_lt_g(start, len, host_prot, flags, in target_mmap__locked()
949 return mmap_h_gt_g(start, len, target_prot, host_prot, flags, in target_mmap__locked()
955 abi_long target_mmap(abi_ulong start, abi_ulong len, int target_prot, in target_mmap() argument
961 trace_target_mmap(start, len, target_prot, flags, fd, offset); in target_mmap()
986 if (start & ~TARGET_PAGE_MASK) { in target_mmap()
990 if (!guest_range_valid_untagged(start, len)) { in target_mmap()
998 ret = target_mmap__locked(start, len, target_prot, flags, in target_mmap()
1020 static int mmap_reserve_or_unmap(abi_ulong start, abi_ulong len) in mmap_reserve_or_unmap() argument
1031 last = start + len - 1; in mmap_reserve_or_unmap()
1032 real_start = start & -host_page_size; in mmap_reserve_or_unmap()
1043 for (a = real_start; a < start; a += TARGET_PAGE_SIZE) { in mmap_reserve_or_unmap()
1053 for (prot = 0, a = real_start; a < start; a += TARGET_PAGE_SIZE) { in mmap_reserve_or_unmap()
1078 int target_munmap(abi_ulong start, abi_ulong len) in target_munmap() argument
1082 trace_target_munmap(start, len); in target_munmap()
1084 if (start & ~TARGET_PAGE_MASK) { in target_munmap()
1089 if (len == 0 || !guest_range_valid_untagged(start, len)) { in target_munmap()
1095 ret = mmap_reserve_or_unmap(start, len); in target_munmap()
1097 page_set_flags(start, start + len - 1, 0); in target_munmap()
1098 shm_region_rm_complete(start, start + len - 1); in target_munmap()
1198 abi_long target_madvise(abi_ulong start, abi_ulong len_in, int advice) in target_madvise() argument
1203 if (start & ~TARGET_PAGE_MASK) { in target_madvise()
1210 if (len == 0 || !guest_range_valid_untagged(start, len)) { in target_madvise()
1255 if (page_check_range(start, len, PAGE_PASSTHROUGH)) { in target_madvise()
1256 ret = get_errno(madvise(g2h_untagged(start), len, advice)); in target_madvise()
1258 page_reset_target_data(start, start + len - 1); in target_madvise()