aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorEric W. Biederman <ebiederm@xmission.com>2009-05-13 16:55:10 +0000
committerDavid S. Miller <davem@davemloft.net>2009-05-18 22:15:56 -0700
commit690cc3ffe33ac4a2857583c22d4c6244ae11684d (patch)
tree47da7801ef7539260a1a64b41f43ab8131e4f551 /include
parent69e3c75f4d541a6eb151b3ef91f34033cb3ad6e1 (diff)
downloadmrst-s0i3-test-690cc3ffe33ac4a2857583c22d4c6244ae11684d.tar.gz
mrst-s0i3-test-690cc3ffe33ac4a2857583c22d4c6244ae11684d.tar.xz
mrst-s0i3-test-690cc3ffe33ac4a2857583c22d4c6244ae11684d.zip
syscall: Implement a convinience function restart_syscall
Currently when we have a signal pending we have the functionality to restart that the current system call. There are other cases such as nasty lock ordering issues where it makes sense to have a simple fix that uses try lock and restarts the system call. Buying time to figure out how to rework the locking strategy. Signed-off-by: Eric W. Biederman <ebiederm@aristanetworks.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include')
-rw-r--r--include/linux/sched.h6
1 files changed, 6 insertions, 0 deletions
diff --git a/include/linux/sched.h b/include/linux/sched.h
index b4c38bc8049..d853f6bb0ba 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -2178,6 +2178,12 @@ static inline int test_tsk_need_resched(struct task_struct *tsk)
return unlikely(test_tsk_thread_flag(tsk,TIF_NEED_RESCHED));
}
+static inline int restart_syscall(void)
+{
+ set_tsk_thread_flag(current, TIF_SIGPENDING);
+ return -ERESTARTNOINTR;
+}
+
static inline int signal_pending(struct task_struct *p)
{
return unlikely(test_tsk_thread_flag(p,TIF_SIGPENDING));