The hyp_adr/ldr_this_cpu helpers were introduced for use in hyp code because
they always needed to use TPIDR_EL2 for base, while adr/ldr_this_cpu from
kernel proper would select between TPIDR_EL2 and _EL1 based on VHE/nVHE.

Simplify this now that the nVHE hyp mode case can be handled using the
__KVM_NVHE_HYPERVISOR__ macro. VHE hyp code selects _EL2 with alternatives.

Signed-off-by: David Brazdil <dbraz...@google.com>
---
 arch/arm64/include/asm/assembler.h | 27 +++++++++++++++++----------
 arch/arm64/include/asm/kvm_asm.h   | 14 +-------------
 arch/arm64/kvm/hyp/hyp-entry.S     |  2 +-
 3 files changed, 19 insertions(+), 24 deletions(-)

diff --git a/arch/arm64/include/asm/assembler.h 
b/arch/arm64/include/asm/assembler.h
index 54d181177656..b392a977efb6 100644
--- a/arch/arm64/include/asm/assembler.h
+++ b/arch/arm64/include/asm/assembler.h
@@ -218,6 +218,21 @@ lr .req    x30             // link register
        str     \src, [\tmp, :lo12:\sym]
        .endm
 
+       /*
+        * @dst: destination register (32 or 64 bit wide)
+        */
+       .macro  this_cpu_offset, dst
+#ifdef __KVM_NVHE_HYPERVISOR__
+       mrs     \dst, tpidr_el2
+#else
+alternative_if_not ARM64_HAS_VIRT_HOST_EXTN
+       mrs     \dst, tpidr_el1
+alternative_else
+       mrs     \dst, tpidr_el2
+alternative_endif
+#endif
+       .endm
+
        /*
         * @dst: Result of per_cpu(sym, smp_processor_id()) (can be SP)
         * @sym: The name of the per-cpu variable
@@ -226,11 +241,7 @@ lr .req    x30             // link register
        .macro adr_this_cpu, dst, sym, tmp
        adrp    \tmp, \sym
        add     \dst, \tmp, #:lo12:\sym
-alternative_if_not ARM64_HAS_VIRT_HOST_EXTN
-       mrs     \tmp, tpidr_el1
-alternative_else
-       mrs     \tmp, tpidr_el2
-alternative_endif
+       this_cpu_offset \tmp
        add     \dst, \dst, \tmp
        .endm
 
@@ -241,11 +252,7 @@ alternative_endif
         */
        .macro ldr_this_cpu dst, sym, tmp
        adr_l   \dst, \sym
-alternative_if_not ARM64_HAS_VIRT_HOST_EXTN
-       mrs     \tmp, tpidr_el1
-alternative_else
-       mrs     \tmp, tpidr_el2
-alternative_endif
+       this_cpu_offset \tmp
        ldr     \dst, [\dst, \tmp]
        .endm
 
diff --git a/arch/arm64/include/asm/kvm_asm.h b/arch/arm64/include/asm/kvm_asm.h
index da4a0826cacd..bbd14e205aba 100644
--- a/arch/arm64/include/asm/kvm_asm.h
+++ b/arch/arm64/include/asm/kvm_asm.h
@@ -151,20 +151,8 @@ extern char 
__smccc_workaround_1_smc[__SMCCC_WORKAROUND_1_SMC_SZ];
 
 #else /* __ASSEMBLY__ */
 
-.macro hyp_adr_this_cpu reg, sym, tmp
-       adr_l   \reg, \sym
-       mrs     \tmp, tpidr_el2
-       add     \reg, \reg, \tmp
-.endm
-
-.macro hyp_ldr_this_cpu reg, sym, tmp
-       adr_l   \reg, \sym
-       mrs     \tmp, tpidr_el2
-       ldr     \reg,  [\reg, \tmp]
-.endm
-
 .macro get_host_ctxt reg, tmp
-       hyp_adr_this_cpu \reg, kvm_host_data, \tmp
+       adr_this_cpu \reg, kvm_host_data, \tmp
        add     \reg, \reg, #HOST_DATA_CONTEXT
 .endm
 
diff --git a/arch/arm64/kvm/hyp/hyp-entry.S b/arch/arm64/kvm/hyp/hyp-entry.S
index 689fccbc9de7..0a0cb1d3acd3 100644
--- a/arch/arm64/kvm/hyp/hyp-entry.S
+++ b/arch/arm64/kvm/hyp/hyp-entry.S
@@ -108,7 +108,7 @@ alternative_cb_end
        str     x0, [x2, #VCPU_WORKAROUND_FLAGS]
 
        /* Check that we actually need to perform the call */
-       hyp_ldr_this_cpu x0, arm64_ssbd_callback_required, x2
+       ldr_this_cpu x0, arm64_ssbd_callback_required, x2
        cbz     x0, wa2_end
 
        mov     w0, #ARM_SMCCC_ARCH_WORKAROUND_2
-- 
2.27.0

_______________________________________________
kvmarm mailing list
kvmarm@lists.cs.columbia.edu
https://lists.cs.columbia.edu/mailman/listinfo/kvmarm

Reply via email to