From patchwork Thu Jul 20 12:45:12 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Jon Hunter X-Patchwork-Id: 9854887 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 9FF55602BA for ; Thu, 20 Jul 2017 12:45:49 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 900F028794 for ; Thu, 20 Jul 2017 12:45:49 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 848702879B; Thu, 20 Jul 2017 12:45:49 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-1.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [65.50.211.133]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id EBD1A28794 for ; Thu, 20 Jul 2017 12:45:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:Date: Message-ID:From:References:To:Subject:Reply-To:Cc:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=ne5t4hcUzgaXUOI7JsMDEM5+0mKuHVkLNPHP95VYaFQ=; b=Q0wF776XFumT4kcBLdDPlc+oL8 AAahlAgjIqqJnP4VpPtodp2zV8vNUhh32iWUbLCNcs4q4O7nHWDC0F0yJ/wUO7L5RWA3mpRNAKMpZ Sqa1Cq4c4MFIBwoI7EtkqsQ51Jszcx/SwZ05XZ6vnkZeabJrQ8JcEHAI8HhVZzTOQUfIy2xJW8483 aSTtBFIxStEQFYLc1LbRV3VR5o2EqRfbw5X8OaFe83qYVq6fK/62jnXReGNsmFejviBnVIoK9w2wG XQXZSkMppVBfUjFooebfyDMGYY1o9VjEqBrgiLBWSsM5z/1NzYjToWecO1XQfNIpF2O9sAeeIzd8P w3my/EAA==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.87 #1 (Red Hat Linux)) id 1dYApq-0000v4-6I; Thu, 20 Jul 2017 12:45:42 +0000 Received: from hqemgate15.nvidia.com ([216.228.121.64]) by bombadil.infradead.org with esmtps (Exim 4.87 #1 (Red Hat Linux)) id 1dYApn-0000EV-68 for linux-arm-kernel@lists.infradead.org; Thu, 20 Jul 2017 12:45:40 +0000 Received: from hqpgpgate102.nvidia.com (Not Verified[216.228.121.13]) by hqemgate15.nvidia.com id ; Thu, 20 Jul 2017 05:45:21 -0700 Received: from HQMAIL106.nvidia.com ([172.20.13.39]) by hqpgpgate102.nvidia.com (PGP Universal service); Thu, 20 Jul 2017 05:45:18 -0700 X-PGP-Universal: processed; by hqpgpgate102.nvidia.com on Thu, 20 Jul 2017 05:45:18 -0700 Received: from UKMAIL101.nvidia.com (10.26.138.13) by HQMAIL106.nvidia.com (172.18.146.12) with Microsoft SMTP Server (TLS) id 15.0.1263.5; Thu, 20 Jul 2017 12:45:17 +0000 Received: from [10.21.132.162] (10.21.132.162) by UKMAIL101.nvidia.com (10.26.138.13) with Microsoft SMTP Server (TLS) id 15.0.1263.5; Thu, 20 Jul 2017 12:45:13 +0000 Subject: Re: [PATCH 9/9] ARM: tegra: fix sleeping while atomic in CPU idle To: =?UTF-8?B?TWljaGHFgiBNaXJvc8WCYXc=?= , , References: <0a0600cdbcc9a71134105043c3e2ace84bab7c5a.1500510157.git.mirq-linux@rere.qmqm.pl> From: Jon Hunter Message-ID: <378bf911-147e-f800-2de4-591e160528f0@nvidia.com> Date: Thu, 20 Jul 2017 13:45:12 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.2.1 MIME-Version: 1.0 In-Reply-To: <0a0600cdbcc9a71134105043c3e2ace84bab7c5a.1500510157.git.mirq-linux@rere.qmqm.pl> X-Originating-IP: [10.21.132.162] X-ClientProxiedBy: UKMAIL102.nvidia.com (10.26.138.15) To UKMAIL101.nvidia.com (10.26.138.13) Content-Language: en-US X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20170720_054539_282853_2D70D61E X-CRM114-Status: GOOD ( 17.16 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP On 20/07/17 01:29, Michał Mirosław wrote: > This removes unnecessary lock causing following BUG splat: > > BUG: sleeping function called from invalid context at /linux/kernel/locking/mutex.c:747 > in_atomic(): 1, irqs_disabled(): 128, pid: 0, name: swapper/0 > no locks held by swapper/0/0. > CPU: 0 PID: 0 Comm: swapper/0 Tainted: G W 4.13.0-rc1mq-00016-gbf3f627c6b2b #1 > Hardware name: NVIDIA Tegra SoC (Flattened Device Tree) > [] (unwind_backtrace) from [] (show_stack+0x18/0x1c) > [] (show_stack) from [] (dump_stack+0x84/0x98) > [] (dump_stack) from [] (___might_sleep+0x158/0x17c) > [] (___might_sleep) from [] (__mutex_lock+0x34/0x9a0) > [] (__mutex_lock) from [] (mutex_lock_nested+0x24/0x2c) > [] (mutex_lock_nested) from [] (tegra_powergate_is_powered+0x40/0xa4) > [] (tegra_powergate_is_powered) from [] (tegra30_cpu_rail_off_ready+0x28/0x6c) > [] (tegra30_cpu_rail_off_ready) from [] (tegra30_idle_lp2+0x70/0x114) > [] (tegra30_idle_lp2) from [] (cpuidle_enter_state+0x12c/0x47c) > [] (cpuidle_enter_state) from [] (do_idle+0x1b4/0x204) > [] (do_idle) from [] (cpu_startup_entry+0x20/0x24) > [] (cpu_startup_entry) from [] (start_kernel+0x39c/0x3a8) > > Signed-off-by: Michał Mirosław > --- > drivers/soc/tegra/pmc.c | 2 -- > 1 file changed, 2 deletions(-) > > diff --git a/drivers/soc/tegra/pmc.c b/drivers/soc/tegra/pmc.c > index e233dd5dcab3..3e6ec9fdba41 100644 > --- a/drivers/soc/tegra/pmc.c > +++ b/drivers/soc/tegra/pmc.c > @@ -526,9 +526,7 @@ int tegra_powergate_is_powered(unsigned int id) > if (!tegra_powergate_is_valid(id)) > return -EINVAL; > > - mutex_lock(&pmc->powergates_lock); > status = tegra_powergate_state(id); > - mutex_unlock(&pmc->powergates_lock); > > return status; > } Thanks for the fix. However, I would prefer that we fix this the following way ... Could you try the above and make sure that this works? I would prefer to leave the mutex in tegra_powergate_is_powered() so it could be used by any driver. Or maybe we could even get rid of tegra_powergate_is_powered() if we don't really need it. Cheers Jon diff --git a/drivers/clk/tegra/clk-tegra30.c b/drivers/clk/tegra/clk-tegra30.c index a2d163f759b4..546d2b121c39 100644 --- a/drivers/clk/tegra/clk-tegra30.c +++ b/drivers/clk/tegra/clk-tegra30.c @@ -1152,9 +1152,9 @@ static bool tegra30_cpu_rail_off_ready(void) cpu_rst_status = readl(clk_base + TEGRA30_CLK_RST_CONTROLLER_CPU_CMPLX_STATUS); - cpu_pwr_status = tegra_powergate_is_powered(TEGRA_POWERGATE_CPU1) || - tegra_powergate_is_powered(TEGRA_POWERGATE_CPU2) || - tegra_powergate_is_powered(TEGRA_POWERGATE_CPU3); + cpu_pwr_status = tegra_pmc_cpu_is_powered(1) || + tegra_pmc_cpu_is_powered(2) || + tegra_pmc_cpu_is_powered(3); if (((cpu_rst_status & 0xE) != 0xE) || cpu_pwr_status) return false; diff --git a/drivers/soc/tegra/pmc.c b/drivers/soc/tegra/pmc.c index e233dd5dcab3..f61371ea3fe0 100644 --- a/drivers/soc/tegra/pmc.c +++ b/drivers/soc/tegra/pmc.c @@ -605,7 +605,7 @@ bool tegra_pmc_cpu_is_powered(unsigned int cpuid) if (id < 0) return false; - return tegra_powergate_is_powered(id); + return tegra_powergate_state(id); }