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