arm/arm64: KVM: Add ARM_EXCEPTION_IS_TRAP macro
authorMarc Zyngier <marc.zyngier@arm.com>
Wed, 19 Dec 2018 08:28:38 +0000 (08:28 +0000)
committerMarc Zyngier <marc.zyngier@arm.com>
Wed, 19 Dec 2018 17:47:53 +0000 (17:47 +0000)
32 and 64bit use different symbols to identify the traps.
32bit has a fine grained approach (prefetch abort, data abort and HVC),
while 64bit is pretty happy with just "trap".

This has been fine so far, except that we now need to decode some
of that in tracepoints that are common to both architectures.

Introduce ARM_EXCEPTION_IS_TRAP which abstracts the trap symbols
and make the tracepoint use it.

Acked-by: Christoffer Dall <christoffer.dall@arm.com>
Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
arch/arm/include/asm/kvm_asm.h
arch/arm64/include/asm/kvm_asm.h
virt/kvm/arm/trace.h

index 231e87ad45d5660f97800e90b39951d8f7c88180..35491af879852dda8b69c85db662757366e91a94 100644 (file)
 
 #define ARM_EXIT_WITH_ABORT_BIT  31
 #define ARM_EXCEPTION_CODE(x)    ((x) & ~(1U << ARM_EXIT_WITH_ABORT_BIT))
+#define ARM_EXCEPTION_IS_TRAP(x)                                       \
+       (ARM_EXCEPTION_CODE((x)) == ARM_EXCEPTION_PREF_ABORT    ||      \
+        ARM_EXCEPTION_CODE((x)) == ARM_EXCEPTION_DATA_ABORT    ||      \
+        ARM_EXCEPTION_CODE((x)) == ARM_EXCEPTION_HVC)
 #define ARM_ABORT_PENDING(x)     !!((x) & (1U << ARM_EXIT_WITH_ABORT_BIT))
 
 #define ARM_EXCEPTION_RESET      0
index b2e12c99db7daf05e02387b2457cad77e3420cdd..f5b79e995f406051ebf4942da7199155843641ef 100644 (file)
@@ -25,6 +25,7 @@
 
 #define ARM_EXIT_WITH_SERROR_BIT  31
 #define ARM_EXCEPTION_CODE(x)    ((x) & ~(1U << ARM_EXIT_WITH_SERROR_BIT))
+#define ARM_EXCEPTION_IS_TRAP(x)  (ARM_EXCEPTION_CODE((x)) == ARM_EXCEPTION_TRAP)
 #define ARM_SERROR_PENDING(x)    !!((x) & (1U << ARM_EXIT_WITH_SERROR_BIT))
 
 #define ARM_EXCEPTION_IRQ        0
index f21f04f8036dce3b4a78be726dca233bcdf4bb45..3828beab93f26bdbdba3adcd50860690c543a963 100644 (file)
@@ -37,7 +37,7 @@ TRACE_EVENT(kvm_exit,
 
        TP_fast_assign(
                __entry->ret                    = ARM_EXCEPTION_CODE(ret);
-               __entry->esr_ec = (ARM_EXCEPTION_CODE(ret) == ARM_EXCEPTION_TRAP) ? esr_ec : 0;
+               __entry->esr_ec = ARM_EXCEPTION_IS_TRAP(ret) ? esr_ec : 0;
                __entry->vcpu_pc                = vcpu_pc;
        ),