um: add TIF_NOTIFY_RESUME
authorAl Viro <viro@zeniv.linux.org.uk>
Tue, 24 Apr 2012 06:37:07 +0000 (02:37 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Mon, 21 May 2012 18:19:53 +0000 (14:19 -0400)
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
arch/um/include/asm/thread_info.h
arch/um/kernel/process.c

index 200c4ab1240c3deeaad3eb98d8ef1a46ef3c64e6..6d85ebb860fdd8c0cbd6f27b937b786882f417a6 100644 (file)
@@ -71,6 +71,7 @@ static inline struct thread_info *current_thread_info(void)
 #define TIF_MEMDIE             5       /* is terminating due to OOM killer */
 #define TIF_SYSCALL_AUDIT      6
 #define TIF_RESTORE_SIGMASK    7
+#define TIF_NOTIFY_RESUME      8
 
 #define _TIF_SYSCALL_TRACE     (1 << TIF_SYSCALL_TRACE)
 #define _TIF_SIGPENDING                (1 << TIF_SIGPENDING)
index 2b73dedb44cacdda741b3e5774346c93b37b1b22..4d9af3172d9ff6594e90510ba3c46e522c54e767 100644 (file)
@@ -18,6 +18,7 @@
 #include <linux/seq_file.h>
 #include <linux/tick.h>
 #include <linux/threads.h>
+#include <linux/tracehook.h>
 #include <asm/current.h>
 #include <asm/pgtable.h>
 #include <asm/mmu_context.h>
@@ -114,8 +115,13 @@ void interrupt_end(void)
 {
        if (need_resched())
                schedule();
-       if (test_tsk_thread_flag(current, TIF_SIGPENDING))
+       if (test_thread_flag(TIF_SIGPENDING))
                do_signal();
+       if (test_and_clear_thread_flag(TIF_NOTIFY_RESUME)) {
+               tracehook_notify_resume(&current->thread.regs);
+               if (current->replacement_session_keyring)
+                       key_replace_session_keyring();
+       }
 }
 
 void exit_thread(void)