From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx1.redhat.com ([209.132.183.28]:51446 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754014AbdDRNqf (ORCPT ); Tue, 18 Apr 2017 09:46:35 -0400 Date: Tue, 18 Apr 2017 15:46:31 +0200 From: Oleg Nesterov To: Florian Fainelli Cc: linux-kernel@vger.kernel.org, stable@vger.kernel.org, alexander.levin@verizon.com, Peter Zijlstra , Linus Torvalds , Mike Galbraith , Thomas Gleixner , mark.rutland@arm.com, neilb@suse.de, Ingo Molnar Subject: Re: [PATCH linux-4.1.y] sched/wait: Fix signal handling in bit wait helpers Message-ID: <20170418134631.GA13416@redhat.com> References: <20170412180345.31339-1-f.fainelli@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20170412180345.31339-1-f.fainelli@gmail.com> Sender: stable-owner@vger.kernel.org List-ID: Just curious, any particular reason you want to backport this patch? because nobody understands why it actually helped. and please note that this patch is buggy, fixed by dfd01f0260 "sched/wait: Fix the signal handling fix" Oleg. On 04/12, Florian Fainelli wrote: > > From: Peter Zijlstra > > [ Upstream commit 68985633bccb6066bf1803e316fbc6c1f5b796d6 ] > > Vladimir reported getting RCU stall warnings and bisected it back to > commit: > > 743162013d40 ("sched: Remove proliferation of wait_on_bit() action functions") > > That commit inadvertently reversed the calls to schedule() and signal_pending(), > thereby not handling the case where the signal receives while we sleep. > > Reported-by: Vladimir Murzin > Tested-by: Vladimir Murzin > Signed-off-by: Peter Zijlstra (Intel) > Cc: Linus Torvalds > Cc: Mike Galbraith > Cc: Peter Zijlstra > Cc: Thomas Gleixner > Cc: mark.rutland@arm.com > Cc: neilb@suse.de > Cc: oleg@redhat.com > Fixes: 743162013d40 ("sched: Remove proliferation of wait_on_bit() action functions") > Fixes: cbbce8220949 ("SCHED: add some "wait..on_bit...timeout()" interfaces.") > Link: http://lkml.kernel.org/r/20151201130404.GL3816@twins.programming.kicks-ass.net > Signed-off-by: Ingo Molnar > --- > kernel/sched/wait.c | 16 ++++++++-------- > 1 file changed, 8 insertions(+), 8 deletions(-) > > diff --git a/kernel/sched/wait.c b/kernel/sched/wait.c > index 852143a79f36..e0bb7e6c4fb0 100644 > --- a/kernel/sched/wait.c > +++ b/kernel/sched/wait.c > @@ -583,18 +583,18 @@ EXPORT_SYMBOL(wake_up_atomic_t); > > __sched int bit_wait(struct wait_bit_key *word) > { > - if (signal_pending_state(current->state, current)) > - return 1; > schedule(); > + if (signal_pending(current)) > + return -EINTR; > return 0; > } > EXPORT_SYMBOL(bit_wait); > > __sched int bit_wait_io(struct wait_bit_key *word) > { > - if (signal_pending_state(current->state, current)) > - return 1; > io_schedule(); > + if (signal_pending(current)) > + return -EINTR; > return 0; > } > EXPORT_SYMBOL(bit_wait_io); > @@ -602,11 +602,11 @@ EXPORT_SYMBOL(bit_wait_io); > __sched int bit_wait_timeout(struct wait_bit_key *word) > { > unsigned long now = ACCESS_ONCE(jiffies); > - if (signal_pending_state(current->state, current)) > - return 1; > if (time_after_eq(now, word->timeout)) > return -EAGAIN; > schedule_timeout(word->timeout - now); > + if (signal_pending(current)) > + return -EINTR; > return 0; > } > EXPORT_SYMBOL_GPL(bit_wait_timeout); > @@ -614,11 +614,11 @@ EXPORT_SYMBOL_GPL(bit_wait_timeout); > __sched int bit_wait_io_timeout(struct wait_bit_key *word) > { > unsigned long now = ACCESS_ONCE(jiffies); > - if (signal_pending_state(current->state, current)) > - return 1; > if (time_after_eq(now, word->timeout)) > return -EAGAIN; > io_schedule_timeout(word->timeout - now); > + if (signal_pending(current)) > + return -EINTR; > return 0; > } > EXPORT_SYMBOL_GPL(bit_wait_io_timeout); > -- > 2.12.1 >