kvm: arm64: Remove hyp_adr/ldr_this_cpu
authorDavid Brazdil <dbrazdil@google.com>
Tue, 22 Sep 2020 20:49:05 +0000 (21:49 +0100)
committerMarc Zyngier <maz@kernel.org>
Wed, 30 Sep 2020 07:37:07 +0000 (08:37 +0100)
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 hyp mode case can be handled using the
__KVM_VHE/NVHE_HYPERVISOR__ macros.

Signed-off-by: David Brazdil <dbrazdil@google.com>
Signed-off-by: Marc Zyngier <maz@kernel.org>
Acked-by: Andrew Scull <ascull@google.com>
Acked-by: Will Deacon <will@kernel.org>
Link: https://lore.kernel.org/r/20200922204910.7265-6-dbrazdil@google.com
arch/arm64/include/asm/assembler.h
arch/arm64/include/asm/kvm_asm.h
arch/arm64/kvm/hyp/hyp-entry.S

index 54d1811776566e5ba5fe9410aec9f1c031b20c1f..ddbe6bf00e336d936457e5f9fbf414ec2a99a224 100644 (file)
@@ -218,6 +218,23 @@ lr .req    x30             // link register
        str     \src, [\tmp, :lo12:\sym]
        .endm
 
+       /*
+        * @dst: destination register
+        */
+#if defined(__KVM_NVHE_HYPERVISOR__) || defined(__KVM_VHE_HYPERVISOR__)
+       .macro  this_cpu_offset, dst
+       mrs     \dst, tpidr_el2
+       .endm
+#else
+       .macro  this_cpu_offset, dst
+alternative_if_not ARM64_HAS_VIRT_HOST_EXTN
+       mrs     \dst, tpidr_el1
+alternative_else
+       mrs     \dst, tpidr_el2
+alternative_endif
+       .endm
+#endif
+
        /*
         * @dst: Result of per_cpu(sym, smp_processor_id()) (can be SP)
         * @sym: The name of the per-cpu variable
@@ -226,11 +243,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 +254,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
 
index c196eec25498473ed7f1a85c7f45925be4874548..cf9456663289818a32dd160c93077bf9955c91bf 100644 (file)
@@ -173,20 +173,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
 
index 46b4dab933d0e7c415a9deff583565970bdba1c1..fba91c2ab41040d3e30b12a3b6f0e9b02bca411b 100644 (file)
@@ -132,7 +132,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