[PATCH v3 2/3] Add ARM Paravirtualization support

Sebastian Huber sebastian.huber at embedded-brains.de
Thu Feb 22 02:49:28 UTC 2018


----- Am 21. Feb 2018 um 21:07 schrieb joel joel at rtems.org:

> Closes #3305.
> ---
> cpukit/score/cpu/arm/cpu_asm.S                     |  5 +-
> cpukit/score/cpu/arm/include/rtems/score/cpu.h     |  6 ++
> .../score/cpu/arm/include/rtems/score/paravirt.h   | 75 ++++++++++++++++++++++
> cpukit/score/cpu/arm/include/rtems/score/types.h   |  3 +
> 4 files changed, 88 insertions(+), 1 deletion(-)
> create mode 100644 cpukit/score/cpu/arm/include/rtems/score/paravirt.h
> 
> diff --git a/cpukit/score/cpu/arm/cpu_asm.S b/cpukit/score/cpu/arm/cpu_asm.S
> index f58b99d..214e67d 100644
> --- a/cpukit/score/cpu/arm/cpu_asm.S
> +++ b/cpukit/score/cpu/arm/cpu_asm.S
> @@ -111,9 +111,12 @@ DEFINE_FUNCTION_ARM(_CPU_Context_switch)
> #endif
> 
> #ifdef ARM_MULTILIB_HAS_THREAD_ID_REGISTER
> +  #if defined(CPU_ARM_USE_USER_ACCESSIBLE_THREAD_ID_REGISTER)
> +	mcr	p15, 0, r3, c13, c0, 2
> +  #else
> 	mcr	p15, 0, r3, c13, c0, 3
> +  #endif
> #endif
> -

Why remove this line?

> 	str	r4, [r2, #PER_CPU_ISR_DISPATCH_DISABLE]
> 
> 	/* In ARMv5T and above the load of PC is an interworking branch */
[...]
> +/**
> + * In a paravirtualized environment, RTEMS executes in user space
> + * and cannot write to the the Thread ID register which is normally
> + * used. CP15 C13 has three variants of a Thread ID register.
> + *
> + * - Opcode_2 = 2: This register is both user and privileged R/W accessible.
> + * - Opcode_2 = 3: This register is user read-only and privileged
> + *   R/W accessible.
> + * - Opcode_2 = 4: This register is privileged R/W accessible only.
> + */
> +#define CPU_ARM_USE_USER_ACCESSIBLE_THREAD_ID_REGISTER

How did you convince GCC that it should use the TPIDRURW?


More information about the devel mailing list