On 01/31/2011 01:22 PM, Jan Kiszka wrote:
On 2011-01-31 10:52, Avi Kivity wrote: > On 01/27/2011 03:09 PM, Jan Kiszka wrote: >> If there is any pending request that requires us to leave the inner loop >> if main_loop, makes sure we do this as soon as possible by enforcing >> non-blocking IO processing. >> >> At this change, move variable definitions out of the inner loop to >> improve readability. >> >> Signed-off-by: Jan Kiszka<jan.kiszka@xxxxxxxxxxx> >> --- >> vl.c | 11 +++++++---- >> 1 files changed, 7 insertions(+), 4 deletions(-) >> >> diff --git a/vl.c b/vl.c >> index 5fad700..2ebc55b 100644 >> --- a/vl.c >> +++ b/vl.c >> @@ -1384,18 +1384,21 @@ qemu_irq qemu_system_powerdown; >> >> static void main_loop(void) >> { >> + bool nonblocking = false; >> +#ifdef CONFIG_PROFILER >> + int64_t ti; >> +#endif >> int r; >> >> qemu_main_loop_start(); >> >> for (;;) { >> do { >> - bool nonblocking = false; >> -#ifdef CONFIG_PROFILER >> - int64_t ti; >> -#endif >> #ifndef CONFIG_IOTHREAD >> nonblocking = cpu_exec_all(); >> + if (!vm_can_run()) { >> + nonblocking = true; >> + } > > Doesn't this cause vmstop to spin? We'll never execute > main_loop_wait(false) if I read the code correctly? > The code path is not changed, we just poll instead of wait in main_loop_wait.
Where do we wait then?
Also, I didn't get your error scenario yet. Even if we left the loop here, what magic would main_loop_wait do to vmstop processing? The stop request is handled outside the loop, that's why we should leave ASAP.
I'm just missing the alternate place where we sleep. If there's no such place, we spin.
-- error compiling committee.c: too many arguments to function -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html