refactor: cut off some bloats in intr_ctx
[lunaix-os.git] / lunaix-os / kernel / asm / x86 / pfault.c
index 6df3182622bce973794b360cb01cb91f5e138843..2e4750397602e55a3cc3deff8a8aa0d688252494 100644 (file)
@@ -36,7 +36,7 @@ intr_routine_page_fault(const isr_param* param)
         goto segv_term;
     }
 
         goto segv_term;
     }
 
-    if (!SEL_RPL(param->cs)) {
+    if (!SEL_RPL(param->execp->cs)) {
         // 如果是内核页错误……
         if (do_kernel(&mapping)) {
             return;
         // 如果是内核页错误……
         if (do_kernel(&mapping)) {
             return;
@@ -91,8 +91,8 @@ segv_term:
     kprintf(KERROR "(pid: %d) Segmentation fault on %p (%p:%p)\n",
             __current->pid,
             ptr,
     kprintf(KERROR "(pid: %d) Segmentation fault on %p (%p:%p)\n",
             __current->pid,
             ptr,
-            param->cs,
-            param->eip);
+            param->execp->cs,
+            param->execp->eip);
     __SIGSET(__current->sig_pending, _SIGSEGV);
     schedule();
     // should not reach
     __SIGSET(__current->sig_pending, _SIGSEGV);
     schedule();
     // should not reach
@@ -108,14 +108,8 @@ int
 do_kernel(v_mapping* mapping)
 {
     uintptr_t addr = mapping->va;
 do_kernel(v_mapping* mapping)
 {
     uintptr_t addr = mapping->va;
-    if (addr >= KHEAP_START && addr < PROC_START) {
-        // This is kernel heap page
-        uintptr_t pa = pmm_alloc_page(KERNEL_PID, 0);
-        *mapping->pte = (*mapping->pte & 0xfff) | pa | PG_PRESENT;
-        cpu_invplg(mapping->pte);
-        cpu_invplg(addr);
-        goto done;
-    }
+
+    // TODO
 
     return 0;
 done:
 
     return 0;
 done: