[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 11/11] target-mips: Ignore unassigned accesses with K
From: |
Paolo Bonzini |
Subject: |
[Qemu-devel] [PULL 11/11] target-mips: Ignore unassigned accesses with KVM |
Date: |
Wed, 6 Aug 2014 18:12:35 +0200 |
From: James Hogan <address@hidden>
MIPS registers an unassigned access handler which raises a guest bus
error exception. However this causes QEMU to crash when KVM is enabled
as it isn't called from the main execution loop so longjmp() gets called
without a corresponding setjmp().
Until the KVM API can be updated to trigger a guest exception in
response to an MMIO exit, prevent the bus error exception being raised
from mips_cpu_unassigned_access() if KVM is enabled.
The check is at run time since the do_unassigned_access callback is
initialised before it is known whether KVM will be enabled.
The problem can be triggered with Malta emulation by making the guest
write to the reset region at physical address 0x1bf00000, since it is
marked read-only which is treated as unassigned for writes.
Signed-off-by: James Hogan <address@hidden>
Reviewed-by: Aurelien Jarno <address@hidden>
Cc: Peter Maydell <address@hidden>
Cc: Paolo Bonzini <address@hidden>
Cc: Gleb Natapov <address@hidden>
Cc: Christoffer Dall <address@hidden>
Cc: Sanjay Lal <address@hidden>
Signed-off-by: Paolo Bonzini <address@hidden>
---
target-mips/op_helper.c | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/target-mips/op_helper.c b/target-mips/op_helper.c
index 27651a4..df97b35 100644
--- a/target-mips/op_helper.c
+++ b/target-mips/op_helper.c
@@ -21,6 +21,7 @@
#include "qemu/host-utils.h"
#include "exec/helper-proto.h"
#include "exec/cpu_ldst.h"
+#include "sysemu/kvm.h"
#ifndef CONFIG_USER_ONLY
static inline void cpu_mips_tlb_flush (CPUMIPSState *env, int flush_global);
@@ -2168,6 +2169,16 @@ void mips_cpu_unassigned_access(CPUState *cs, hwaddr
addr,
MIPSCPU *cpu = MIPS_CPU(cs);
CPUMIPSState *env = &cpu->env;
+ /*
+ * Raising an exception with KVM enabled will crash because it won't be
from
+ * the main execution loop so the longjmp won't have a matching setjmp.
+ * Until we can trigger a bus error exception through KVM lets just ignore
+ * the access.
+ */
+ if (kvm_enabled()) {
+ return;
+ }
+
if (is_exec) {
helper_raise_exception(env, EXCP_IBE);
} else {
--
1.9.3
- [Qemu-devel] [PULL 00/11] KVM, icount changes for 2014-08-06, Paolo Bonzini, 2014/08/06
- [Qemu-devel] [PULL 02/11] icount: put icount variables into TimerState., Paolo Bonzini, 2014/08/06
- [Qemu-devel] [PULL 03/11] migration: migrate icount fields., Paolo Bonzini, 2014/08/06
- [Qemu-devel] [PULL 04/11] timer: add cpu_icount_to_ns function., Paolo Bonzini, 2014/08/06
- [Qemu-devel] [PULL 01/11] backends: Introduce chr-testdev, Paolo Bonzini, 2014/08/06
- [Qemu-devel] [PULL 05/11] icount: Fix virtual clock start value on ARM, Paolo Bonzini, 2014/08/06
- [Qemu-devel] [PULL 06/11] icount: Add QemuOpts for icount, Paolo Bonzini, 2014/08/06
- [Qemu-devel] [PULL 07/11] icount: Add align option to icount, Paolo Bonzini, 2014/08/06
- [Qemu-devel] [PULL 08/11] cpu-exec: Add sleeping algorithm, Paolo Bonzini, 2014/08/06
- [Qemu-devel] [PULL 09/11] cpu-exec: Print to console if the guest is late, Paolo Bonzini, 2014/08/06
- [Qemu-devel] [PULL 11/11] target-mips: Ignore unassigned accesses with KVM,
Paolo Bonzini <=
- [Qemu-devel] [PULL 10/11] monitor: Add drift info to 'info jit', Paolo Bonzini, 2014/08/06
- Re: [Qemu-devel] [PULL 00/11] KVM, icount changes for 2014-08-06, Peter Maydell, 2014/08/07