From e6e35b1ea3395d8c2e750fc515b00cf24c86d892 Mon Sep 17 00:00:00 2001 From: aliguori Date: Fri, 24 Apr 2009 18:03:57 +0000 Subject: [PATCH] qemu: refactor tcg cpu execution loop (Marcelo Tosatti) Signed-off-by: Marcelo Tosatti Signed-off-by: Anthony Liguori git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@7246 c046a42c-6fe2-441c-8c8c-71466251a162 --- vl.c | 53 +++++++++++++++++++++++++++++------------------------ 1 file changed, 29 insertions(+), 24 deletions(-) diff --git a/vl.c b/vl.c index eedecfe..78320b2 100644 --- a/vl.c +++ b/vl.c @@ -3951,6 +3951,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) @@ -4034,31 +4058,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 @@ -4068,7 +4074,6 @@ static void main_loop(void) #endif } while (vm_can_run()); - if (qemu_debug_requested()) vm_stop(EXCP_DEBUG); if (qemu_shutdown_requested()) { -- 2.7.4