#include <lunaix/syscall.h>
#include <lunaix/syscall_utils.h>
+#include <sys/mm/mempart.h>
+
// any size beyond this is bullshit
-#define BS_SIZE (KERNEL_MM_BASE - UMMAP_START)
+#define BS_SIZE (KERNEL_EXEC - USR_MMAP)
int
mem_has_overlap(vm_regions_t* regions, ptr_t start, ptr_t end)
{
assert_msg(addr, "addr can not be NULL");
- ptr_t last_end = USER_START, found_loc = addr;
+ ptr_t last_end = USR_EXEC, found_loc = addr;
struct mm_region *pos, *n;
vm_regions_t* vm_regions = ¶m->pvms->regions;
return ENOMEM;
found:
- if (found_loc >= KERNEL_MM_BASE || found_loc < USER_START) {
+ if (found_loc >= KERNEL_EXEC || found_loc < USR_EXEC) {
return ENOMEM;
}
size_t offset = mapping.va - region->start + region->foff;
struct v_inode* inode = region->mfile->inode;
- region->mfile->ops->write_page(
- inode, (void*)mapping.va, PG_SIZE, offset);
+ region->mfile->ops->write_page(inode, (void*)mapping.va, offset);
*mapping.pte &= ~PG_DIRTY;
- cpu_invplg((ptr_t)mapping.pte);
+ cpu_flush_page((ptr_t)mapping.pte);
} else if ((options & MS_INVALIDATE)) {
goto invalidate;
}
invalidate:
*mapping.pte &= ~PG_PRESENT;
pmm_free_page(KERNEL_PID, mapping.pa);
- cpu_invplg((ptr_t)mapping.pte);
+ cpu_flush_page((ptr_t)mapping.pte);
}
}
}
if (!addr_ptr) {
- addr_ptr = UMMAP_START;
- } else if (addr_ptr < UMMAP_START || addr_ptr + length >= UMMAP_END) {
+ addr_ptr = USR_MMAP;
+ } else if (addr_ptr < USR_MMAP || addr_ptr + length >= USR_MMAP_END) {
if (!(options & (MAP_FIXED | MAP_FIXED_NOREPLACE))) {
errno = ENOMEM;
goto done;
struct mmap_param param = { .flags = options,
.mlen = ROUNDUP(length, PG_SIZE),
+ .flen = length,
.offset = offset,
.type = REGION_TYPE_GENERAL,
.proct = proct,