@@ -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
@@ -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)
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(+)