diff options
author | 2009-03-08 18:05:47 +0200 | |
---|---|---|
committer | 2009-03-08 18:05:47 +0200 | |
commit | b2348016dfafa932523c2d4ac842ba82ce90edf1 (patch) | |
tree | e087c868f49ce9ee370ed3c6657ac0075ad4ae47 /cpu-exec.c | |
parent | kvm: external module: add kvm-ia64.c to hack files list (diff) | |
parent | Use firmware configuration instead of NVRAM (initial patch by Aurelien Jarno) (diff) | |
download | qemu-kvm-b2348016dfafa932523c2d4ac842ba82ce90edf1.tar.gz qemu-kvm-b2348016dfafa932523c2d4ac842ba82ce90edf1.tar.bz2 qemu-kvm-b2348016dfafa932523c2d4ac842ba82ce90edf1.zip |
Merge branch 'qemu-cvs'
* qemu-cvs: (135 commits)
Use firmware configuration instead of NVRAM (initial patch by Aurelien Jarno)
Add new entries to firmware configuration device
Rename _BSD to HOST_BSD so that it's more obvious that it's defined by configure
target-mips: remove dead code
target-mips: rename helpers from do_ to helper_
do not pretend to support low voltage operation
Fix correct reset value for ARM CP15 c1 auxiliary control register
Work around QEMU GDB stub suboptimality
Fix off-by-one errors for Altivec and SPE registers
Use C99 initializers for BlockDriver methods
clean build: Fix remaining m68k warnings
clean build: Fix arm build warnings
arm: Fix gic_irq_state.level bitfield type
target-ppc: move the CD-ROM drive to the second IDE
ppc_oldworld: swap the MACIO and CMD646 IDE controllers
Use a dedicated function to request exit from execution loop
Fix texinfo syntax errors.
Disable BAT for 970
Fix mfcr on ppc64-softmmu
Keep SLB in-CPU
...
Conflicts:
qemu/configure
qemu/cpu-defs.h
qemu/exec.c
qemu/hw/pci-hotplug.c
qemu/monitor.c
qemu/net.c
qemu/pc-bios/Makefile
qemu/pc-bios/bios.bin
qemu/qemu-tool.c
qemu/sysemu.h
qemu/vl.c
Signed-off-by: Avi Kivity <avi@redhat.com>
Diffstat (limited to 'cpu-exec.c')
-rw-r--r-- | cpu-exec.c | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/cpu-exec.c b/cpu-exec.c index 2132d64da..4e6d6adaf 100644 --- a/cpu-exec.c +++ b/cpu-exec.c @@ -318,7 +318,7 @@ int cpu_exec(CPUState *env1) env->exception_index = -1; } #ifdef USE_KQEMU - if (kqemu_is_ok(env) && env->interrupt_request == 0) { + if (kqemu_is_ok(env) && env->interrupt_request == 0 && env->exit_request == 0) { int ret; env->eflags = env->eflags | helper_cc_compute_all(CC_OP) | (DF & DF_MASK); ret = kqemu_cpu_exec(env); @@ -333,7 +333,7 @@ int cpu_exec(CPUState *env1) } else if (ret == 2) { /* softmmu execution needed */ } else { - if (env->interrupt_request != 0) { + if (env->interrupt_request != 0 || env->exit_request != 0) { /* hardware interrupt will be executed just after */ } else { /* otherwise, we restart */ @@ -538,11 +538,11 @@ int cpu_exec(CPUState *env1) the program flow was changed */ next_tb = 0; } - if (interrupt_request & CPU_INTERRUPT_EXIT) { - env->interrupt_request &= ~CPU_INTERRUPT_EXIT; - env->exception_index = EXCP_INTERRUPT; - cpu_loop_exit(); - } + } + if (unlikely(env->exit_request)) { + env->exit_request = 0; + env->exception_index = EXCP_INTERRUPT; + cpu_loop_exit(); } #ifdef DEBUG_EXEC if (qemu_loglevel_mask(CPU_LOG_TB_CPU)) { @@ -612,7 +612,7 @@ int cpu_exec(CPUState *env1) TB, but before it is linked into a potentially infinite loop and becomes env->current_tb. Avoid starting execution if there is a pending interrupt. */ - if (unlikely (env->interrupt_request & CPU_INTERRUPT_EXIT)) + if (unlikely (env->exit_request)) env->current_tb = NULL; while (env->current_tb) { |