From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1LwiCy-0005GX-Lt for qemu-devel@nongnu.org; Wed, 22 Apr 2009 15:34:12 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1LwiCr-0005Dt-Fe for qemu-devel@nongnu.org; Wed, 22 Apr 2009 15:34:09 -0400 Received: from [199.232.76.173] (port=44668 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1LwiCq-0005D4-8r for qemu-devel@nongnu.org; Wed, 22 Apr 2009 15:34:04 -0400 Received: from mx2.redhat.com ([66.187.237.31]:37804) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1LwiCp-0000ip-EC for qemu-devel@nongnu.org; Wed, 22 Apr 2009 15:34:03 -0400 Message-Id: <20090422192120.713122676@localhost.localdomain> References: <20090422191504.975476933@localhost.localdomain> Date: Wed, 22 Apr 2009 16:15:16 -0300 From: mtosatti@redhat.com Content-Disposition: inline; filename=refactor-main-loop-3 Subject: [Qemu-devel] [patch 12/14] qemu: refactor tcg cpu execution loop List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org, aliguori@us.ibm.com Cc: Marcelo Tosatti Signed-off-by: Marcelo Tosatti Index: qemu-iothread-4/vl.c =================================================================== --- qemu-iothread-4.orig/vl.c +++ qemu-iothread-4/vl.c @@ -3887,6 +3887,30 @@ static int qemu_cpu_exec(CPUState *env) return ret; } +static void tcg_cpu_exec(void) +{ + int ret; + + if (next_cpu == NULL) + next_cpu = first_cpu; + for (; next_cpu != NULL; next_cpu = next_cpu->next_cpu) { + CPUState *env = cur_cpu = next_cpu; + + if (!vm_running) + break; + if (timer_alarm_pending) { + timer_alarm_pending = 0; + break; + } + ret = qemu_cpu_exec(env); + if (ret == EXCP_DEBUG) { + gdb_set_stop_cpu(env); + debug_requested = 1; + break; + } + } +} + static int cpu_has_work(CPUState *env) { if (!env->halted) @@ -3970,31 +3994,13 @@ static int vm_can_run(void) static void main_loop(void) { - int ret = 0; -#ifdef CONFIG_PROFILER - int64_t ti; -#endif - for (;;) { - do { - if (next_cpu == NULL) - next_cpu = first_cpu; - for (; next_cpu != NULL; next_cpu = next_cpu->next_cpu) { - CPUState *env = cur_cpu = next_cpu; - if (!vm_running) - break; - if (timer_alarm_pending) { - timer_alarm_pending = 0; - break; - } - ret = qemu_cpu_exec(env); - if (ret == EXCP_DEBUG) { - gdb_set_stop_cpu(env); - debug_requested = 1; - break; - } - } + do { +#ifdef CONFIG_PROFILER + int64_t ti; +#endif + tcg_cpu_exec(); #ifdef CONFIG_PROFILER ti = profile_getclock(); #endif @@ -4004,7 +4010,6 @@ static void main_loop(void) #endif } while (vm_can_run()); - if (qemu_debug_requested()) vm_stop(EXCP_DEBUG); if (qemu_shutdown_requested()) { --