Skip to content

Commit

Permalink
Merge tag 'for-3.14' of git://openrisc.net/~jonas/linux
Browse files Browse the repository at this point in the history
Pull OpenRISC updates from Jonas Bonn:
 "The interesting change here is a rework of the OpenRISC signal
  handling to make it more like other architectures in the hopes that
  this makes it easier for others to comment on and understand.  This
  rework fixes some real bugs, like the fact that syscall restart did
  not work reliably"

* tag 'for-3.14' of git://openrisc.net/~jonas/linux:
  openrisc: Use get_signal() signal_setup_done()
  openrisc: Rework signal handling
  • Loading branch information
Linus Torvalds committed Jan 31, 2014
2 parents 4bcec91 + 548dafe commit 04a24ae
Show file tree
Hide file tree
Showing 2 changed files with 149 additions and 143 deletions.
59 changes: 33 additions & 26 deletions arch/openrisc/kernel/entry.S
Original file line number Diff line number Diff line change
Expand Up @@ -853,37 +853,44 @@ UNHANDLED_EXCEPTION(_vector_0x1f00,0x1f00)

/* ========================================================[ return ] === */

_resume_userspace:
DISABLE_INTERRUPTS(r3,r4)
l.lwz r4,TI_FLAGS(r10)
l.andi r13,r4,_TIF_WORK_MASK
l.sfeqi r13,0
l.bf _restore_all
l.nop

_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.sfnei r3,0
l.bnf _work_notifysig
l.lwz r5,PT_ORIG_GPR11(r1)
l.sfltsi r5,0
l.bnf 1f
l.nop
l.jal schedule
l.andi r5,r5,0
1:
l.jal do_work_pending
l.ori r3,r1,0 /* pt_regs */

l.sfeqi r11,0
l.bf _restore_all
l.nop
l.j _resume_userspace
l.sfltsi r11,0
l.bnf 1f
l.nop

/* Handle pending signals and notify-resume requests.
* do_notify_resume must be passed the latest pushed pt_regs, not
* necessarily the "userspace" ones. Also, pt_regs->syscallno
* must be set so that the syscall restart functionality works.
*/
_work_notifysig:
l.jal do_notify_resume
l.ori r3,r1,0 /* pt_regs */

_resume_userspace:
DISABLE_INTERRUPTS(r3,r4)
l.lwz r3,TI_FLAGS(r10)
l.andi r3,r3,_TIF_WORK_MASK
l.sfnei r3,0
l.bf _work_pending
l.and r11,r11,r0
l.ori r11,r11,__NR_restart_syscall
l.j _syscall_check_trace_enter
l.nop
1:
l.lwz r11,PT_ORIG_GPR11(r1)
/* Restore arg registers */
l.lwz r3,PT_GPR3(r1)
l.lwz r4,PT_GPR4(r1)
l.lwz r5,PT_GPR5(r1)
l.lwz r6,PT_GPR6(r1)
l.lwz r7,PT_GPR7(r1)
l.j _syscall_check_trace_enter
l.lwz r8,PT_GPR8(r1)

_restore_all:
RESTORE_ALL
Expand Down
Loading

0 comments on commit 04a24ae

Please sign in to comment.