Title: [7952] trunk/arch/blackfin: bug [#5742], add TIF_NOTIFY_RESUME support in blackfin arch
- Revision
- 7952
- Author
- bhsong
- Date
- 2009-12-08 04:55:37 -0500 (Tue, 08 Dec 2009)
Log Message
bug [#5742], add TIF_NOTIFY_RESUME support in blackfin arch
Modified Paths
Diff
Modified: trunk/arch/blackfin/include/asm/thread_info.h (7951 => 7952)
--- trunk/arch/blackfin/include/asm/thread_info.h 2009-12-08 03:07:35 UTC (rev 7951)
+++ trunk/arch/blackfin/include/asm/thread_info.h 2009-12-08 09:55:37 UTC (rev 7952)
@@ -103,11 +103,13 @@
#define TIF_RESTORE_SIGMASK 5 /* restore signal mask in do_signal() */
#define TIF_FREEZE 6 /* is freezing for suspend */
#define TIF_IRQ_SYNC 7 /* sync pipeline stage */
+#define TIF_NOTIFY_RESUME 8 /* callback before returning to user */
/* as above, but as bit values */
#define _TIF_SYSCALL_TRACE (1<<TIF_SYSCALL_TRACE)
#define _TIF_SIGPENDING (1<<TIF_SIGPENDING)
#define _TIF_NEED_RESCHED (1<<TIF_NEED_RESCHED)
+#define _TIF_NOTIFY_RESUME (1<<TIF_NOTIFY_RESUME)
#define _TIF_POLLING_NRFLAG (1<<TIF_POLLING_NRFLAG)
#define _TIF_RESTORE_SIGMASK (1<<TIF_RESTORE_SIGMASK)
#define _TIF_FREEZE (1<<TIF_FREEZE)
Modified: trunk/arch/blackfin/kernel/signal.c (7951 => 7952)
--- trunk/arch/blackfin/kernel/signal.c 2009-12-08 03:07:35 UTC (rev 7951)
+++ trunk/arch/blackfin/kernel/signal.c 2009-12-08 09:55:37 UTC (rev 7952)
@@ -12,6 +12,7 @@
#include <linux/binfmts.h>
#include <linux/freezer.h>
#include <linux/uaccess.h>
+#include <linux/tracehook.h>
#include <asm/cacheflush.h>
#include <asm/ucontext.h>
@@ -332,3 +333,20 @@
sigprocmask(SIG_SETMASK, ¤t->saved_sigmask, NULL);
}
}
+
+/*
+ * notification of userspace execution resumption
+ */
+asmlinkage void do_notify_resume(struct pt_regs *regs)
+{
+ if (test_thread_flag(TIF_SIGPENDING) || test_thread_flag(TIF_RESTORE_SIGMASK))
+ do_signal(regs);
+
+ if (test_thread_flag(TIF_NOTIFY_RESUME)) {
+ clear_thread_flag(TIF_NOTIFY_RESUME);
+ tracehook_notify_resume(regs);
+ if (current->replacement_session_keyring)
+ key_replace_session_keyring();
+ }
+}
+
Modified: trunk/arch/blackfin/mach-common/entry.S (7951 => 7952)
--- trunk/arch/blackfin/mach-common/entry.S 2009-12-08 03:07:35 UTC (rev 7951)
+++ trunk/arch/blackfin/mach-common/entry.S 2009-12-08 09:55:37 UTC (rev 7952)
@@ -713,6 +713,8 @@
cc = BITTST(r7, TIF_RESTORE_SIGMASK);
if cc jump .Lsyscall_do_signals;
cc = BITTST(r7, TIF_SIGPENDING);
+ if cc jump .Lsyscall_do_signals;
+ cc = BITTST(r7, TIF_NOTIFY_RESUME);
if !cc jump .Lsyscall_really_exit;
.Lsyscall_do_signals:
/* Reenable interrupts. */
@@ -721,7 +723,7 @@
r0 = sp;
SP += -12;
- call _do_signal;
+ call _do_notify_resume;
SP += 12;
.Lsyscall_really_exit:
_______________________________________________
Linux-kernel-commits mailing list
[email protected]
https://blackfin.uclinux.org/mailman/listinfo/linux-kernel-commits