linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] ARM: Stop irqsoff tracing if return to user with interrupts enabled
@ 2010-11-13  3:40 Todd Poynor
  2010-11-13  8:48 ` Russell King - ARM Linux
  0 siblings, 1 reply; 4+ messages in thread
From: Todd Poynor @ 2010-11-13  3:40 UTC (permalink / raw)
  To: linux-arm-kernel

Signed-off-by: Todd Poynor <toddpoynor@google.com>
---
 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

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH] ARM: Stop irqsoff tracing if return to user with interrupts enabled
  2010-11-13  3:40 [PATCH] ARM: Stop irqsoff tracing if return to user with interrupts enabled Todd Poynor
@ 2010-11-13  8:48 ` Russell King - ARM Linux
  2010-11-13  9:35   ` Todd Poynor
  2010-11-13  9:38   ` Russell King - ARM Linux
  0 siblings, 2 replies; 4+ messages in thread
From: Russell King - ARM Linux @ 2010-11-13  8:48 UTC (permalink / raw)
  To: linux-arm-kernel

On Fri, Nov 12, 2010 at 07:40:48PM -0800, Todd Poynor wrote:
> Signed-off-by: Todd Poynor <toddpoynor@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

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH] ARM: Stop irqsoff tracing if return to user with interrupts enabled
  2010-11-13  8:48 ` Russell King - ARM Linux
@ 2010-11-13  9:35   ` Todd Poynor
  2010-11-13  9:38   ` Russell King - ARM Linux
  1 sibling, 0 replies; 4+ messages in thread
From: Todd Poynor @ 2010-11-13  9:35 UTC (permalink / raw)
  To: linux-arm-kernel

On Sat, Nov 13, 2010 at 12:48 AM, Russell King - ARM Linux
<linux@arm.linux.org.uk> wrote:
> On Fri, Nov 12, 2010 at 07:40:48PM -0800, Todd Poynor wrote:
>> Signed-off-by: Todd Poynor <toddpoynor@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.

Apologies for the lack of explanation.  The change makes the irqsoff
tracer account for whether the return to userspace will or will not
enable interrupts; it will not override the kernel's decision on
interrupts being enabled or not, and I don't believe it will affect
lockdep's beliefs.

The reason why is to properly terminate an IRQs-disabled interval if
IRQs will in fact be enabled on return, so that the tracer does not
continue to measure the time spent in userspace as a continuation of
the IRQs-off sequence started by the call to disable_irq at
ret_slow_syscall or ret_fast_syscall.  The x86 architecture implements
macro TRACE_IRQS_IRET for the same purpose.

I'll continue to search the lists in case there's anything I've missed.

>
> 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
>

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH] ARM: Stop irqsoff tracing if return to user with interrupts enabled
  2010-11-13  8:48 ` Russell King - ARM Linux
  2010-11-13  9:35   ` Todd Poynor
@ 2010-11-13  9:38   ` Russell King - ARM Linux
  1 sibling, 0 replies; 4+ messages in thread
From: Russell King - ARM Linux @ 2010-11-13  9:38 UTC (permalink / raw)
  To: linux-arm-kernel

On Sat, Nov 13, 2010 at 08:48:02AM +0000, Russell King - ARM Linux wrote:
> On Fri, Nov 12, 2010 at 07:40:48PM -0800, Todd Poynor wrote:
> > Signed-off-by: Todd Poynor <toddpoynor@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.

Forthly, we never run userspace with IRQs disabled - that would be a
security hole.

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

See

http://lists.arm.linux.org.uk/lurker/message/20100523.141301.a94bee0c.en.html
http://lists.arm.linux.org.uk/lurker/message/20100523.194746.203225eb.en.html

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2010-11-13  9:38 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-11-13  3:40 [PATCH] ARM: Stop irqsoff tracing if return to user with interrupts enabled Todd Poynor
2010-11-13  8:48 ` Russell King - ARM Linux
2010-11-13  9:35   ` Todd Poynor
2010-11-13  9:38   ` Russell King - ARM Linux

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).