arm/arm64: Add new is_kernel_in_hyp_mode predicate
authorMarc Zyngier <marc.zyngier@arm.com>
Mon, 9 Jun 2014 18:47:09 +0000 (19:47 +0100)
committerMarc Zyngier <marc.zyngier@arm.com>
Mon, 29 Feb 2016 18:34:16 +0000 (18:34 +0000)
With ARMv8.1 VHE extension, it will be possible to run the kernel
at EL2 (aka HYP mode). In order for the kernel to easily find out
where it is running, add a new predicate that returns whether or
not the kernel is in HYP mode.

For completeness, the 32bit code also get such a predicate (always
returning false) so that code common to both architecture (timers,
KVM) can use it transparently.

Acked-by: Christoffer Dall <christoffer.dall@linaro.org>
Acked-by: Catalin Marinas <catalin.marinas@arm.com>
Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
arch/arm/include/asm/virt.h
arch/arm64/include/asm/virt.h

index 5fdbfea6defb81aac55c0c1794999e9669a24864..d4ceaf5f299b8d03d6e638a3ea5f72fb5b60a93e 100644 (file)
@@ -75,6 +75,11 @@ static inline bool is_hyp_mode_mismatched(void)
        return !!(__boot_cpu_mode & BOOT_CPU_MODE_MISMATCH);
 }
 
+static inline bool is_kernel_in_hyp_mode(void)
+{
+       return false;
+}
+
 /* The section containing the hypervisor text */
 extern char __hyp_text_start[];
 extern char __hyp_text_end[];
index 7a5df5252dd736e4038e04e40510351820056183..9f22dd607958ad7cd673e79e91c36e28768c35f7 100644 (file)
@@ -23,6 +23,8 @@
 
 #ifndef __ASSEMBLY__
 
+#include <asm/ptrace.h>
+
 /*
  * __boot_cpu_mode records what mode CPUs were booted in.
  * A correctly-implemented bootloader must start all CPUs in the same mode:
@@ -50,6 +52,14 @@ static inline bool is_hyp_mode_mismatched(void)
        return __boot_cpu_mode[0] != __boot_cpu_mode[1];
 }
 
+static inline bool is_kernel_in_hyp_mode(void)
+{
+       u64 el;
+
+       asm("mrs %0, CurrentEL" : "=r" (el));
+       return el == CurrentEL_EL2;
+}
+
 /* The section containing the hypervisor text */
 extern char __hyp_text_start[];
 extern char __hyp_text_end[];