| .. | .. |
|---|
| 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 | |
|---|