On 06.11.18 00:04, Ralf Ramsauer wrote:
If we want to call SMCCC very early in the exit path, we have to store x0-x3
as early as possible. Rearrange the exit path accordingly.

Due to the structure of union registers, we also have to push x4 while not
necessarily required. But this makes things easier at the moment. Nevertheless,
we will benefit from that later: we will use x4 to hold variables that need to
be preserved between SMC calls.

Additionally, decorate things with a few comments.

Signed-off-by: Ralf Ramsauer <ralf.ramsa...@oth-regensburg.de>
---
  hypervisor/arch/arm64/entry.S | 15 +++++++++++----
  1 file changed, 11 insertions(+), 4 deletions(-)

diff --git a/hypervisor/arch/arm64/entry.S b/hypervisor/arch/arm64/entry.S
index 0aa8fed8..745adbda 100644
--- a/hypervisor/arch/arm64/entry.S
+++ b/hypervisor/arch/arm64/entry.S
@@ -269,10 +269,20 @@ bootstrap_vectors:
.macro handle_vmexit exit_reason
        .align  7
-       /* Fill the union registers. Should comply with NUM_USR_REGS */
+       /* We need to save EL1 context, reserve some space on the stack */
        sub     sp, sp, #(16 * 16)
+       /* And push [x1-x4] early, we need registers to work on */
        stp     x1, x2, [sp, #(1 * 16)]
        stp     x3, x4, [sp, #(2 * 16)]
+
+       /* x1 is available, use it to hold the exit reason */
+       mov     x1, #\exit_reason
+       /* ... and push it together with x0 */
+       stp     x1, x0, [sp, #(0 * 16)]
+
+       /* [x0-x4] may now be clobbered. */
+
+       /* Fill the rest of the union registers. Should comply with 
NUM_USR_REGS */
        stp     x5, x6, [sp, #(3 * 16)]
        stp     x7, x8, [sp, #(4 * 16)]
        stp     x9, x10, [sp, #(5 * 16)]
@@ -287,9 +297,6 @@ bootstrap_vectors:
        stp     x27, x28, [sp, #(14 * 16)]
        stp     x29, x30, [sp, #(15 * 16)]
- mov x1, #\exit_reason
-       stp     x1, x0, [sp, #(0 * 16)]
-
        mov     x29, xzr        /* reset fp,lr */
        mov     x30, xzr
        mov     x0, sp


Looks good.

Jan

--
Siemens AG, Corporate Technology, CT RDA IOT SES-DE
Corporate Competence Center Embedded Linux

--
You received this message because you are subscribed to the Google Groups 
"Jailhouse" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to jailhouse-dev+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to