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
1 changed files with 8 additions and 5 deletions

13
vl.c
View File

@ -6298,13 +6298,16 @@ int main_loop(void)
#ifdef CONFIG_PROFILER
qemu_time += profile_getclock() - ti;
#endif
if (ret == EXCP_HLT) {
/* Give the next CPU a chance to run. */
cur_cpu = env;
continue;
}
if (ret != EXCP_HALTED)
break;
/* all CPUs are halted ? */
if (env == cur_cpu) {
ret = EXCP_HLT;
if (env == cur_cpu)
break;
}
}
cur_cpu = env;
@ -6325,9 +6328,9 @@ int main_loop(void)
if (ret == 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 */
if (ret == EXCP_HLT)
if (ret == EXCP_HALTED)
timeout = 10;
else
timeout = 0;