|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 09/18] xen/arm64: Use alternative to skip the check of pending serrors
On Mon, 13 Mar 2017, Wei Chen wrote:
> We have provided an option to administrator to determine how to
> handle the SErrors. In order to skip the check of pending SError,
> in conventional way, we have to read the option every time before
> we try to check the pending SError. This will add overhead to check
> the option at every trap.
>
> The ARM64 supports the alternative patching feature. We can use an
> ALTERNATIVE to avoid checking option at every trap. We added a new
> cpufeature named "SKIP_CHECK_PENDING_VSERROR". This feature will be
> enabled when the option is not diverse.
>
> Signed-off-by: Wei Chen <Wei.Chen@xxxxxxx>
Reviewed-by: Stefano Stabellini <sstabellini@xxxxxxxxxx>
> ---
> xen/arch/arm/arm64/entry.S | 41 +++++++++++++++++++++++++----------------
> 1 file changed, 25 insertions(+), 16 deletions(-)
>
> diff --git a/xen/arch/arm/arm64/entry.S b/xen/arch/arm/arm64/entry.S
> index 02802c0..4baa3cb 100644
> --- a/xen/arch/arm/arm64/entry.S
> +++ b/xen/arch/arm/arm64/entry.S
> @@ -1,5 +1,6 @@
> #include <asm/asm_defns.h>
> #include <asm/regs.h>
> +#include <asm/alternative.h>
> #include <public/xen.h>
>
> /*
> @@ -229,12 +230,14 @@ hyp_irq:
>
> guest_sync:
> entry hyp=0, compat=0
> - bl check_pending_vserror
> /*
> - * If x0 is Non-zero, a vSError took place, the initial exception
> - * doesn't have any significance to be handled. Exit ASAP
> + * The vSError will be checked while SKIP_CHECK_PENDING_VSERROR is
> + * not set. If a vSError took place, the initial exception will be
> + * skipped. Exit ASAP
> */
> - cbnz x0, 1f
> + ALTERNATIVE("bl check_pending_vserror; cbnz x0, 1f",
> + "nop; nop",
> + SKIP_CHECK_PENDING_VSERROR)
> msr daifclr, #2
> mov x0, sp
> bl do_trap_hypervisor
> @@ -243,12 +246,14 @@ guest_sync:
>
> guest_irq:
> entry hyp=0, compat=0
> - bl check_pending_vserror
> /*
> - * If x0 is Non-zero, a vSError took place, the initial exception
> - * doesn't have any significance to be handled. Exit ASAP
> + * The vSError will be checked while SKIP_CHECK_PENDING_VSERROR is
> + * not set. If a vSError took place, the initial exception will be
> + * skipped. Exit ASAP
> */
> - cbnz x0, 1f
> + ALTERNATIVE("bl check_pending_vserror; cbnz x0, 1f",
> + "nop; nop",
> + SKIP_CHECK_PENDING_VSERROR)
> mov x0, sp
> bl do_trap_irq
> 1:
> @@ -267,12 +272,14 @@ guest_error:
>
> guest_sync_compat:
> entry hyp=0, compat=1
> - bl check_pending_vserror
> /*
> - * If x0 is Non-zero, a vSError took place, the initial exception
> - * doesn't have any significance to be handled. Exit ASAP
> + * The vSError will be checked while SKIP_CHECK_PENDING_VSERROR is
> + * not set. If a vSError took place, the initial exception will be
> + * skipped. Exit ASAP
> */
> - cbnz x0, 1f
> + ALTERNATIVE("bl check_pending_vserror; cbnz x0, 1f",
> + "nop; nop",
> + SKIP_CHECK_PENDING_VSERROR)
> msr daifclr, #2
> mov x0, sp
> bl do_trap_hypervisor
> @@ -281,12 +288,14 @@ guest_sync_compat:
>
> guest_irq_compat:
> entry hyp=0, compat=1
> - bl check_pending_vserror
> /*
> - * If x0 is Non-zero, a vSError took place, the initial exception
> - * doesn't have any significance to be handled. Exit ASAP
> + * The vSError will be checked while SKIP_CHECK_PENDING_VSERROR is
> + * not set. If a vSError took place, the initial exception will be
> + * skipped. Exit ASAP
> */
> - cbnz x0, 1f
> + ALTERNATIVE("bl check_pending_vserror; cbnz x0, 1f",
> + "nop; nop",
> + SKIP_CHECK_PENDING_VSERROR)
> mov x0, sp
> bl do_trap_irq
> 1:
> --
> 2.7.4
>
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxx
> https://lists.xen.org/xen-devel
>
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |