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.