diff options
Diffstat (limited to 'src/sys/arch/amd64/cpu/mmu.c')
-rw-r--r-- | src/sys/arch/amd64/cpu/mmu.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/src/sys/arch/amd64/cpu/mmu.c b/src/sys/arch/amd64/cpu/mmu.c index 3f11781..66f8584 100644 --- a/src/sys/arch/amd64/cpu/mmu.c +++ b/src/sys/arch/amd64/cpu/mmu.c @@ -147,6 +147,22 @@ __mmu_read_cr3(void) } /* + * Write a value to the CR3 register + * + * @cr3: Value to write + */ +static inline void +__mmu_write_cr3(uint64_t val) +{ + __ASMV( + "mov %0, %%cr3" + : + : "r" (val) + : "memory" + ); +} + +/* * Acquire the paging level used by the * current processing element (pcore) */ @@ -364,6 +380,20 @@ mmu_new_vas(struct vm_vas *res) } /* + * Switch the VAS + */ +int +mmu_write_vas(struct vm_vas *vas) +{ + if (vas->cr3 == 0) { + return -EINVAL; + } + + __mmu_write_cr3(vas->cr3); + return 0; +} + +/* * Verify that we are in a known state */ int |