From patchwork Wed Feb 17 22:14:41 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marcelo Tosatti X-Patchwork-Id: 80096 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by demeter.kernel.org (8.14.3/8.14.3) with ESMTP id o1HMJ13u011230 for ; Wed, 17 Feb 2010 22:19:01 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754077Ab0BQWSz (ORCPT ); Wed, 17 Feb 2010 17:18:55 -0500 Received: from mx1.redhat.com ([209.132.183.28]:22262 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753388Ab0BQWSw (ORCPT ); Wed, 17 Feb 2010 17:18:52 -0500 Received: from int-mx04.intmail.prod.int.phx2.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.17]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id o1HMIqwL026913 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Wed, 17 Feb 2010 17:18:52 -0500 Received: from ns3.rdu.redhat.com (ns3.rdu.redhat.com [10.11.255.199]) by int-mx04.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id o1HMIo9E029194; Wed, 17 Feb 2010 17:18:51 -0500 Received: from amt.cnet (vpn-11-69.rdu.redhat.com [10.11.11.69]) by ns3.rdu.redhat.com (8.13.8/8.13.8) with ESMTP id o1HMIlbk031068; Wed, 17 Feb 2010 17:18:47 -0500 Received: from amt.cnet (amt.cnet [127.0.0.1]) by amt.cnet (Postfix) with ESMTP id DDDA768A872; Wed, 17 Feb 2010 20:18:14 -0200 (BRST) Received: (from marcelo@localhost) by amt.cnet (8.14.3/8.14.3/Submit) id o1HMIE9A018273; Wed, 17 Feb 2010 20:18:14 -0200 Message-Id: <20100217221701.041682707@redhat.com> User-Agent: quilt/0.47-1 Date: Wed, 17 Feb 2010 20:14:41 -0200 From: Marcelo Tosatti To: kvm@vger.kernel.org Cc: avi@redhat.com, Marcelo Tosatti Subject: [patch uq/master 2/4] qemu: kvm specific wait_io_event References: <20100217221439.351652889@redhat.com> Content-Disposition: inline; filename=kvm-specific-wait-io-event X-Scanned-By: MIMEDefang 2.67 on 10.5.11.17 Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.3 (demeter.kernel.org [140.211.167.41]); Wed, 17 Feb 2010 22:19:01 +0000 (UTC) Index: qemu/vl.c =================================================================== --- qemu.orig/vl.c +++ qemu/vl.c @@ -3382,6 +3382,7 @@ static QemuCond qemu_pause_cond; static void block_io_signals(void); static void unblock_io_signals(void); static int tcg_has_work(void); +static int cpu_has_work(CPUState *env); static int qemu_init_main_loop(void) { @@ -3402,6 +3403,15 @@ static int qemu_init_main_loop(void) return 0; } +static void qemu_wait_io_event_common(CPUState *env) +{ + if (env->stop) { + env->stop = 0; + env->stopped = 1; + qemu_cond_signal(&qemu_pause_cond); + } +} + static void qemu_wait_io_event(CPUState *env) { while (!tcg_has_work()) @@ -3418,11 +3428,15 @@ static void qemu_wait_io_event(CPUState qemu_mutex_unlock(&qemu_fair_mutex); qemu_mutex_lock(&qemu_global_mutex); - if (env->stop) { - env->stop = 0; - env->stopped = 1; - qemu_cond_signal(&qemu_pause_cond); - } + qemu_wait_io_event_common(env); +} + +static void qemu_kvm_wait_io_event(CPUState *env) +{ + while (!cpu_has_work(env)) + qemu_cond_timedwait(env->halt_cond, &qemu_global_mutex, 1000); + + qemu_wait_io_event_common(env); } static int qemu_cpu_exec(CPUState *env); @@ -3448,7 +3462,7 @@ static void *kvm_cpu_thread_fn(void *arg while (1) { if (cpu_can_run(env)) qemu_cpu_exec(env); - qemu_wait_io_event(env); + qemu_kvm_wait_io_event(env); } return NULL;