Code-base clean-up and refactoring (#47)
[lunaix-os.git] / lunaix-os / includes / lunaix / mm / fault.h
index 77aab8490c021ab92caa624be0b944f51563bb8d..abc8b7e14e7b377b9a202fd4fcc2de0fca78be35 100644 (file)
@@ -2,15 +2,16 @@
 #define __LUNAIX_FAULT_H
 
 #include <lunaix/mm/mm.h>
-#include <lunaix/pcontext.h>
+#include <lunaix/mm/page.h>
 #include <lunaix/mm/procvm.h>
+#include <lunaix/hart_state.h>
 
 #define RESOLVE_OK      ( 0b000001 )
 #define NO_PREALLOC     ( 0b000010 )
 
 struct fault_context
 {
-    isr_param* ictx;
+    struct hart_state* hstate;
 
     struct 
     {
@@ -24,12 +25,15 @@ struct fault_context
     ptr_t fault_refva;      // referneced va, for ptep fault, equals to fault_va otherwise
     pte_t resolving;        // the pte that will resolve the fault
 
-    ptr_t prealloc_pa;      // preallocated physical page in-case of empty fault-pte
+    struct leaflet* prealloc;      // preallocated physical page in-case of empty fault-pte
     
-    bool kernel_vmfault:1;  // faulting address that is kernel
-    bool ptep_fault:1;      // faulting address is a ptep
-    bool remote_fault:1;    // referenced faulting address is remote vms
-    bool kernel_access:1;   // kernel mem access causing the fault
+    struct 
+    {
+        bool kernel_vmfault:1;  // faulting address that is kernel
+        bool ptep_fault:1;      // faulting address is a ptep
+        bool remote_fault:1;    // referenced faulting address is remote vms
+        bool kernel_access:1;   // kernel mem access causing the fault
+    };
 
     struct proc_mm* mm;     // process memory space associated with fault, might be remote
     struct mm_region* vmr;
@@ -37,13 +41,16 @@ struct fault_context
     int resolve_type;
 };
 
-bool
-__arch_prepare_fault_context(struct fault_context* context);
-
 static inline void
-fault_resolved(struct fault_context* fault, pte_t resolved, int flags)
+fault_resolved(struct fault_context* fault, int flags)
 {
-    fault->resolving = resolved;
     fault->resolve_type |= (flags | RESOLVE_OK);
 }
+
+bool
+handle_page_fault(struct fault_context* fault);
+
+void noret
+fault_resolving_failed(struct fault_context* fault);
+
 #endif /* __LUNAIX_FAULT_H */