X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/69777bdcab284335651a8002e2896f3862fa423d..HEAD:/lunaix-os/includes/lunaix/mm/fault.h diff --git a/lunaix-os/includes/lunaix/mm/fault.h b/lunaix-os/includes/lunaix/mm/fault.h index 77aab84..abc8b7e 100644 --- a/lunaix-os/includes/lunaix/mm/fault.h +++ b/lunaix-os/includes/lunaix/mm/fault.h @@ -2,15 +2,16 @@ #define __LUNAIX_FAULT_H #include -#include +#include #include +#include #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 */