From: Julien Grall <julien.grall@arm.com>
To: xen-devel@lists.xenproject.org
Cc: jgross@suse.com, Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>,
Julien Grall <julien.grall@arm.com>,
Stefano Stabellini <sstabellini@kernel.org>,
Julien Grall <julien@xen.org>
Subject: [Xen-devel] [PATCH for-4.13 v4 06/19] xen/arm64: entry: Avoid open-coding interrupt flags
Date: Thu, 31 Oct 2019 15:09:09 +0000 [thread overview]
Message-ID: <20191031150922.22938-7-julien.grall@arm.com> (raw)
In-Reply-To: <20191031150922.22938-1-julien.grall@arm.com>
At the moment, the interrupts to mask/unmask are hardcoded in the code
making more difficult to find out what's going on.
A new series of short-hand specific to the file entry.S is now added.
The name of the short-hands should tell which interrupts will be
changed by the msr daif{set, clr} instructions.
Take the opportunity to replace the hardcoded values with the new
short-hands.
Signed-off-by: Julien Grall <julien.grall@arm.com>
Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
---
Changes in v3:
- Add Stefano's reviewed-by
Changes in v2:
- Patch added
---
xen/arch/arm/arm64/entry.S | 36 +++++++++++++++++++++++++++---------
1 file changed, 27 insertions(+), 9 deletions(-)
diff --git a/xen/arch/arm/arm64/entry.S b/xen/arch/arm/arm64/entry.S
index 3e41ba65b6..fac4655bb9 100644
--- a/xen/arch/arm/arm64/entry.S
+++ b/xen/arch/arm/arm64/entry.S
@@ -6,6 +6,24 @@
#include <asm/smccc.h>
#include <public/xen.h>
+#define IFLAGS_D_BIT 8
+#define IFLAGS_A_BIT 4
+#define IFLAGS_I_BIT 2
+#define IFLAGS_F_BIT 1
+
+/*
+ * Short-hands to define the interrupts (D, A, I, F)
+ *
+ * _ means the interrupt state will not change
+ * X means the state of interrupt X will change
+ *
+ * To be used with msr daif{set, clr} only.
+ *
+ */
+#define IFLAGS__AI_ IFLAGS_A_BIT | IFLAGS_I_BIT
+#define IFLAGS__A__ IFLAGS_A_BIT
+#define IFLAGS___I_ IFLAGS_I_BIT
+
/*
* Stack pushing/popping (register pairs only). Equivalent to store decrement
* before, load increment after.
@@ -338,7 +356,7 @@ guest_sync_slowpath:
ALTERNATIVE("bl check_pending_vserror; cbnz x0, 1f",
"nop; nop",
SKIP_SYNCHRONIZE_SERROR_ENTRY_EXIT)
- msr daifclr, #6
+ msr daifclr, #IFLAGS__AI_
mov x0, sp
bl do_trap_guest_sync
1:
@@ -354,7 +372,7 @@ guest_irq:
ALTERNATIVE("bl check_pending_vserror; cbnz x0, 1f",
"nop; nop",
SKIP_SYNCHRONIZE_SERROR_ENTRY_EXIT)
- msr daifclr, #4
+ msr daifclr, #IFLAGS__A__
mov x0, sp
bl do_trap_irq
1:
@@ -366,7 +384,7 @@ guest_fiq_invalid:
guest_error:
entry hyp=0, compat=0
- msr daifclr, #6
+ msr daifclr, #IFLAGS__AI_
mov x0, sp
bl do_trap_guest_serror
exit hyp=0, compat=0
@@ -381,7 +399,7 @@ guest_sync_compat:
ALTERNATIVE("bl check_pending_vserror; cbnz x0, 1f",
"nop; nop",
SKIP_SYNCHRONIZE_SERROR_ENTRY_EXIT)
- msr daifclr, #6
+ msr daifclr, #IFLAGS__AI_
mov x0, sp
bl do_trap_guest_sync
1:
@@ -397,7 +415,7 @@ guest_irq_compat:
ALTERNATIVE("bl check_pending_vserror; cbnz x0, 1f",
"nop; nop",
SKIP_SYNCHRONIZE_SERROR_ENTRY_EXIT)
- msr daifclr, #4
+ msr daifclr, #IFLAGS__A__
mov x0, sp
bl do_trap_irq
1:
@@ -409,7 +427,7 @@ guest_fiq_invalid_compat:
guest_error_compat:
entry hyp=0, compat=1
- msr daifclr, #6
+ msr daifclr, #IFLAGS__AI_
mov x0, sp
bl do_trap_guest_serror
exit hyp=0, compat=1
@@ -420,7 +438,7 @@ ENTRY(return_to_new_vcpu64)
exit hyp=0, compat=0
return_from_trap:
- msr daifset, #2 /* Mask interrupts */
+ msr daifset, #IFLAGS___I_ /* Mask interrupts */
ldr x21, [sp, #UREGS_PC] /* load ELR */
ldr w22, [sp, #UREGS_CPSR] /* load SPSR */
@@ -471,7 +489,7 @@ check_pending_vserror:
* SError, the EL2 error exception will happen after PSTATE.A
* is cleared.
*/
- msr daifclr, #4
+ msr daifclr, #IFLAGS__A__
/*
* This is our single instruction exception window. A pending
@@ -490,7 +508,7 @@ abort_guest_exit_start:
.global abort_guest_exit_end
abort_guest_exit_end:
/* Mask PSTATE asynchronous abort bit, close the checking window. */
- msr daifset, #4
+ msr daifset, #IFLAGS__A__
/*
* Compare elr_el2 and the saved value to check whether we are
--
2.11.0
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel
next prev parent reply other threads:[~2019-10-31 15:10 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-10-31 15:09 [Xen-devel] [PATCH for-4.13 v4 00/19] xen/arm: XSA-201 and XSA-263 fixes Julien Grall
2019-10-31 15:09 ` [Xen-devel] [PATCH for-4.13 v4 01/19] docs/misc: xen-command-line: Remove wrong statement from serrors=diverse Julien Grall
2019-10-31 15:09 ` [Xen-devel] [PATCH for-4.13 v4 02/19] xen/arm: Remove serrors=forward Julien Grall
2019-10-31 15:09 ` [Xen-devel] [PATCH for-4.13 v4 03/19] xen/arm: traps: Rework __do_serror() documentation Julien Grall
2019-10-31 15:09 ` [Xen-devel] [PATCH for-4.13 v4 04/19] docs/misc: xen-command-line: Rework documentation of the option 'serrors' Julien Grall
2019-10-31 15:09 ` [Xen-devel] [PATCH for-4.13 v4 05/19] xen/arm: traps: Update the correct PC when inject a virtual SError to the guest Julien Grall
2019-10-31 15:09 ` Julien Grall [this message]
2019-10-31 15:09 ` [Xen-devel] [PATCH for-4.13 v4 07/19] xen/arm64: entry: Introduce a macro to generate guest vector and use it Julien Grall
2019-10-31 15:09 ` [Xen-devel] [PATCH for-4.13 v4 08/19] xen/arm64: entry: Check if an SError is pending when receiving a vSError Julien Grall
2019-10-31 15:09 ` [Xen-devel] [PATCH for-4.13 v4 09/19] xen/arm: traps: Rework entry/exit from the guest path Julien Grall
2019-10-31 15:09 ` [Xen-devel] [PATCH for-4.13 v4 10/19] xen/arm32: entry: Rename save_guest_regs() Julien Grall
2019-10-31 15:09 ` [Xen-devel] [PATCH for-4.13 v4 11/19] xen/arm: Ensure the SSBD workaround is re-enabled right after exiting a guest Julien Grall
2019-10-31 18:15 ` Stefano Stabellini
2019-10-31 15:09 ` [Xen-devel] [PATCH for-4.13 v4 12/19] xen/arm: traps: Don't ignore invalid value for serrors= Julien Grall
2019-10-31 15:09 ` [Xen-devel] [PATCH for-4.13 v4 13/19] xen/arm: alternative: Remove unused parameter for alternative_if_not_cap Julien Grall
2019-10-31 15:09 ` [Xen-devel] [PATCH for-4.13 v4 14/19] xen/arm: Move ARCH_PATCH_INSN_SIZE out of the header livepatch.h Julien Grall
2019-10-31 15:09 ` [Xen-devel] [PATCH for-4.13 v4 15/19] xen/arm: Allow insn.h to be called from assembly Julien Grall
2019-10-31 15:09 ` [Xen-devel] [PATCH for-4.13 v4 16/19] xen/arm: alternative: add auto-nop infrastructure Julien Grall
2019-10-31 15:09 ` [Xen-devel] [PATCH for-4.13 v4 17/19] xen/arm: asm: Replace use of ALTERNATIVE with alternative_if Julien Grall
2019-10-31 15:09 ` [Xen-devel] [PATCH for-4.13 v4 18/19] xen/arm: Update the ASSERT() in SYNCHRONIZE_SERROR() Julien Grall
2019-10-31 15:09 ` [Xen-devel] [PATCH for-4.13 v4 19/19] xen/arm: entry: Ensure the guest state is synced when receiving a vSError Julien Grall
2019-10-31 18:18 ` Stefano Stabellini
2019-11-01 10:47 ` [Xen-devel] [PATCH for-4.13 v4 00/19] xen/arm: XSA-201 and XSA-263 fixes Jürgen Groß
2019-11-01 14:45 ` Julien Grall
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20191031150922.22938-7-julien.grall@arm.com \
--to=julien.grall@arm.com \
--cc=Volodymyr_Babchuk@epam.com \
--cc=jgross@suse.com \
--cc=julien@xen.org \
--cc=sstabellini@kernel.org \
--cc=xen-devel@lists.xenproject.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.