xen-devel.lists.xenproject.org archive mirror
 help / color / mirror / Atom feed
From: Wei Chen <Wei.Chen@arm.com>
To: xen-devel@lists.xen.org
Cc: sstabellini@kernel.org, wei.chen@arm.com, steve.capper@arm.com,
	Kaly.Xin@arm.com, julien.grall@arm.com, nd@arm.com
Subject: [PATCH v3 06/19] xen/arm: Introduce a virtual abort injection helper
Date: Fri, 31 Mar 2017 21:07:46 +0800	[thread overview]
Message-ID: <1490965679-619-7-git-send-email-Wei.Chen@arm.com> (raw)
In-Reply-To: <1490965679-619-1-git-send-email-Wei.Chen@arm.com>

When guest triggers async aborts, in most platform, such aborts
will be routed to hypervisor. But we don't want the hypervisor
to handle such aborts, so we have to route such aborts back to
the guest.

This helper is using the HCR_EL2.VSE (HCR.VA for aarch32) bit to
route such aborts back to the guest. After updating HCR_EL2.VSE bit
in vCPU context, we write the value to HCR_EL2 immediately. In this
case we don't need to move the restoration of HCR_EL2 to other place,
and it worked regardless of whether we get preempted.

If the guest PC had been advanced by SVC/HVC/SMC instructions before
we caught the SError in hypervisor, we have to adjust the guest PC to
exact address while the SError generated.

About HSR_EC_SVC32/64, even thought we don't trap SVC32/64 today,
we would like them to be handled here. This would be useful when
VM introspection will gain support of SVC32/64 trapping.

After updating HCR_EL2.VSE bit of vCPU HCR_EL2, write the value
to HCR_EL2 immediately. In this case we don't need to move the
restoration of HCR_EL2 to leave_hypervisor_tail, and it worked
regardless of whether we get preempted.

This helper will be used by the later patches in this series, we
use #if 0 to disable it in this patch temporarily to remove the
warning message of unused function from compiler.

Signed-off-by: Wei Chen <Wei.Chen@arm.com>
Acked-by: Stefano Stabellini <sstabellini@kernel.org>
Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>

---
v2->v3:
1. After updating HCR_EL2.VSE bit of vCPU HCR_EL2, write the value
   to HCR_EL2 immediately.
2. Explain in commit message why we write the value to HCR_EL2 after
   updating the HCR_EL2.VSE bit in vCPU context.
3. Add Stefano's Reviewed-by tag.
---
 xen/arch/arm/traps.c            | 33 +++++++++++++++++++++++++++++++++
 xen/include/asm-arm/processor.h |  1 +
 2 files changed, 34 insertions(+)

diff --git a/xen/arch/arm/traps.c b/xen/arch/arm/traps.c
index 5f758e1..b15923a 100644
--- a/xen/arch/arm/traps.c
+++ b/xen/arch/arm/traps.c
@@ -618,6 +618,39 @@ static void inject_dabt_exception(struct cpu_user_regs *regs,
 #endif
 }
 
+#if 0
+/* Inject a virtual Abort/SError into the guest. */
+static void inject_vabt_exception(struct cpu_user_regs *regs)
+{
+    const union hsr hsr = { .bits = regs->hsr };
+
+    /*
+     * SVC/HVC/SMC already have an adjusted PC (See ARM ARM DDI 0487A.j
+     * D1.10.1 for more details), which we need to correct in order to
+     * return to after having injected the SError.
+     */
+    switch ( hsr.ec )
+    {
+    case HSR_EC_SVC32:
+    case HSR_EC_HVC32:
+    case HSR_EC_SMC32:
+#ifdef CONFIG_ARM_64
+    case HSR_EC_SVC64:
+    case HSR_EC_HVC64:
+    case HSR_EC_SMC64:
+#endif
+        regs->pc -= hsr.len ? 4 : 2;
+        break;
+
+    default:
+        break;
+    }
+
+    current->arch.hcr_el2 |= HCR_VA;
+    WRITE_SYSREG(current->arch.hcr_el2, HCR_EL2);
+}
+#endif
+
 struct reg_ctxt {
     /* Guest-side state */
     uint32_t sctlr_el1;
diff --git a/xen/include/asm-arm/processor.h b/xen/include/asm-arm/processor.h
index 4b6338b..d7b0711 100644
--- a/xen/include/asm-arm/processor.h
+++ b/xen/include/asm-arm/processor.h
@@ -252,6 +252,7 @@
 #define HSR_EC_HVC32                0x12
 #define HSR_EC_SMC32                0x13
 #ifdef CONFIG_ARM_64
+#define HSR_EC_SVC64                0x15
 #define HSR_EC_HVC64                0x16
 #define HSR_EC_SMC64                0x17
 #define HSR_EC_SYSREG               0x18
-- 
2.7.4


_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel

  parent reply	other threads:[~2017-03-31 13:07 UTC|newest]

Thread overview: 46+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-03-31 13:07 [PATCH v3 00/19] Provide a command line option to choose how to handle SErrors Wei Chen
2017-03-31 13:07 ` [PATCH v3 01/19] xen/arm: Save ESR_EL2 to avoid using mismatched value in syndrome check Wei Chen
2017-03-31 14:08   ` Julien Grall
2017-03-31 18:26   ` Stefano Stabellini
2017-03-31 13:07 ` [PATCH v3 02/19] xen/arm: Introduce a helper to get default HCR_EL2 flags Wei Chen
2017-03-31 14:10   ` Julien Grall
2017-03-31 18:29   ` Stefano Stabellini
2017-03-31 13:07 ` [PATCH v3 03/19] xen/arm: Set and restore HCR_EL2 register for each vCPU separately Wei Chen
2017-03-31 14:11   ` Julien Grall
2017-03-31 18:28   ` Stefano Stabellini
2017-03-31 13:07 ` [PATCH v3 04/19] xen/arm: Avoid setting/clearing HCR_RW at every context switch Wei Chen
2017-03-31 13:07 ` [PATCH v3 05/19] xen/arm: Save HCR_EL2 when a guest took the SError Wei Chen
2017-03-31 13:07 ` Wei Chen [this message]
2017-03-31 14:13   ` [PATCH v3 06/19] xen/arm: Introduce a virtual abort injection helper Julien Grall
2017-03-31 13:07 ` [PATCH v3 07/19] xen/arm: Introduce a command line parameter for SErrors/Aborts Wei Chen
2017-03-31 13:07 ` [PATCH v3 08/19] xen/arm: Introduce a initcall to update cpu_hwcaps by serror_op Wei Chen
2017-03-31 14:48   ` Julien Grall
2017-04-05  6:36     ` Wei Chen
2017-03-31 13:07 ` [PATCH v3 09/19] xen/arm64: Use alternative to skip the check of pending serrors Wei Chen
2017-03-31 13:07 ` [PATCH v3 10/19] xen/arm32: " Wei Chen
2017-03-31 13:07 ` [PATCH v3 11/19] xen/arm: Move macro VABORT_GEN_BY_GUEST to common header Wei Chen
2017-03-31 13:07 ` [PATCH v3 12/19] xen/arm: Introduce new helpers to handle guest/hyp SErrors Wei Chen
2017-03-31 13:07 ` [PATCH v3 13/19] xen/arm: Replace do_trap_guest_serror with new helpers Wei Chen
2017-03-31 13:07 ` [PATCH v3 14/19] xen/arm: Unmask the Abort/SError bit in the exception entries Wei Chen
2017-03-31 13:07 ` [PATCH v3 15/19] xen/arm: Introduce a helper to check local abort is enabled Wei Chen
2017-03-31 14:25   ` Julien Grall
2017-03-31 18:43   ` Stefano Stabellini
2017-03-31 13:07 ` [PATCH v3 16/19] xen/arm: Introduce a macro to synchronize SError Wei Chen
2017-03-31 14:33   ` Julien Grall
2017-04-05  7:14     ` Wei Chen
2017-04-05  7:29       ` Julien Grall
2017-04-05  7:35         ` Wei Chen
2017-04-05  8:02           ` Julien Grall
2017-04-05  8:08         ` Wei Chen
2017-04-05  8:20           ` Julien Grall
2017-04-05  8:32             ` Wei Chen
2017-03-31 18:36   ` Stefano Stabellini
2017-03-31 13:07 ` [PATCH v3 17/19] xen/arm: Isolate the SError between the context switch of 2 vCPUs Wei Chen
2017-03-31 14:38   ` Julien Grall
2017-03-31 18:37     ` Stefano Stabellini
2017-03-31 13:07 ` [PATCH v3 18/19] xen/arm: Prevent slipping hypervisor SError to guest Wei Chen
2017-03-31 14:46   ` Julien Grall
2017-03-31 18:42     ` Stefano Stabellini
2017-03-31 18:43       ` Julien Grall
2017-04-05  7:15         ` Wei Chen
2017-03-31 13:07 ` [PATCH v3 19/19] xen/arm: Handle guest external abort as guest SError Wei Chen

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=1490965679-619-7-git-send-email-Wei.Chen@arm.com \
    --to=wei.chen@arm.com \
    --cc=Kaly.Xin@arm.com \
    --cc=julien.grall@arm.com \
    --cc=nd@arm.com \
    --cc=sstabellini@kernel.org \
    --cc=steve.capper@arm.com \
    --cc=xen-devel@lists.xen.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).