X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/0eabc11fcf240415e39f3873dfce7cd9384b3042..986ce23ace2f7875a1a561bd947f435a7594146c:/lunaix-os/kernel/mm/mmap.c?ds=inline diff --git a/lunaix-os/kernel/mm/mmap.c b/lunaix-os/kernel/mm/mmap.c index f700fd5..8eb7482 100644 --- a/lunaix-os/kernel/mm/mmap.c +++ b/lunaix-os/kernel/mm/mmap.c @@ -139,6 +139,15 @@ found: return 0; } +int +mem_remap(void** addr_out, + struct mm_region** remapped, + void* addr, + struct v_file* file, + struct mmap_param* param) +{ +} + void mem_sync_pages(ptr_t mnt, struct mm_region* region, @@ -288,24 +297,25 @@ __DEFINE_LXSYSCALL3(void*, sys_mmap, void*, addr, size_t, length, va_list, lst) if (!addr) { addr = UMMAP_START; } else if (addr < UMMAP_START || addr + length >= UMMAP_END) { - errno = ENOMEM; - goto done; - } - - struct v_fd* vfd; - if ((errno = vfs_getfd(fd, &vfd))) { - goto done; + if (!(options & (MAP_FIXED | MAP_FIXED_NOREPLACE))) { + errno = ENOMEM; + goto done; + } } - struct v_file* file = vfd->file; + struct v_file* file = NULL; if (!(options & MAP_ANON)) { + struct v_fd* vfd; + if ((errno = vfs_getfd(fd, &vfd))) { + goto done; + } + + file = vfd->file; if (!file->ops->read_page) { errno = ENODEV; goto done; } - } else { - file = NULL; } struct mmap_param param = { .flags = options,