From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753971AbdDCPVf (ORCPT ); Mon, 3 Apr 2017 11:21:35 -0400 Received: from mail.kernel.org ([198.145.29.136]:55142 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753382AbdDCPVc (ORCPT ); Mon, 3 Apr 2017 11:21:32 -0400 Date: Mon, 3 Apr 2017 11:21:26 -0400 From: Steven Rostedt To: Thomas Gleixner Cc: LKML , RT-users , Peter Zijlstra , Sebastian Siewior , Julia Cartwright , Wargreen , rt-stable@vger.kernel.org Subject: Re: [patch RT 1/4] rtmutex: Make lock_killable work Message-ID: <20170403112126.75504264@gandalf.local.home> In-Reply-To: <20170401112758.051867031@linutronix.de> References: <20170401105058.958246042@linutronix.de> <20170401112758.051867031@linutronix.de> X-Mailer: Claws Mail 3.14.0 (GTK+ 2.24.31; x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Sat, 01 Apr 2017 12:50:59 +0200 Thomas Gleixner wrote: > Locking an rt mutex killable does not work because signal handling is > restricted to TASK_INTERRUPTIBLE. > > Use signal_pending_state() unconditionaly. Does this mean rt mutex killable is not INTERRUPTIBLE? because the change log seems to just assume that. In other words, mortals reading this have no idea what you are talking about ;-) -- Steve > > Cc: rt-stable@vger.kernel.org > Signed-off-by: Thomas Gleixner > --- > kernel/locking/rtmutex.c | 19 +++++++------------ > 1 file changed, 7 insertions(+), 12 deletions(-) > > --- a/kernel/locking/rtmutex.c > +++ b/kernel/locking/rtmutex.c > @@ -1633,18 +1633,13 @@ static int __sched > if (try_to_take_rt_mutex(lock, current, waiter)) > break; > > - /* > - * TASK_INTERRUPTIBLE checks for signals and > - * timeout. Ignored otherwise. > - */ > - if (unlikely(state == TASK_INTERRUPTIBLE)) { > - /* Signal pending? */ > - if (signal_pending(current)) > - ret = -EINTR; > - if (timeout && !timeout->task) > - ret = -ETIMEDOUT; > - if (ret) > - break; > + if (timeout && !timeout->task) { > + ret = -ETIMEDOUT; > + break; > + } > + if (signal_pending_state(state, current)) { > + ret = -EINTR; > + break; > } > > if (ww_ctx && ww_ctx->acquired > 0) { >