[v2,1/8] ARM: implement get_tls syscall

Vincent ABRIOU vincent.abriou at st.com
Mon Aug 28 07:05:58 PDT 2017


Hi Nicolas,

I have successfully tested your set of patches on cortex-M7 STM32 MCU.


On 08/17/2017 09:23 AM, Nicolas Pitre wrote:
> When there is no dedicated register to hold the tp value and no MMU
> to provide a fixed address kuser helper entry point, all that is
> left as fallback is a syscall.
> 
> Signed-off-by: Nicolas Pitre <nico at linaro.org>
Tested-by: Vincent Abriou <vincent.abriou at st.com>

BR
Vincent

> ---
>   arch/arm/include/uapi/asm/unistd.h | 1 +
>   arch/arm/kernel/traps.c            | 3 +++
>   2 files changed, 4 insertions(+)
> 
> diff --git a/arch/arm/include/uapi/asm/unistd.h b/arch/arm/include/uapi/asm/unistd.h
> index 28bd456494..575b25fc29 100644
> --- a/arch/arm/include/uapi/asm/unistd.h
> +++ b/arch/arm/include/uapi/asm/unistd.h
> @@ -35,5 +35,6 @@
>   #define __ARM_NR_usr26			(__ARM_NR_BASE+3)
>   #define __ARM_NR_usr32			(__ARM_NR_BASE+4)
>   #define __ARM_NR_set_tls		(__ARM_NR_BASE+5)
> +#define __ARM_NR_get_tls		(__ARM_NR_BASE+6)
>   
>   #endif /* _UAPI__ASM_ARM_UNISTD_H */
> diff --git a/arch/arm/kernel/traps.c b/arch/arm/kernel/traps.c
> index 948c648fea..43c0560f7b 100644
> --- a/arch/arm/kernel/traps.c
> +++ b/arch/arm/kernel/traps.c
> @@ -647,6 +647,9 @@ asmlinkage int arm_syscall(int no, struct pt_regs *regs)
>   		set_tls(regs->ARM_r0);
>   		return 0;
>   
> +	case NR(get_tls):
> +		return current_thread_info()->tp_value[0];
> +
>   	default:
>   		/* Calls 9f00xx..9f07ff are defined to return -ENOSYS
>   		   if not implemented, rather than raising SIGILL.  This
> 


More information about the linux-arm-kernel mailing list