On Mon, 21 Dec 2015, Will Deacon wrote:
+static void send_user_sigtrap(int si_code) +{
- struct pt_regs *regs = current_pt_regs();
- siginfo_t info = {
.si_signo = SIGTRAP,.si_errno = 0,.si_code = si_code,.si_addr = (void __user *)instruction_pointer(regs),- };
- if (WARN_ON(!user_mode(regs)))
return;- preempt_disable();
That doesn't work on RT either. force_sig_info() takes task->sighand->siglock, which is a 'sleeping' spinlock on RT.
Why would we need to disable preemption here at all? What's the problem of being preempted or even migrated?
Thanks,
tglx