() function is executed after processing a trap (e.g., a system call or interrupt) before returning to user-mode execution. The implementation is machine dependent and is never invoked from machine-independent code. The function prototype for each architecture may be different to the prototype above, however the functionally provided by the userret
() function on each architecture is essentially the same.
Specifically, the userret() function performs the following procedure:
Detect a change in the signal disposition of the current process and invoke postsig(9) to post the signal to the process. This may occur when the outcome of the trap or syscall posted a signal to the process (e.g., invalid instruction trap).
Check the want_resched flag to see if the scheduler requires the current process to be preempted by invoking preempt(9) (see cpu_need_resched(9)). This may occur if the clock interrupt causes the scheduler to determine that the current process has completed its time slice.
Update the scheduler state.