]> xenbits.xensource.com Git - people/pauldu/xen.git/commitdiff
xen/arm: Introduce helpers to clear/flags flags in HCR_EL2
authorJulien Grall <julien.grall@arm.com>
Wed, 21 Feb 2018 14:18:44 +0000 (14:18 +0000)
committerJulien Grall <julien.grall@arm.com>
Wed, 12 Dec 2018 15:48:46 +0000 (15:48 +0000)
A couple of places in the code will need to clear/set flags in HCR_EL2
for a given vCPU and then replicate into the hardware. Introduce
helpers and replace open-coded version.

Signed-off-by: Julien Grall <julien.grall@arm.com>
Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
xen/arch/arm/traps.c
xen/include/asm-arm/processor.h

index 88ffeeb480656c8d58033d88f8ab6d7e0fe811b0..c05a8ad25c8b96d88fc6da786bd64fb3ffa2e31e 100644 (file)
@@ -681,8 +681,7 @@ static void inject_vabt_exception(struct cpu_user_regs *regs)
         break;
     }
 
-    current->arch.hcr_el2 |= HCR_VA;
-    WRITE_SYSREG(current->arch.hcr_el2, HCR_EL2);
+    vcpu_hcr_set_flags(current, HCR_VA);
 }
 
 /*
index 72ddc427783239d664220311fb0a3f5c56b6e71a..cb781751a65984fceaa238a4bd42193bb2a1beee 100644 (file)
@@ -490,6 +490,24 @@ register_t get_default_hcr_flags(void);
                                  : : : "memory");                 \
     } while (0)
 
+/*
+ * Clear/Set flags in HCR_EL2 for a given vCPU. It only supports the current
+ * vCPU for now.
+ */
+#define vcpu_hcr_clear_flags(v, flags)              \
+    do {                                            \
+        ASSERT((v) == current);                     \
+        (v)->arch.hcr_el2 &= ~(flags);              \
+        WRITE_SYSREG((v)->arch.hcr_el2, HCR_EL2);   \
+    } while (0)
+
+#define vcpu_hcr_set_flags(v, flags)                \
+    do {                                            \
+        ASSERT((v) == current);                     \
+        (v)->arch.hcr_el2 |= (flags);               \
+        WRITE_SYSREG((v)->arch.hcr_el2, HCR_EL2);   \
+    } while (0)
+
 #endif /* __ASSEMBLY__ */
 #endif /* __ASM_ARM_PROCESSOR_H */
 /*