summaryrefslogtreecommitdiffstats
path: root/qemu/target-arm/machine.c
diff options
context:
space:
mode:
Diffstat (limited to 'qemu/target-arm/machine.c')
-rw-r--r--qemu/target-arm/machine.c23
1 files changed, 20 insertions, 3 deletions
diff --git a/qemu/target-arm/machine.c b/qemu/target-arm/machine.c
index 32adfe792..03a73d950 100644
--- a/qemu/target-arm/machine.c
+++ b/qemu/target-arm/machine.c
@@ -1,5 +1,7 @@
+#include "qemu/osdep.h"
#include "hw/hw.h"
#include "hw/boards.h"
+#include "qemu/error-report.h"
#include "sysemu/kvm.h"
#include "kvm_arm.h"
#include "internals.h"
@@ -171,9 +173,7 @@ static int get_cpsr(QEMUFile *f, void *opaque, size_t size)
return 0;
}
- /* Avoid mode switch when restoring CPSR */
- env->uncached_cpsr = val & CPSR_M;
- cpsr_write(env, val, 0xffffffff);
+ cpsr_write(env, val, 0xffffffff, CPSRWriteRaw);
return 0;
}
@@ -328,3 +328,20 @@ const VMStateDescription vmstate_arm_cpu = {
NULL
}
};
+
+const char *gicv3_class_name(void)
+{
+ if (kvm_irqchip_in_kernel()) {
+#ifdef TARGET_AARCH64
+ return "kvm-arm-gicv3";
+#else
+ error_report("KVM GICv3 acceleration is not supported on this "
+ "platform");
+#endif
+ } else {
+ /* TODO: Software emulation is not implemented yet */
+ error_report("KVM is currently required for GICv3 emulation");
+ }
+
+ exit(1);
+}