clear-pkgs-linux-iot-lts2018/0927-trusty-add-RAX-into-cl...

63 lines
1.7 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: "Qi, Yadong" <yadong.qi@intel.com>
Date: Fri, 16 Mar 2018 15:42:07 +0800
Subject: [PATCH] trusty: add RAX into clobber list of inline asm for ACRN
The RAX regiser will be modified when do "vmcall" for ACRN
hypervisor. So the RAX register should to be listed in asm
clobber list to inform compiler aware of such changes.
Change-Id: I298c056c109e974d2a391ba7b3e8dfbb7f25ed4f
Signed-off-by: Qi, Yadong <yadong.qi@intel.com>
---
drivers/trusty/trusty.c | 24 +++++++++++++-----------
1 file changed, 13 insertions(+), 11 deletions(-)
diff --git a/drivers/trusty/trusty.c b/drivers/trusty/trusty.c
index e253ee498ab5..4d33f269851d 100755
--- a/drivers/trusty/trusty.c
+++ b/drivers/trusty/trusty.c
@@ -56,26 +56,28 @@ struct trusty_smc_interface {
static ulong (*smc)(ulong, ulong, ulong, ulong);
-#define asm_smc_vmcall(smc_id, rdi, rsi, rdx, rbx) \
-do { \
- __asm__ __volatile__( \
- "vmcall; \n" \
- : "=D"(rdi) \
- : "r"(smc_id), "D"(rdi), "S"(rsi), "d"(rdx), "b"(rbx) \
- ); \
-} while (0)
-
static inline ulong smc_evmm(ulong r0, ulong r1, ulong r2, ulong r3)
{
register unsigned long smc_id asm("rax") = EVMM_SMC_HC_ID;
- asm_smc_vmcall(smc_id, r0, r1, r2, r3);
+ __asm__ __volatile__(
+ "vmcall; \n"
+ : "=D"(r0)
+ : "r"(smc_id), "D"(r0), "S"(r1), "d"(r2), "b"(r3)
+ );
+
return r0;
}
static inline ulong smc_acrn(ulong r0, ulong r1, ulong r2, ulong r3)
{
register unsigned long smc_id asm("r8") = ACRN_SMC_HC_ID;
- asm_smc_vmcall(smc_id, r0, r1, r2, r3);
+ __asm__ __volatile__(
+ "vmcall; \n"
+ : "=D"(r0)
+ : "r"(smc_id), "D"(r0), "S"(r1), "d"(r2), "b"(r3)
+ : "rax"
+ );
+
return r0;
}
--
https://clearlinux.org