From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=52679 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Pxejo-0002Vl-GK for qemu-devel@nongnu.org; Thu, 10 Mar 2011 07:13:05 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Pxejn-0004f0-Ik for qemu-devel@nongnu.org; Thu, 10 Mar 2011 07:13:04 -0500 Received: from mail-gx0-f173.google.com ([209.85.161.173]:44111) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Pxejn-0004eo-DN for qemu-devel@nongnu.org; Thu, 10 Mar 2011 07:13:03 -0500 Received: by gxk28 with SMTP id 28so733765gxk.4 for ; Thu, 10 Mar 2011 04:13:02 -0800 (PST) Sender: Paolo Bonzini From: Paolo Bonzini Date: Thu, 10 Mar 2011 13:12:49 +0100 Message-Id: <1299759171-26095-2-git-send-email-pbonzini@redhat.com> In-Reply-To: <1299759171-26095-1-git-send-email-pbonzini@redhat.com> References: <1299759171-26095-1-git-send-email-pbonzini@redhat.com> Subject: [Qemu-devel] [PATCH v2 1/3] really fix -icount in the iothread case List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: edgar.iglesias@gmail.com, jan.kiszka@web.de The correct fix for -icount is to consider the biggest difference between iothread and non-iothread modes. In the traditional model, CPUs run _before_ the iothread calls select (or WaitForMultipleObjects for Win32). In the iothread model, CPUs run while the iothread isn't holding the mutex, i.e. _during_ those same calls. So, the iothread should always block as long as possible to let the CPUs run smoothly---the timeout might as well be infinite---and either the OS or the CPU thread itself will let the iothread know when something happens. At this point, the iothread wakes up and interrupts the CPU. This is exactly the approach that this patch takes: when cpu_exec_all returns in -icount mode, and it is because a vm_clock deadline has been met, it wakes up the iothread to process the timers. This fixes icount better than any other patch that was posted. Signed-off-by: Paolo Bonzini --- cpus.c | 3 +++ 1 files changed, 3 insertions(+), 0 deletions(-) diff --git a/cpus.c b/cpus.c index 0f33945..a953bac 100644 --- a/cpus.c +++ b/cpus.c @@ -861,6 +861,9 @@ static void *qemu_tcg_cpu_thread_fn(void *arg) while (1) { cpu_exec_all(); + if (use_icount && qemu_next_deadline() <= 0) { + qemu_notify_event(); + } qemu_tcg_wait_io_event(); } -- 1.7.4