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.ben...@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