Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753358AbcD0Hbn (ORCPT ); Wed, 27 Apr 2016 03:31:43 -0400 Received: from mail.kmu-office.ch ([178.209.48.109]:52453 "EHLO mail.kmu-office.ch" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753214AbcD0Hbm (ORCPT ); Wed, 27 Apr 2016 03:31:42 -0400 MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Date: Wed, 27 Apr 2016 00:28:10 -0700 From: Stefan Agner To: Fabio Estevam Cc: Dong Aisheng , Shawn Guo , Lucas Stach , Michael Turquette , Stephen Boyd , linux-kernel@vger.kernel.org, mingo@redhat.com, kernel@pengutronix.de, Thomas Gleixner , linux-clk@vger.kernel.org, linux-arm-kernel@lists.infradead.org Subject: Re: [PATCH 1/2] clk: imx: do not sleep if IRQ's are still disabled In-Reply-To: References: <1454107764-19876-1-git-send-email-stefan@agner.ch> <20160421034520.GA19965@shlinux2.ap.freescale.net> <20160426012341.GB8870@tiger> <1461663072.7839.17.camel@pengutronix.de> <20160427015835.GE30692@tiger> Message-ID: <1f10ab4830032858bc4d6174528f18e8@agner.ch> User-Agent: Roundcube Webmail/1.1.3 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2034 Lines: 60 On 2016-04-26 19:56, Fabio Estevam wrote: > On Tue, Apr 26, 2016 at 11:45 PM, Dong Aisheng wrote: > >>> We need to firstly understand why this is happening. The .prepare hook >>> is defined to be non-atomic context, and so that we call sleep function >>> in there. We did everything right. Why are we getting the warning? If >>> I'm correct, this warning only happens on i.MX7D. Why is that? >>> >> >> This is mainly caused by during kernel early booting, there's only one init idle >> task running. >> See: >> void __init sched_init(void) >> { >> ..... >> /* >> * Make us the idle thread. Technically, schedule() should not be >> * called from this thread, however somewhere below it might be, >> * but because we are the idle thread, we just pick up running again >> * when this runqueue becomes "idle". >> */ >> init_idle(current, smp_processor_id()); >> ... >> } >> >> And the idle sched class indicates it's not valid to schedule for idle task. >> const struct sched_class idle_sched_class = { >> /* .next is NULL */ >> /* no enqueue/yield_task for idle tasks */ >> >> /* dequeue is not valid, we print a debug message there: */ >> .dequeue_task = dequeue_task_idle, >> ........... >> >> } >> >> /* >> * It is not legal to sleep in the idle task - print a warning >> * message if some code attempts to do it: >> */ >> static void >> dequeue_task_idle(struct rq *rq, struct task_struct *p, int flags) >> { >> raw_spin_unlock_irq(&rq->lock); >> printk(KERN_ERR "bad: scheduling from the idle thread!\n"); >> dump_stack(); >> raw_spin_lock_irq(&rq->lock); >> } >> >> >> Below is the full log of imx7d booting FYI. > > This does not answer Shawn's question: why do we see this only on mx7d? I was wondering that too.... My theory is that either on i.MX 6 the clocks enable almost instantly leading to no sleep, or they are just bootloader/firmware on...? -- Stefan