public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] openrisc: call do_notify_resume() with interrupts enabled
@ 2013-04-29  7:12 Stefan Kristiansson
  2013-04-29  9:50 ` Stefan Kristiansson
  2013-06-26  8:35 ` Henrik Nordström
  0 siblings, 2 replies; 4+ messages in thread
From: Stefan Kristiansson @ 2013-04-29  7:12 UTC (permalink / raw)
  To: linux-kernel, linux; +Cc: Stefan Kristiansson

A signal delivered through do_notify_resume() would cause the
irqs_disabled() check in _local_bh_enable_ip() to be triggered.

Enable interrupts before calling do_notify_resume().

Signed-off-by: Stefan Kristiansson <stefan.kristiansson@saunalahti.fi>
---
 arch/openrisc/kernel/entry.S | 1 +
 1 file changed, 1 insertion(+)

diff --git a/arch/openrisc/kernel/entry.S b/arch/openrisc/kernel/entry.S
index d8a455e..55ffc97 100644
--- a/arch/openrisc/kernel/entry.S
+++ b/arch/openrisc/kernel/entry.S
@@ -874,6 +874,7 @@ _work_pending:
  * must be set so that the syscall restart functionality works.
  */
 _work_notifysig:
+	ENABLE_INTERRUPTS(r29)
 	l.jal	do_notify_resume
 	 l.ori	r3,r1,0		  /* pt_regs */
 
-- 
1.8.1.2


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

* Re: [PATCH] openrisc: call do_notify_resume() with interrupts enabled
  2013-04-29  7:12 [PATCH] openrisc: call do_notify_resume() with interrupts enabled Stefan Kristiansson
@ 2013-04-29  9:50 ` Stefan Kristiansson
  2013-04-29 10:40   ` [PATCH v2] " Stefan Kristiansson
  2013-06-26  8:35 ` Henrik Nordström
  1 sibling, 1 reply; 4+ messages in thread
From: Stefan Kristiansson @ 2013-04-29  9:50 UTC (permalink / raw)
  To: linux-kernel, linux

On Mon, Apr 29, 2013 at 10:12:37AM +0300, Stefan Kristiansson wrote:
> A signal delivered through do_notify_resume() would cause the
> irqs_disabled() check in _local_bh_enable_ip() to be triggered.
> 
> Enable interrupts before calling do_notify_resume().
> 
> Signed-off-by: Stefan Kristiansson <stefan.kristiansson@saunalahti.fi>
> ---
>  arch/openrisc/kernel/entry.S | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/arch/openrisc/kernel/entry.S b/arch/openrisc/kernel/entry.S
> index d8a455e..55ffc97 100644
> --- a/arch/openrisc/kernel/entry.S
> +++ b/arch/openrisc/kernel/entry.S
> @@ -874,6 +874,7 @@ _work_pending:
>   * must be set so that the syscall restart functionality works.
>   */
>  _work_notifysig:
> +	ENABLE_INTERRUPTS(r29)
>  	l.jal	do_notify_resume
>  	 l.ori	r3,r1,0		  /* pt_regs */
>  

I just realised that this one-liner isn't quite enough,
the flags that are used in do_notify_resume() has to be read with
interrupts off.
Revised patch coming up.

Stefan

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

* [PATCH v2] openrisc: call do_notify_resume() with interrupts enabled
  2013-04-29  9:50 ` Stefan Kristiansson
@ 2013-04-29 10:40   ` Stefan Kristiansson
  0 siblings, 0 replies; 4+ messages in thread
From: Stefan Kristiansson @ 2013-04-29 10:40 UTC (permalink / raw)
  To: linux-kernel, linux; +Cc: Stefan Kristiansson

A signal delivered through do_notify_resume() would cause the
irqs_disabled() check in _local_bh_enable_ip() to be triggered.

Enable interrupts before calling do_notify_resume(), but read
the current_thread_info->flags before doing so.

Signed-off-by: Stefan Kristiansson <stefan.kristiansson@saunalahti.fi>
---
 arch/openrisc/kernel/entry.S  | 5 +++--
 arch/openrisc/kernel/signal.c | 7 ++++---
 2 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/arch/openrisc/kernel/entry.S b/arch/openrisc/kernel/entry.S
index d8a455e..7564784 100644
--- a/arch/openrisc/kernel/entry.S
+++ b/arch/openrisc/kernel/entry.S
@@ -858,8 +858,8 @@ _work_pending:
 	 * if (current_thread_info->flags & _TIF_NEED_RESCHED)
 	 *     schedule();
 	 */
-	l.lwz   r5,TI_FLAGS(r10)
-	l.andi	r3,r5,_TIF_NEED_RESCHED
+	l.lwz   r4,TI_FLAGS(r10)
+	l.andi	r3,r4,_TIF_NEED_RESCHED
 	l.sfnei r3,0
 	l.bnf   _work_notifysig
 	 l.nop
@@ -874,6 +874,7 @@ _work_pending:
  * must be set so that the syscall restart functionality works.
  */
 _work_notifysig:
+	ENABLE_INTERRUPTS(r29)
 	l.jal	do_notify_resume
 	 l.ori	r3,r1,0		  /* pt_regs */
 
diff --git a/arch/openrisc/kernel/signal.c b/arch/openrisc/kernel/signal.c
index ae167f7..032bed1 100644
--- a/arch/openrisc/kernel/signal.c
+++ b/arch/openrisc/kernel/signal.c
@@ -331,12 +331,13 @@ void do_signal(struct pt_regs *regs)
 	return;
 }
 
-asmlinkage void do_notify_resume(struct pt_regs *regs)
+asmlinkage void do_notify_resume(struct pt_regs *regs,
+				 unsigned long thread_flags)
 {
-	if (current_thread_info()->flags & _TIF_SIGPENDING)
+	if (thread_flags & _TIF_SIGPENDING)
 		do_signal(regs);
 
-	if (current_thread_info()->flags & _TIF_NOTIFY_RESUME) {
+	if (thread_flags & _TIF_NOTIFY_RESUME) {
 		clear_thread_flag(TIF_NOTIFY_RESUME);
 		tracehook_notify_resume(regs);
 	}
-- 
1.8.1.2


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

* Re: openrisc: call do_notify_resume() with interrupts enabled
  2013-04-29  7:12 [PATCH] openrisc: call do_notify_resume() with interrupts enabled Stefan Kristiansson
  2013-04-29  9:50 ` Stefan Kristiansson
@ 2013-06-26  8:35 ` Henrik Nordström
  1 sibling, 0 replies; 4+ messages in thread
From: Henrik Nordström @ 2013-06-26  8:35 UTC (permalink / raw)
  To: linux-kernel, linux; +Cc: Stefan Kristiansson

mån 2013-04-29 klockan 10:12 +0300 skrev Stefan Kristiansson:
> A signal delivered through do_notify_resume() would cause the
> irqs_disabled() check in _local_bh_enable_ip() to be triggered.
> 
> Enable interrupts before calling do_notify_resume().
> 
> Signed-off-by: Stefan Kristiansson <stefan.kristiansson@saunalahti.fi>

Tested-by: Henrik Nordstrom <henrik@henriknordstrom.net>

Regards
Henrik


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

end of thread, other threads:[~2013-06-26  8:35 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-04-29  7:12 [PATCH] openrisc: call do_notify_resume() with interrupts enabled Stefan Kristiansson
2013-04-29  9:50 ` Stefan Kristiansson
2013-04-29 10:40   ` [PATCH v2] " Stefan Kristiansson
2013-06-26  8:35 ` Henrik Nordström

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox