]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
KVM: arm64: Make kvm_at() take an OP_AT_*
authorJoey Gouly <joey.gouly@arm.com>
Fri, 3 May 2024 13:01:26 +0000 (14:01 +0100)
committerMarc Zyngier <maz@kernel.org>
Fri, 30 Aug 2024 11:03:51 +0000 (12:03 +0100)
To allow using newer instructions that current assemblers don't know about,
replace the `at` instruction with the underlying SYS instruction.

Signed-off-by: Joey Gouly <joey.gouly@arm.com>
Cc: Oliver Upton <oliver.upton@linux.dev>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Will Deacon <will@kernel.org>
Reviewed-by: Marc Zyngier <maz@kernel.org>
Reviewed-by: Anshuman Khandual <anshuman.khandual@arm.com>
Acked-by: Will Deacon <will@kernel.org>
Signed-off-by: Marc Zyngier <maz@kernel.org>
arch/arm64/include/asm/kvm_asm.h
arch/arm64/kvm/hyp/include/hyp/fault.h

index 2181a11b9d9252c7845f3ad73cee9eedee7e3850..25f49f5fc4a635cd0537b4f8eae58f3f4b5a235a 100644 (file)
@@ -10,6 +10,7 @@
 #include <asm/hyp_image.h>
 #include <asm/insn.h>
 #include <asm/virt.h>
+#include <asm/sysreg.h>
 
 #define ARM_EXIT_WITH_SERROR_BIT  31
 #define ARM_EXCEPTION_CODE(x)    ((x) & ~(1U << ARM_EXIT_WITH_SERROR_BIT))
@@ -259,7 +260,7 @@ extern u64 __kvm_get_mdcr_el2(void);
        asm volatile(                                                   \
        "       mrs     %1, spsr_el2\n"                                 \
        "       mrs     %2, elr_el2\n"                                  \
-       "1:     at      "at_op", %3\n"                                  \
+       "1:     " __msr_s(at_op, "%3") "\n"                             \
        "       isb\n"                                                  \
        "       b       9f\n"                                           \
        "2:     msr     spsr_el2, %1\n"                                 \
index 9e13c1bc2ad5415981c2579539fad598241c0bdc..487c06099d6fc1e01e1f5218916038cd83010056 100644 (file)
@@ -27,7 +27,7 @@ static inline bool __translate_far_to_hpfar(u64 far, u64 *hpfar)
         * saved the guest context yet, and we may return early...
         */
        par = read_sysreg_par();
-       if (!__kvm_at("s1e1r", far))
+       if (!__kvm_at(OP_AT_S1E1R, far))
                tmp = read_sysreg_par();
        else
                tmp = SYS_PAR_EL1_F; /* back to the guest */