refactor: make pci device driver loading passive, pci bus scanner will not load them...
[lunaix-os.git] / lunaix-os / kernel / mm / mmap.c
index f23ff60ab895702ee90271bcc5bc57e177db4bde..3ca77f272ff5d174c1670aee59f9bea9fff1bac0 100644 (file)
@@ -7,8 +7,10 @@
 #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)
@@ -64,7 +66,7 @@ mem_map(void** addr_out,
 {
     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 = &param->pvms->regions;
@@ -101,7 +103,7 @@ mem_map(void** addr_out,
     return ENOMEM;
 
 found:
-    if (found_loc >= KERNEL_MM_BASE || found_loc < USER_START) {
+    if (found_loc >= KERNEL_EXEC || found_loc < USR_EXEC) {
         return ENOMEM;
     }
 
@@ -172,12 +174,11 @@ mem_sync_pages(ptr_t mnt,
             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;
         }
@@ -191,7 +192,7 @@ mem_sync_pages(ptr_t mnt,
     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);
     }
 }
 
@@ -304,8 +305,8 @@ __DEFINE_LXSYSCALL3(void*, sys_mmap, void*, addr, size_t, length, va_list, lst)
     }
 
     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;
@@ -329,6 +330,7 @@ __DEFINE_LXSYSCALL3(void*, sys_mmap, void*, addr, size_t, length, va_list, lst)
 
     struct mmap_param param = { .flags = options,
                                 .mlen = ROUNDUP(length, PG_SIZE),
+                                .flen = length,
                                 .offset = offset,
                                 .type = REGION_TYPE_GENERAL,
                                 .proct = proct,