KVM: arm64: Don't log IMP DEF sysreg traps
authorMark Rutland <mark.rutland@arm.com>
Thu, 5 Dec 2019 18:06:52 +0000 (18:06 +0000)
committerMarc Zyngier <maz@kernel.org>
Fri, 6 Dec 2019 19:37:48 +0000 (19:37 +0000)
We don't intend to support IMPLEMENATION DEFINED system registers, but
have to trap them (and emulate them as UNDEFINED). These traps aren't
interesting to the system administrator or to the KVM developers, so
let's not bother logging when we do so.

Signed-off-by: Mark Rutland <mark.rutland@arm.com>
Signed-off-by: Marc Zyngier <maz@kernel.org>
Link: https://lore.kernel.org/r/20191205180652.18671-3-mark.rutland@arm.com
arch/arm64/kvm/sys_regs.c

index e8bf08e09f78370896d5576df3269661d0e4caa8..bd2ac3796d8d0f0d8a3ea9d2283d01d28d7034b2 100644 (file)
@@ -2229,6 +2229,12 @@ int kvm_handle_cp14_32(struct kvm_vcpu *vcpu, struct kvm_run *run)
                                NULL, 0);
 }
 
+static bool is_imp_def_sys_reg(struct sys_reg_params *params)
+{
+       // See ARM DDI 0487E.a, section D12.3.2
+       return params->Op0 == 3 && (params->CRn & 0b1011) == 0b1011;
+}
+
 static int emulate_sys_reg(struct kvm_vcpu *vcpu,
                           struct sys_reg_params *params)
 {
@@ -2244,6 +2250,8 @@ static int emulate_sys_reg(struct kvm_vcpu *vcpu,
 
        if (likely(r)) {
                perform_access(vcpu, params, r);
+       } else if (is_imp_def_sys_reg(params)) {
+               kvm_inject_undefined(vcpu);
        } else {
                print_sys_reg_msg(params,
                                  "Unsupported guest sys_reg access at: %lx [%08lx]\n",