Commit 15a7644956c5265ed3e4d2817a9eca993d0b64fa
1 parent
8dd69b8f
better SMP scheduling
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1649 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
17 additions
and
25 deletions
vl.c
@@ -3682,25 +3682,6 @@ void main_loop_wait(int timeout) | @@ -3682,25 +3682,6 @@ void main_loop_wait(int timeout) | ||
3682 | 3682 | ||
3683 | static CPUState *cur_cpu; | 3683 | static CPUState *cur_cpu; |
3684 | 3684 | ||
3685 | -static CPUState *find_next_cpu(void) | ||
3686 | -{ | ||
3687 | - CPUState *env; | ||
3688 | - env = cur_cpu; | ||
3689 | - for(;;) { | ||
3690 | - /* get next cpu */ | ||
3691 | - env = env->next_cpu; | ||
3692 | - if (!env) | ||
3693 | - env = first_cpu; | ||
3694 | - if (!env->cpu_halted) | ||
3695 | - break; | ||
3696 | - /* all CPUs are halted ? */ | ||
3697 | - if (env == cur_cpu) | ||
3698 | - return NULL; | ||
3699 | - } | ||
3700 | - cur_cpu = env; | ||
3701 | - return env; | ||
3702 | -} | ||
3703 | - | ||
3704 | int main_loop(void) | 3685 | int main_loop(void) |
3705 | { | 3686 | { |
3706 | int ret, timeout; | 3687 | int ret, timeout; |
@@ -3709,13 +3690,24 @@ int main_loop(void) | @@ -3709,13 +3690,24 @@ int main_loop(void) | ||
3709 | cur_cpu = first_cpu; | 3690 | cur_cpu = first_cpu; |
3710 | for(;;) { | 3691 | for(;;) { |
3711 | if (vm_running) { | 3692 | if (vm_running) { |
3712 | - /* find next cpu to run */ | ||
3713 | - /* XXX: handle HLT correctly */ | ||
3714 | - env = find_next_cpu(); | ||
3715 | - if (!env) | ||
3716 | - ret = EXCP_HLT; | ||
3717 | - else | 3693 | + |
3694 | + env = cur_cpu; | ||
3695 | + for(;;) { | ||
3696 | + /* get next cpu */ | ||
3697 | + env = env->next_cpu; | ||
3698 | + if (!env) | ||
3699 | + env = first_cpu; | ||
3718 | ret = cpu_exec(env); | 3700 | ret = cpu_exec(env); |
3701 | + if (ret != EXCP_HALTED) | ||
3702 | + break; | ||
3703 | + /* all CPUs are halted ? */ | ||
3704 | + if (env == cur_cpu) { | ||
3705 | + ret = EXCP_HLT; | ||
3706 | + break; | ||
3707 | + } | ||
3708 | + } | ||
3709 | + cur_cpu = env; | ||
3710 | + | ||
3719 | if (shutdown_requested) { | 3711 | if (shutdown_requested) { |
3720 | ret = EXCP_INTERRUPT; | 3712 | ret = EXCP_INTERRUPT; |
3721 | break; | 3713 | break; |