diff options
author | aliguori <aliguori@c046a42c-6fe2-441c-8c8c-71466251a162> | 2009-04-24 18:03:57 +0000 |
---|---|---|
committer | aliguori <aliguori@c046a42c-6fe2-441c-8c8c-71466251a162> | 2009-04-24 18:03:57 +0000 |
commit | e6e35b1ea3395d8c2e750fc515b00cf24c86d892 (patch) | |
tree | f2b981d0c0289fa39cc0f44685f7f15e61ca77bf | |
parent | e568902a02aa58dc53d4158aa2942ef3ff08a9ce (diff) |
qemu: refactor tcg cpu execution loop (Marcelo Tosatti)
Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@7246 c046a42c-6fe2-441c-8c8c-71466251a162
-rw-r--r-- | vl.c | 53 |
1 files changed, 29 insertions, 24 deletions
@@ -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()) { |