From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752647AbdEPTMl (ORCPT ); Tue, 16 May 2017 15:12:41 -0400 Received: from mail.kernel.org ([198.145.29.99]:37148 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750847AbdEPTMj (ORCPT ); Tue, 16 May 2017 15:12:39 -0400 DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 225E4239CC Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=goodmis.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=rostedt@goodmis.org Date: Tue, 16 May 2017 15:12:36 -0400 From: Steven Rostedt To: Thomas Gleixner Cc: LKML , Peter Zijlstra , Ingo Molnar , Mark Rutland , Greg Kroah-Hartman Subject: Re: [patch V2 17/17] sched: Enable might_sleep() and smp_processor_id() checks early Message-ID: <20170516151236.3ca5d9ae@gandalf.local.home> In-Reply-To: <20170516184736.272225698@linutronix.de> References: <20170516184231.564888231@linutronix.de> <20170516184736.272225698@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 Tue, 16 May 2017 20:42:48 +0200 Thomas Gleixner wrote: > might_sleep() and smp_processor_id() checks are enabled after the boot > process is done. That hides bugs in the smp bringup and driver > initialization code. > > Enable it right when the scheduler starts working, i.e. when init task and > kthreadd have been created and right before the idle task enables > preemption. > > Signed-off-by: Thomas Gleixner > --- > init/main.c | 10 ++++++++++ > kernel/sched/core.c | 4 +++- > lib/smp_processor_id.c | 2 +- > 3 files changed, 14 insertions(+), 2 deletions(-) > > --- a/init/main.c > +++ b/init/main.c > @@ -414,6 +414,16 @@ static noinline void __ref rest_init(voi > rcu_read_lock(); > kthreadd_task = find_task_by_pid_ns(pid, &init_pid_ns); > rcu_read_unlock(); > + > + /* > + * Enable might_sleep() and smp_processor_id() checks. > + * They cannot be enabled earlier because with CONFIG_PRREMPT=y My cat's version of CONFIG_PREEMPT, it's CONFIG_ PRR EMPT! > + * kernel_thread() would trigger might_sleep() splats. With > + * CONFIG_PREEMPT_VOLUNTARY=y the init task might have scheduled > + * already, but it's stuck on the kthreadd_done completion. > + */ > + system_state = SYSTEM_SCHEDULING; > + > complete(&kthreadd_done); > > /* > --- a/kernel/sched/core.c > +++ b/kernel/sched/core.c > @@ -6226,8 +6226,10 @@ void ___might_sleep(const char *file, in > > if ((preempt_count_equals(preempt_offset) && !irqs_disabled() && > !is_idle_task(current)) || > - system_state != SYSTEM_RUNNING || oops_in_progress) > + system_state == SYSTEM_BOOTING || system_state > SYSTEM_RUNNING || > + oops_in_progress) > return; > + > if (time_before(jiffies, prev_jiffy + HZ) && prev_jiffy) > return; > prev_jiffy = jiffies; > --- a/lib/smp_processor_id.c > +++ b/lib/smp_processor_id.c > @@ -28,7 +28,7 @@ notrace static unsigned int check_preemp > /* > * It is valid to assume CPU-locality during early bootup: > */ > - if (system_state != SYSTEM_RUNNING) > + if (system_state < SYSTEM_SCHEDULING) Do we want to ignore halting or rebooting too? -- Steve > goto out; > > /* >