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:
parent
f3d6b95e83
commit
bd967e05da
13
vl.c
13
vl.c
@ -6298,14 +6298,17 @@ 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;
|
||||||
|
|
||||||
if (shutdown_requested) {
|
if (shutdown_requested) {
|
||||||
@ -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;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user