[PATCH] ARM: Stop irqsoff tracing if return to user with interrupts enabled

Russell King - ARM Linux linux at arm.linux.org.uk
Sat Nov 13 03:48:02 EST 2010


On Fri, Nov 12, 2010 at 07:40:48PM -0800, Todd Poynor wrote:
> Signed-off-by: Todd Poynor <toddpoynor at google.com>

NAK.  Firstly, you're not explaining why.  Secondly, we purposely leave
IRQs off when returning to userspace to avoid race conditions.  Thirdly,
we purposely leave lockdep believing that IRQs are off while userspace
is running, even though IRQs are not.

I've explained why this is in the past - please search the mailing list.

> ---
>  arch/arm/kernel/entry-common.S |   14 ++++++++++++++
>  1 files changed, 14 insertions(+), 0 deletions(-)
> 
> diff --git a/arch/arm/kernel/entry-common.S b/arch/arm/kernel/entry-common.S
> index 8bfa987..b81d270 100644
> --- a/arch/arm/kernel/entry-common.S
> +++ b/arch/arm/kernel/entry-common.S
> @@ -29,6 +29,13 @@ ret_fast_syscall:
>  	ldr	r1, [tsk, #TI_FLAGS]
>  	tst	r1, #_TIF_WORK_MASK
>  	bne	fast_work_pending
> +#if defined(CONFIG_TRACE_IRQFLAGS)
> +	ldr     r1, [sp, #S_OFF + S_PSR]	@ get calling cpsr
> +	tst	r1, #PSR_I_BIT
> +	bne	1f
> +	asm_trace_hardirqs_on
> +1:
> +#endif
>  
>  	/* perform architecture specific actions before user return */
>  	arch_ret_to_user r1, lr
> @@ -65,6 +72,13 @@ ret_slow_syscall:
>  	tst	r1, #_TIF_WORK_MASK
>  	bne	work_pending
>  no_work_pending:
> +#if defined(CONFIG_TRACE_IRQFLAGS)
> +	ldr     r1, [sp, #S_PSR]		@ get calling cpsr
> +	tst	r1, #PSR_I_BIT
> +	bne	2f
> +	asm_trace_hardirqs_on
> +2:
> +#endif
>  	/* perform architecture specific actions before user return */
>  	arch_ret_to_user r1, lr
>  
> -- 
> 1.7.3.1
> 
> 
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel



More information about the linux-arm-kernel mailing list