From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S965779AbdEOPKN (ORCPT ); Mon, 15 May 2017 11:10:13 -0400 Received: from mail.kernel.org ([198.145.29.99]:60594 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S934544AbdEOPKM (ORCPT ); Mon, 15 May 2017 11:10:12 -0400 DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 8863D239BC 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: Mon, 15 May 2017 11:10:08 -0400 From: Steven Rostedt To: Thomas Gleixner Cc: LKML , Peter Zijlstra , Ingo Molnar , Mark Rutland Subject: Re: [patch 17/18] sched: Enable might_sleep() checks early Message-ID: <20170515111008.1215e489@gandalf.local.home> In-Reply-To: <20170514183613.836520655@linutronix.de> References: <20170514182716.347236777@linutronix.de> <20170514183613.836520655@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 Sun, 14 May 2017 20:27:33 +0200 Thomas Gleixner wrote: > might_sleep() 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. Looking at commit b433c3d4549ae749, it appears that on very slow machines, there is a possibility that the init task can start running. Should system_state be updated before that complete() is called? -- Steve > > Signed-off-by: Thomas Gleixner > --- > init/main.c | 2 ++ > kernel/sched/core.c | 4 +++- > 2 files changed, 5 insertions(+), 1 deletion(-) > > --- a/init/main.c > +++ b/init/main.c > @@ -410,6 +410,8 @@ static noinline void __ref rest_init(voi > * at least once to get things moving: > */ > init_idle_bootup_task(current); > + /* Enable might_sleep() checks */ > + system_state = SYSTEM_BOOTING_UP; > schedule_preempt_disabled(); > /* Call into cpu_idle with preempt disabled */ > cpu_startup_entry(CPUHP_ONLINE); > --- 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; >