Merge branch 'parisc-5.10-2' of git://git.kernel.org/pub/scm/linux/kernel/git/deller...
[linux-2.6-microblaze.git] / arch / arm64 / include / asm / percpu.h
index 0b6409b..1599e17 100644 (file)
@@ -19,7 +19,16 @@ static inline void set_my_cpu_offset(unsigned long off)
                        :: "r" (off) : "memory");
 }
 
-static inline unsigned long __my_cpu_offset(void)
+static inline unsigned long __hyp_my_cpu_offset(void)
+{
+       /*
+        * Non-VHE hyp code runs with preemption disabled. No need to hazard
+        * the register access against barrier() as in __kern_my_cpu_offset.
+        */
+       return read_sysreg(tpidr_el2);
+}
+
+static inline unsigned long __kern_my_cpu_offset(void)
 {
        unsigned long off;
 
@@ -35,7 +44,12 @@ static inline unsigned long __my_cpu_offset(void)
 
        return off;
 }
-#define __my_cpu_offset __my_cpu_offset()
+
+#ifdef __KVM_NVHE_HYPERVISOR__
+#define __my_cpu_offset __hyp_my_cpu_offset()
+#else
+#define __my_cpu_offset __kern_my_cpu_offset()
+#endif
 
 #define PERCPU_RW_OPS(sz)                                              \
 static inline unsigned long __percpu_read_##sz(void *ptr)              \
@@ -227,4 +241,14 @@ PERCPU_RET_OP(add, add, ldadd)
 
 #include <asm-generic/percpu.h>
 
+/* Redefine macros for nVHE hyp under DEBUG_PREEMPT to avoid its dependencies. */
+#if defined(__KVM_NVHE_HYPERVISOR__) && defined(CONFIG_DEBUG_PREEMPT)
+#undef this_cpu_ptr
+#define        this_cpu_ptr            raw_cpu_ptr
+#undef __this_cpu_read
+#define        __this_cpu_read         raw_cpu_read
+#undef __this_cpu_write
+#define        __this_cpu_write        raw_cpu_write
+#endif
+
 #endif /* __ASM_PERCPU_H */