|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v3 1/5] xen/arm: traps: Export a bunch of helpers to handle emulation
On Thu, 14 Sep 2017, Julien Grall wrote:
> A follow-up patch will move some parts of traps.c in separate files.
> The will require to use helpers that are currently statically defined.
> Export the following helpers:
> - inject_undef64_exception
> - inject_undef_exception
> - check_conditional_instr
> - advance_pc
> - handle_raz_wi
> - handle_wo_wi
> - handle_ro_raz
>
> Note that asm-arm/arm32/traps.h is empty but it is to keep parity with
> the arm64 counterpart.
>
> Signed-off-by: Julien Grall <julien.grall@xxxxxxx>
Reviewed-by: Stefano Stabellini <sstabellini@xxxxxxxxxx>
> ---
>
> Cc: volodymyr_babchuk@xxxxxxxx
>
> Changes in v3:
> - Replicate comment on top of each prototypes when useful
>
> Changes in v2:
> - Fixup guards
> - Add newline for clarity
> ---
> xen/arch/arm/traps.c | 43
> +++++++++++++++++++--------------------
> xen/include/asm-arm/arm32/traps.h | 13 ++++++++++++
> xen/include/asm-arm/arm64/traps.h | 15 ++++++++++++++
> xen/include/asm-arm/traps.h | 39 +++++++++++++++++++++++++++++++++++
> 4 files changed, 88 insertions(+), 22 deletions(-)
> create mode 100644 xen/include/asm-arm/arm32/traps.h
> create mode 100644 xen/include/asm-arm/arm64/traps.h
> create mode 100644 xen/include/asm-arm/traps.h
>
> diff --git a/xen/arch/arm/traps.c b/xen/arch/arm/traps.c
> index 6f32f700e5..1c334a7b99 100644
> --- a/xen/arch/arm/traps.c
> +++ b/xen/arch/arm/traps.c
> @@ -49,6 +49,7 @@
> #include <asm/monitor.h>
> #include <asm/psci.h>
> #include <asm/regs.h>
> +#include <asm/traps.h>
> #include <asm/vgic.h>
> #include <asm/vtimer.h>
>
> @@ -547,7 +548,7 @@ static vaddr_t exception_handler64(struct cpu_user_regs
> *regs, vaddr_t offset)
> }
>
> /* Inject an undefined exception into a 64 bit guest */
> -static void inject_undef64_exception(struct cpu_user_regs *regs, int
> instr_len)
> +void inject_undef64_exception(struct cpu_user_regs *regs, int instr_len)
> {
> vaddr_t handler;
> const union hsr esr = {
> @@ -620,8 +621,7 @@ static void inject_iabt64_exception(struct cpu_user_regs
> *regs,
>
> #endif
>
> -static void inject_undef_exception(struct cpu_user_regs *regs,
> - const union hsr hsr)
> +void inject_undef_exception(struct cpu_user_regs *regs, const union hsr hsr)
> {
> if ( is_32bit_domain(current->domain) )
> inject_undef32_exception(regs);
> @@ -1714,8 +1714,7 @@ static const unsigned short cc_map[16] = {
> 0 /* NV */
> };
>
> -static int check_conditional_instr(struct cpu_user_regs *regs,
> - const union hsr hsr)
> +int check_conditional_instr(struct cpu_user_regs *regs, const union hsr hsr)
> {
> unsigned long cpsr, cpsr_cond;
> int cond;
> @@ -1777,7 +1776,7 @@ static int check_conditional_instr(struct cpu_user_regs
> *regs,
> return 1;
> }
>
> -static void advance_pc(struct cpu_user_regs *regs, const union hsr hsr)
> +void advance_pc(struct cpu_user_regs *regs, const union hsr hsr)
> {
> unsigned long itbits, cond, cpsr = regs->cpsr;
>
> @@ -1818,11 +1817,11 @@ static void advance_pc(struct cpu_user_regs *regs,
> const union hsr hsr)
> }
>
> /* Read as zero and write ignore */
> -static void handle_raz_wi(struct cpu_user_regs *regs,
> - int regidx,
> - bool read,
> - const union hsr hsr,
> - int min_el)
> +void handle_raz_wi(struct cpu_user_regs *regs,
> + int regidx,
> + bool read,
> + const union hsr hsr,
> + int min_el)
> {
> ASSERT((min_el == 0) || (min_el == 1));
>
> @@ -1836,12 +1835,12 @@ static void handle_raz_wi(struct cpu_user_regs *regs,
> advance_pc(regs, hsr);
> }
>
> -/* Write only as write ignore */
> -static void handle_wo_wi(struct cpu_user_regs *regs,
> - int regidx,
> - bool read,
> - const union hsr hsr,
> - int min_el)
> +/* write only as write ignore */
> +void handle_wo_wi(struct cpu_user_regs *regs,
> + int regidx,
> + bool read,
> + const union hsr hsr,
> + int min_el)
> {
> ASSERT((min_el == 0) || (min_el == 1));
>
> @@ -1856,11 +1855,11 @@ static void handle_wo_wi(struct cpu_user_regs *regs,
> }
>
> /* Read only as read as zero */
> -static void handle_ro_raz(struct cpu_user_regs *regs,
> - int regidx,
> - bool read,
> - const union hsr hsr,
> - int min_el)
> +void handle_ro_raz(struct cpu_user_regs *regs,
> + int regidx,
> + bool read,
> + const union hsr hsr,
> + int min_el)
> {
> ASSERT((min_el == 0) || (min_el == 1));
>
> diff --git a/xen/include/asm-arm/arm32/traps.h
> b/xen/include/asm-arm/arm32/traps.h
> new file mode 100644
> index 0000000000..e3c4a8b473
> --- /dev/null
> +++ b/xen/include/asm-arm/arm32/traps.h
> @@ -0,0 +1,13 @@
> +#ifndef __ASM_ARM32_TRAPS__
> +#define __ASM_ARM32_TRAPS__
> +
> +#endif /* __ASM_ARM32_TRAPS__ */
> +/*
> + * Local variables:
> + * mode: C
> + * c-file-style: "BSD"
> + * c-basic-offset: 4
> + * indent-tabs-mode: nil
> + * End:
> + */
> +
> diff --git a/xen/include/asm-arm/arm64/traps.h
> b/xen/include/asm-arm/arm64/traps.h
> new file mode 100644
> index 0000000000..e5e5a4a036
> --- /dev/null
> +++ b/xen/include/asm-arm/arm64/traps.h
> @@ -0,0 +1,15 @@
> +#ifndef __ASM_ARM64_TRAPS__
> +#define __ASM_ARM64_TRAPS__
> +
> +void inject_undef64_exception(struct cpu_user_regs *regs, int instr_len);
> +
> +#endif /* __ASM_ARM64_TRAPS__ */
> +/*
> + * Local variables:
> + * mode: C
> + * c-file-style: "BSD"
> + * c-basic-offset: 4
> + * indent-tabs-mode: nil
> + * End:
> + */
> +
> diff --git a/xen/include/asm-arm/traps.h b/xen/include/asm-arm/traps.h
> new file mode 100644
> index 0000000000..22ad070679
> --- /dev/null
> +++ b/xen/include/asm-arm/traps.h
> @@ -0,0 +1,39 @@
> +#ifndef __ASM_ARM_TRAPS__
> +#define __ASM_ARM_TRAPS__
> +
> +#include <asm/processor.h>
> +
> +#if defined(CONFIG_ARM_32)
> +# include <asm/arm32/traps.h>
> +#elif defined(CONFIG_ARM_64)
> +# include <asm/arm64/traps.h>
> +#endif
> +
> +int check_conditional_instr(struct cpu_user_regs *regs, const union hsr hsr);
> +
> +void advance_pc(struct cpu_user_regs *regs, const union hsr hsr);
> +
> +void inject_undef_exception(struct cpu_user_regs *regs, const union hsr hsr);
> +
> +/* read as zero and write ignore */
> +void handle_raz_wi(struct cpu_user_regs *regs, int regidx, bool read,
> + const union hsr hsr, int min_el);
> +
> +/* write only as write ignore */
> +void handle_wo_wi(struct cpu_user_regs *regs, int regidx, bool read,
> + const union hsr hsr, int min_el);
> +
> +/* read only as read as zero */
> +void handle_ro_raz(struct cpu_user_regs *regs, int regidx, bool read,
> + const union hsr hsr, int min_el);
> +
> +#endif /* __ASM_ARM_TRAPS__ */
> +/*
> + * Local variables:
> + * mode: C
> + * c-file-style: "BSD"
> + * c-basic-offset: 4
> + * indent-tabs-mode: nil
> + * End:
> + */
> +
> --
> 2.11.0
>
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |