X-Git-Url: https://rtime.felk.cvut.cz/gitweb/l4.git/blobdiff_plain/9347d109a9b928929fdc0cedcc1d867bd7e2a918..c02bb3e0b72cd17aaa3cdfb9587d934f1097cc1f:/l4/pkg/examples/sys/vmtest/svmtest.c diff --git a/l4/pkg/examples/sys/vmtest/svmtest.c b/l4/pkg/examples/sys/vmtest/svmtest.c index 28e280ae1..14802718f 100644 --- a/l4/pkg/examples/sys/vmtest/svmtest.c +++ b/l4/pkg/examples/sys/vmtest/svmtest.c @@ -25,6 +25,7 @@ #include #include #include +#include #include @@ -37,8 +38,8 @@ static unsigned long gdt[32 * 2] __attribute__((aligned(4096))); void vm_resume(void); void handle_vmexit(void); -l4_vcpu_state_t *vcpu; -l4_vm_svm_vmcb_t *vmcb_s; +static l4_vcpu_state_t *vcpu; +static l4_vm_svm_vmcb_t *vmcb_s; static void init_vmcb(l4_vm_svm_vmcb_t *vmcb_s) { @@ -131,7 +132,7 @@ static int check_svm_npt(void) { return (!(dx & 1)); } -int vmexit = 0; +static int vmexit = 0; static int cnt_triggered, cnt_received; @@ -237,16 +238,14 @@ void handle_vmexit(void) { } } -static l4_vcpu_state_t *get_state_mem(l4_addr_t *extstate) { - static int done; +static l4_addr_t get_state_mem(void) +{ long r; l4_msgtag_t tag; static l4_addr_t ext_state; - if (done) { - *extstate = ext_state; - return vcpu; - } + if (ext_state) + return ext_state; if ((r = l4vcpu_ext_alloc(&vcpu, &ext_state, L4_BASE_TASK_CAP, l4re_env()->rm))) { @@ -254,6 +253,8 @@ static l4_vcpu_state_t *get_state_mem(l4_addr_t *extstate) { exit(1); } + assert(ext_state); + vcpu->state = L4_VCPU_F_FPU_ENABLED; vcpu->saved_state = L4_VCPU_F_USER_MODE | L4_VCPU_F_FPU_ENABLED | L4_VCPU_F_IRQ; @@ -270,10 +271,7 @@ static l4_vcpu_state_t *get_state_mem(l4_addr_t *extstate) { exit(1); } - done = 1; - *extstate = ext_state; - - return vcpu; + return ext_state; } @@ -283,8 +281,7 @@ static void run_test(int np_available) { l4_cap_idx_t vm_task = l4re_util_cap_alloc(); // int i; l4_umword_t ip; //, marker, test_end; - l4_addr_t vmcx; - get_state_mem(&vmcx); + l4_addr_t vmcx = get_state_mem(); printf("run test, np_available=%d\n", np_available);