SMP half-idle fix.

git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2477 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
pbrook 2007-03-11 18:54:57 +00:00
parent f3d6b95e83
commit bd967e05da

13
vl.c
View File

@ -6298,13 +6298,16 @@ int main_loop(void)
#ifdef CONFIG_PROFILER #ifdef CONFIG_PROFILER
qemu_time += profile_getclock() - ti; qemu_time += profile_getclock() - ti;
#endif #endif
if (ret == EXCP_HLT) {
/* Give the next CPU a chance to run. */
cur_cpu = env;
continue;
}
if (ret != EXCP_HALTED) if (ret != EXCP_HALTED)
break; break;
/* all CPUs are halted ? */ /* all CPUs are halted ? */
if (env == cur_cpu) { if (env == cur_cpu)
ret = EXCP_HLT;
break; break;
}
} }
cur_cpu = env; cur_cpu = env;
@ -6325,9 +6328,9 @@ int main_loop(void)
if (ret == EXCP_DEBUG) { if (ret == EXCP_DEBUG) {
vm_stop(EXCP_DEBUG); vm_stop(EXCP_DEBUG);
} }
/* if hlt instruction, we wait until the next IRQ */ /* If all cpus are halted then wait until the next IRQ */
/* XXX: use timeout computed from timers */ /* XXX: use timeout computed from timers */
if (ret == EXCP_HLT) if (ret == EXCP_HALTED)
timeout = 10; timeout = 10;
else else
timeout = 0; timeout = 0;