Commit 15a7644956c5265ed3e4d2817a9eca993d0b64fa

Authored by bellard
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
@@ -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;