# HG changeset patch # User anatofuz # Date 1580883761 -32400 # Node ID 97c6157bac166a68ed9d870baeb96ad081200bcd # Parent 9fa2e66bc9ed374be4a14c417c5a790f2ec6b1e6 fix_goto_switchuvm_check_pgdirvm_impl diff -r 9fa2e66bc9ed -r 97c6157bac16 src/impl/vm_impl.cbc --- a/src/impl/vm_impl.cbc Wed Feb 05 14:11:58 2020 +0900 +++ b/src/impl/vm_impl.cbc Wed Feb 05 15:22:41 2020 +0900 @@ -144,8 +144,9 @@ typedef struct proc proc; __code switchuvmvm_impl(struct vm_impl* vm , struct proc* p, __code next(...)) { //:skip - - goto switchuvm_check_pgdirvm_impl(...); + Gearef(cbc_context, vm_impl)->p = p; + Gearef(cbc_context, vm_impl)->next = next; + goto switchuvm_check_pgdirvm_impl(vm, p, next(...)); } __code init_inituvmvm_impl(struct vm_impl* vm, pde_t* pgdir, char* init, uint sz, __code next(...)) { diff -r 9fa2e66bc9ed -r 97c6157bac16 src/impl/vm_impl_private.cbc --- a/src/impl/vm_impl_private.cbc Wed Feb 05 14:11:58 2020 +0900 +++ b/src/impl/vm_impl_private.cbc Wed Feb 05 15:22:41 2020 +0900 @@ -10,8 +10,6 @@ */ __code loaduvm_ptesize_checkvm_impl(struct vm_impl* vm_impl,char* addr, __code next(int ret, ...)) { - //char* addr = vm_impl->addr; - if ((uint) addr %PTE_SZ != 0) { // goto panic } @@ -20,11 +18,6 @@ } __code loaduvm_loopvm_impl(struct vm_impl* vm_impl, uint i, uint sz,__code next(int ret, ...)) { -/* - uint i = vm_impl->i; - uint sz = vm_impl->sz; -*/ - if (i < sz) { goto loaduvm_check_pgdir(vm_impl, next(ret, ...)); } @@ -63,14 +56,6 @@ __code loaduvm_check_pgdir(struct vm_impl* vm_impl, pte_t* pte, pde_t* pgdir, uint i, char* addr, uint pa, __code next(int ret, ...)) { -/* - pte_t* pte = vm_impl->pte; - pde_t* pgdir = vm_impl->pgdir; - uint i = vm_impl->i; - char* addr = vm_impl->addr; - uint pa = vm_impl->pa; -*/ - if ((pte = walkpgdir(pgdir, addr + i, 0)) == 0) { // goto panic } @@ -85,14 +70,6 @@ } __code loaduvm_check_PTE_SZ(struct vm_impl* vm_impl, uint sz, uint i, uint n, struct inode* ip, uint pa, uint offset, __code next(int ret, ...)) { -/* - uint sz = vm_impl->sz; - uint i = vm_impl->i; - uint n = vm_impl->n; - struct inode* ip = vm_impl->ip; - uint pa = vm_impl->pa; - uint offset = vm_impl->offset; -*/ if (sz - i < PTE_SZ) { n = sz - i; diff -r 9fa2e66bc9ed -r 97c6157bac16 src/proc.cbc --- a/src/proc.cbc Wed Feb 05 14:11:58 2020 +0900 +++ b/src/proc.cbc Wed Feb 05 15:22:41 2020 +0900 @@ -183,7 +183,9 @@ __ncode cbc_switchuvm_dummy(struct Context* cbc_context, struct proc* proc){ struct vm* vm = createvm_impl(cbc_context); - Gearef(cbc_context, vm)->vm = (union Data*) vm; + //Gearef(cbc_context, vm)->vm = (union Data*) vm; + Gearef(cbc_context, vm)->p = proc; + Gearef(cbc_context, vm)->next = C_vm_void_ret ; goto meta(cbc_context, vm->switchuvm); }