It would be nice to only have the variable for this is a KVM_ARM_STATE
but currently everything is just held together in the common KVMState.
Only KVM ARM can set the flag though.
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
include/system/kvm_int.h | 4 ++++
target/arm/kvm.c | 19 +++++++++++++++++++
2 files changed, 23 insertions(+)
diff --git a/include/system/kvm_int.h b/include/system/kvm_int.h
index 756a3c0a25..a1e306b7b7 100644
--- a/include/system/kvm_int.h
+++ b/include/system/kvm_int.h
@@ -122,6 +122,10 @@ struct KVMState
OnOffAuto kernel_irqchip_split;
bool sync_mmu;
bool guest_state_protected;
+
+ /* currently Arm only, but we have no KVMArmState */
+ bool trap_harder;
+
uint64_t manual_dirty_log_protect;
/*
* Older POSIX says that ioctl numbers are signed int, but in
diff --git a/target/arm/kvm.c b/target/arm/kvm.c
index 74fda8b809..8b1719bfc1 100644
--- a/target/arm/kvm.c
+++ b/target/arm/kvm.c
@@ -1615,6 +1615,18 @@ static void kvm_arch_set_eager_split_size(Object *obj, Visitor *v,
s->kvm_eager_split_size = value;
}
+static bool kvm_arch_get_trap_harder(Object *obj, Error **errp)
+{
+ KVMState *s = KVM_STATE(obj);
+ return s->trap_harder;
+}
+
+static void kvm_arch_set_trap_harder(Object *obj, bool value, Error **errp)
+{
+ KVMState *s = KVM_STATE(obj);
+ s->trap_harder = value;
+}
+
void kvm_arch_accel_class_init(ObjectClass *oc)
{
object_class_property_add(oc, "eager-split-size", "size",
@@ -1623,6 +1635,13 @@ void kvm_arch_accel_class_init(ObjectClass *oc)
object_class_property_set_description(oc, "eager-split-size",
"Eager Page Split chunk size for hugepages. (default: 0, disabled)");
+
+ object_class_property_add_bool(oc, "trap-harder",
+ kvm_arch_get_trap_harder,
+ kvm_arch_set_trap_harder);
+
+ object_class_property_set_description(oc, "trap-harder",
+ "Trap harder mode traps almost everything to QEMU (default: off)");
}
int kvm_arch_insert_hw_breakpoint(vaddr addr, vaddr len, int type)
--
2.47.2