|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 28/45] xen: arm: arm64 trap handling.
At 15:56 +0000 on 23 Jan (1358956594), Ian Campbell wrote:
> Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
> diff --git a/xen/arch/arm/arm64/Makefile b/xen/arch/arm/arm64/Makefile
> index 815f305..be41f43 100644
> --- a/xen/arch/arm/arm64/Makefile
> +++ b/xen/arch/arm/arm64/Makefile
> @@ -1,5 +1,7 @@
> subdir-y += lib
>
> +obj-y += entry.o
> obj-y += mode_switch.o
>
> +obj-y += traps.o
> obj-y += domain.o
Maybe in alphabetical order?
> +/* base-2 logarithm */
> +#define __L2(_x) (((_x) & 0x00000002) ? 1 : 0)
> +#define __L4(_x) (((_x) & 0x0000000c) ? ( 2 + __L2( (_x)>> 2)) : __L2( _x))
> +#define __L8(_x) (((_x) & 0x000000f0) ? ( 4 + __L4( (_x)>> 4)) : __L4( _x))
> +#define __L16(_x) (((_x) & 0x0000ff00) ? ( 8 + __L8( (_x)>> 8)) : __L8( _x))
> +#define LOG_2(_x) (((_x) & 0xffff0000) ? (16 + __L16((_x)>>16)) : __L16(_x))
This is now replicated in three places. Maybe it should live in, say,
xen/bitops.h?
> +hyp_sync:
> + entry hyp=1
> + msr daifclr, #2
> + adr lr, return_to_hypervisor
> + mov x0, sp
> + b do_trap_hypervisor
This pattern (call fnX with arg0 == sp and lr == fnY) is repeated
quite a few times. Could we have another tidying macro for it?
> +ENTRY(return_to_new_vcpu)
> +ENTRY(return_to_guest)
> +ENTRY(return_to_hypervisor)
> + ldp x21, x22, [sp, #UREGS_PC] // load ELR, SPSR
> +
> + pop x0, x1
> + pop x2, x3
> + pop x4, x5
> + pop x6, x7
> + pop x8, x9
> +
> + /* XXX handle return to guest tasks, soft irqs etc */
> +
> + msr elr_el2, x21 // set up the return data
> + msr spsr_el2, x22
Done here becasue it's roughly half-way between the load and the
overwrite below? Should we be using x28/x29 for this to give ourselves
even more pipeline space?
> + pop x10, x11
> + pop x12, x13
> + pop x14, x15
> + pop x16, x17
> + pop x18, x19
> + pop x20, x21
> + pop x22, x23
> + pop x24, x25
> + pop x26, x27
> + pop x28, x29
> +
> + ldr lr, [sp], #(UREGS_SPSR_el1 - UREGS_SP)
> + eret
> +
> --- a/xen/arch/arm/io.h
> +++ b/xen/arch/arm/io.h
> @@ -26,7 +26,7 @@
> typedef struct
> {
> struct hsr_dabt dabt;
> - uint32_t gva;
> + vaddr_t gva;
> paddr_t gpa;
> } mmio_info_t;
>
This seems like it belongs in the earlier vaddr patch.
> --- a/xen/include/asm-arm/processor.h
> +++ b/xen/include/asm-arm/processor.h
> @@ -238,7 +238,7 @@ union hsr {
> #endif
>
> #ifndef __ASSEMBLY__
> -extern uint32_t hyp_traps_vector[8];
> +extern uint32_t hyp_traps_vector;
hyp_traps_vector[], and avoid adding '&' to the users?
Tim.
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |