X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?p=palacios.git;a=blobdiff_plain;f=palacios%2Fsrc%2Fpalacios%2Fsvm.c;h=5fadae1d07c7b81457c78bfd71b36c9455eef26f;hp=6d8cdd28bfd350248c0ec029fd43c7cc4397bf65;hb=e23a867d9dcecc70fc76adc0f89404dbc50e5b78;hpb=33916e4213bf7bb340361669bcdb2f3169ea5f06 diff --git a/palacios/src/palacios/svm.c b/palacios/src/palacios/svm.c index 6d8cdd2..5fadae1 100644 --- a/palacios/src/palacios/svm.c +++ b/palacios/src/palacios/svm.c @@ -277,10 +277,14 @@ static int start_svm_guest(struct guest_info *info) { //PrintDebugVMCB((vmcb_t*)(info->vmm_data)); info->run_state = VM_RUNNING; - + rdtscll(info->yield_start_cycle); + + while (1) { ullong_t tmp_tsc; + // Conditionally yield the CPU if the timeslice has expired + v3_yield_cond(info); /* PrintDebug("SVM Entry to CS=%p rip=%p...\n", @@ -289,6 +293,7 @@ static int start_svm_guest(struct guest_info *info) { */ // disable global interrupts for vm state transition + v3_clgi(); @@ -318,6 +323,9 @@ static int start_svm_guest(struct guest_info *info) { } + // Conditionally yield the CPU if the timeslice has expired + v3_yield_cond(info); + if (v3_handle_svm_exit(info) != 0) { vmcb_ctrl_t * guest_ctrl = GET_VMCB_CTRL_AREA((vmcb_t*)(info->vmm_data)); addr_t host_addr;