X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/69777bdcab284335651a8002e2896f3862fa423d..34f6af4f61e0eec9c96113e07f140b609b4113c8:/lunaix-os/kernel/mm/vmm.c?ds=sidebyside diff --git a/lunaix-os/kernel/mm/vmm.c b/lunaix-os/kernel/mm/vmm.c index 6b497b8..180d7f4 100644 --- a/lunaix-os/kernel/mm/vmm.c +++ b/lunaix-os/kernel/mm/vmm.c @@ -1,68 +1,13 @@ #include -#include -#include +#include #include #include -#include -#include +#include +#include LOG_MODULE("VM") -void -vmm_init() -{ - // XXX: something here? -} - -pte_t -vmm_alloc_page(pte_t* ptep, pte_t pte) -{ - ptr_t pa = pmm_alloc_page(PP_FGPERSIST); - if (!pa) { - return null_pte; - } - - pte = pte_setpaddr(pte, pa); - pte = pte_mkloaded(pte); - set_pte(ptep, pte); - - mount_page(PG_MOUNT_1, pa); - memset((void*)PG_MOUNT_1, 0, LFT_SIZE); - unmount_page(PG_MOUNT_1); - - cpu_flush_page((ptr_t)ptep); - - return pte; -} - -int -vmm_set_mapping(ptr_t mnt, ptr_t va, ptr_t pa, pte_attr_t prot) -{ - assert(!va_offset(va)); - - pte_t* ptep = mkptep_va(mnt, va); - pte_t pte = mkpte(pa, prot); - - set_pte(ptep, pte); - - return 1; -} - -ptr_t -vmm_del_mapping(ptr_t mnt, ptr_t va) -{ - assert(!va_offset(va)); - - pte_t* ptep = mkptep_va(mnt, va); - - pte_t old = *ptep; - - set_pte(ptep, null_pte); - - return pte_paddr(old); -} - pte_t vmm_tryptep(pte_t* ptep, size_t lvl_size) { @@ -92,23 +37,14 @@ vmm_tryptep(pte_t* ptep, size_t lvl_size) return *_ptep; } -ptr_t -vmm_v2pat(ptr_t mnt, ptr_t va) -{ - ptr_t va_off = va_offset(va); - pte_t* ptep = mkptep_va(mnt, va); - - return pte_paddr(pte_at(ptep)) + va_off; -} - ptr_t vms_mount(ptr_t mnt, ptr_t vms_root) { assert(vms_root); pte_t* ptep = mkl0tep_va(VMS_SELF, mnt); - set_pte(ptep, mkpte(vms_root, KERNEL_DATA)); - cpu_flush_page(mnt); + set_pte(ptep, mkpte(vms_root, KERNEL_PGTAB)); + tlb_flush_kernel(mnt); return mnt; } @@ -117,7 +53,7 @@ vms_unmount(ptr_t mnt) { pte_t* ptep = mkl0tep_va(VMS_SELF, mnt); set_pte(ptep, null_pte); - cpu_flush_page(mnt); + tlb_flush_kernel(mnt); return mnt; }