aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/frv/include/asm/thread_info.h16
-rw-r--r--arch/frv/kernel/entry.S12
2 files changed, 15 insertions, 13 deletions
diff --git a/arch/frv/include/asm/thread_info.h b/arch/frv/include/asm/thread_info.h
index 54ab13a0de41..0ff03a33c81e 100644
--- a/arch/frv/include/asm/thread_info.h
+++ b/arch/frv/include/asm/thread_info.h
@@ -94,8 +94,8 @@ register struct thread_info *__current_thread_info asm("gr15");
94#define TIF_NEED_RESCHED 3 /* rescheduling necessary */ 94#define TIF_NEED_RESCHED 3 /* rescheduling necessary */
95#define TIF_SINGLESTEP 4 /* restore singlestep on return to user mode */ 95#define TIF_SINGLESTEP 4 /* restore singlestep on return to user mode */
96#define TIF_RESTORE_SIGMASK 5 /* restore signal mask in do_signal() */ 96#define TIF_RESTORE_SIGMASK 5 /* restore signal mask in do_signal() */
97#define TIF_POLLING_NRFLAG 16 /* true if poll_idle() is polling TIF_NEED_RESCHED */ 97#define TIF_POLLING_NRFLAG 6 /* true if poll_idle() is polling TIF_NEED_RESCHED */
98#define TIF_MEMDIE 17 /* is terminating due to OOM killer */ 98#define TIF_MEMDIE 7 /* is terminating due to OOM killer */
99 99
100#define _TIF_SYSCALL_TRACE (1 << TIF_SYSCALL_TRACE) 100#define _TIF_SYSCALL_TRACE (1 << TIF_SYSCALL_TRACE)
101#define _TIF_NOTIFY_RESUME (1 << TIF_NOTIFY_RESUME) 101#define _TIF_NOTIFY_RESUME (1 << TIF_NOTIFY_RESUME)
@@ -105,8 +105,16 @@ register struct thread_info *__current_thread_info asm("gr15");
105#define _TIF_RESTORE_SIGMASK (1 << TIF_RESTORE_SIGMASK) 105#define _TIF_RESTORE_SIGMASK (1 << TIF_RESTORE_SIGMASK)
106#define _TIF_POLLING_NRFLAG (1 << TIF_POLLING_NRFLAG) 106#define _TIF_POLLING_NRFLAG (1 << TIF_POLLING_NRFLAG)
107 107
108#define _TIF_WORK_MASK 0x0000FFFE /* work to do on interrupt/exception return */ 108/* work to do on interrupt/exception return */
109#define _TIF_ALLWORK_MASK 0x0000FFFF /* work to do on any return to u-space */ 109#define _TIF_WORK_MASK \
110 (_TIF_NOTIFY_RESUME | _TIF_SIGPENDING | _TIF_NEED_RESCHED | _TIF_SINGLESTEP)
111
112/* work to do on any return to u-space */
113#define _TIF_ALLWORK_MASK (_TIF_WORK_MASK | _TIF_SYSCALL_TRACE)
114
115#if _TIF_ALLWORK_MASK >= 0x2000
116#error "_TIF_ALLWORK_MASK won't fit in an ANDI now (see entry.S)"
117#endif
110 118
111/* 119/*
112 * Thread-synchronous status. 120 * Thread-synchronous status.
diff --git a/arch/frv/kernel/entry.S b/arch/frv/kernel/entry.S
index ff3092c18ca2..03da263e112a 100644
--- a/arch/frv/kernel/entry.S
+++ b/arch/frv/kernel/entry.S
@@ -924,9 +924,7 @@ __syscall_exit:
924 movgs gr23,psr 924 movgs gr23,psr
925 925
926 ldi @(gr15,#TI_FLAGS),gr4 926 ldi @(gr15,#TI_FLAGS),gr4
927 sethi.p %hi(_TIF_ALLWORK_MASK),gr5 927 andicc gr4,#_TIF_ALLWORK_MASK,gr0,icc0
928 setlo %lo(_TIF_ALLWORK_MASK),gr5
929 andcc gr4,gr5,gr0,icc0
930 bne icc0,#0,__syscall_exit_work 928 bne icc0,#0,__syscall_exit_work
931 929
932 # restore all registers and return 930 # restore all registers and return
@@ -1111,9 +1109,7 @@ __entry_resume_userspace:
1111__entry_return_from_user_interrupt: 1109__entry_return_from_user_interrupt:
1112 LEDS 0x6402 1110 LEDS 0x6402
1113 ldi @(gr15,#TI_FLAGS),gr4 1111 ldi @(gr15,#TI_FLAGS),gr4
1114 sethi.p %hi(_TIF_WORK_MASK),gr5 1112 andicc gr4,#_TIF_WORK_MASK,gr0,icc0
1115 setlo %lo(_TIF_WORK_MASK),gr5
1116 andcc gr4,gr5,gr0,icc0
1117 beq icc0,#1,__entry_return_direct 1113 beq icc0,#1,__entry_return_direct
1118 1114
1119__entry_work_pending: 1115__entry_work_pending:
@@ -1133,9 +1129,7 @@ __entry_work_resched:
1133 1129
1134 LEDS 0x6401 1130 LEDS 0x6401
1135 ldi @(gr15,#TI_FLAGS),gr4 1131 ldi @(gr15,#TI_FLAGS),gr4
1136 sethi.p %hi(_TIF_WORK_MASK),gr5 1132 andicc gr4,#_TIF_WORK_MASK,gr0,icc0
1137 setlo %lo(_TIF_WORK_MASK),gr5
1138 andcc gr4,gr5,gr0,icc0
1139 beq icc0,#1,__entry_return_direct 1133 beq icc0,#1,__entry_return_direct
1140 andicc gr4,#_TIF_NEED_RESCHED,gr0,icc0 1134 andicc gr4,#_TIF_NEED_RESCHED,gr0,icc0
1141 bne icc0,#1,__entry_work_resched 1135 bne icc0,#1,__entry_work_resched