.. | .. |
---|
134 | 134 | |
---|
135 | 135 | #define EXIT_TO_USERMODE_LOOP_FLAGS \ |
---|
136 | 136 | (_TIF_SIGPENDING | _TIF_NOTIFY_RESUME | _TIF_UPROBE | \ |
---|
137 | | - _TIF_NEED_RESCHED | _TIF_USER_RETURN_NOTIFY | _TIF_PATCH_PENDING) |
---|
| 137 | + _TIF_NEED_RESCHED_MASK | _TIF_USER_RETURN_NOTIFY | _TIF_PATCH_PENDING) |
---|
138 | 138 | |
---|
139 | 139 | static void exit_to_usermode_loop(struct pt_regs *regs, u32 cached_flags) |
---|
140 | 140 | { |
---|
.. | .. |
---|
149 | 149 | /* We have work to do. */ |
---|
150 | 150 | local_irq_enable(); |
---|
151 | 151 | |
---|
152 | | - if (cached_flags & _TIF_NEED_RESCHED) |
---|
| 152 | + if (cached_flags & _TIF_NEED_RESCHED_MASK) |
---|
153 | 153 | schedule(); |
---|
154 | 154 | |
---|
| 155 | +#ifdef ARCH_RT_DELAYS_SIGNAL_SEND |
---|
| 156 | + if (unlikely(current->forced_info.si_signo)) { |
---|
| 157 | + struct task_struct *t = current; |
---|
| 158 | + force_sig_info(t->forced_info.si_signo, &t->forced_info, t); |
---|
| 159 | + t->forced_info.si_signo = 0; |
---|
| 160 | + } |
---|
| 161 | +#endif |
---|
155 | 162 | if (cached_flags & _TIF_UPROBE) |
---|
156 | 163 | uprobe_notify_resume(regs); |
---|
157 | 164 | |
---|