Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp4245398pxb; Mon, 8 Feb 2021 11:20:01 -0800 (PST) X-Google-Smtp-Source: ABdhPJzyuNrf5w0/1lFPXI/kJ2ODlYVvZ7xC6MCKKK3TlbOvSQBGTWnn5pRScRBNMLopcPHbB+0+ X-Received: by 2002:aa7:c7c8:: with SMTP id o8mr18707281eds.137.1612812001674; Mon, 08 Feb 2021 11:20:01 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1612812001; cv=none; d=google.com; s=arc-20160816; b=l2E953PYjVXzR5YPthaPFbyaKzjUk2cq8alPI7Dj3Bby4PRIWR7MWV05MSf2tZuMhg fC5SCt1TbsL+Xxw91o9G5iyPz8PXwwqKqyJ63YNUsvG9fp1fa0ljWtQA9GGfVz3ECdH6 Jl3ysrWTdO/RdHGXJ6JeJn5v72OHbyCE9+aJrn6A1st1EWBSwlJFVpt1R2NwSKlzKr+u pF/NXka7kUALzNvQFaRIvAQ3x6/+QZQUEy0F+lnONQNRV5X5F71exb3PQJXlyHtLsRI2 qEM1gqAM4i//F9mRmUQmJczS/pa3RowePIPONagiGRaU9EonMKTQRkUyd89SPFC2yT4G 6DJg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=AmcPADXWYImcq7o3dCChj5Oj9xqZKQkDfZ3OOaNfTxA=; b=zRrtaa+uuYodrFIiLBpdnxZ1Po55AsWwiMSySrpQDng4g85vLOmzSJDEApl3nxix4/ CDTQvrZ2R0Va4HqtJ/XqyCVGpd7eXMo+4j47ufsrrR8wE6IgMQU9wCfatyR5/lgjiQGF KDep3Xea84YICnddsiGxiy8DVNuPcmY47vPXasPhSUiWU/LWyLmQOBAUWS6HZNNtUKz4 P8obwG5qfJla4AQgzRlo6aMn3TaPMeVhV5NRhh2mvKgVY9xvjU/sYSfqHMNnWxOF6OAp XJ2xauYXnoKCKiVvhXHH88YHwtxLdjVj3i11/Vtm5NgEu1mB8m/M/Lmr3xvFMim2MUb7 gWVA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=DosRm37s; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id kj10si12130954ejc.166.2021.02.08.11.19.36; Mon, 08 Feb 2021 11:20:01 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=DosRm37s; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235904AbhBHTRH (ORCPT + 99 others); Mon, 8 Feb 2021 14:17:07 -0500 Received: from mail.kernel.org ([198.145.29.99]:45810 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235040AbhBHR6z (ORCPT ); Mon, 8 Feb 2021 12:58:55 -0500 Received: by mail.kernel.org (Postfix) with ESMTPSA id 6BD8164E28; Mon, 8 Feb 2021 17:58:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1612807094; bh=efafAd6WaDg8SGnlqP87Caf8A64qt4Co/sdcXkCnQTM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=DosRm37s8FU8PriQT/DRVGR/NeYaEdJ9jf/QIifcewRPe9xShmQJ2a3AwztDLtxs9 2QEJ7kfvusCUZadtjnN+pJ0+K5wskhp8/pTzoGOYj0fdvajiMXRilwtvOgcdHvg7ZC wad0Q2BHxmURK7dMo6leBxPC8B+0hIks9B1tmLZR8CTxZkpLzr8JtDmVW6Quo8RvV7 oOl1oKBYV9xGsdzmCcEDkBNi8LcEsd2KpHev3l0EulrwVG/Tv5W98B0+7mT2oCF3mJ aWrpkreXbySLUWVciarA/QeOdhnmU81xiPHchZJrjjTsrCPOaKvEa6GhslYN0GExz8 K7vz61hThdVpQ== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Tony Lindgren , Daniel Lezcano , "Paul E . McKenney" , Russell King , Sasha Levin , linux-arm-kernel@lists.infradead.org, linux-omap@vger.kernel.org Subject: [PATCH AUTOSEL 5.10 05/36] ARM: OMAP2+: Fix suspcious RCU usage splats for omap_enter_idle_coupled Date: Mon, 8 Feb 2021 12:57:35 -0500 Message-Id: <20210208175806.2091668-5-sashal@kernel.org> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20210208175806.2091668-1-sashal@kernel.org> References: <20210208175806.2091668-1-sashal@kernel.org> MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Tony Lindgren [ Upstream commit 06862d789ddde8a99c1e579e934ca17c15a84755 ] We get suspcious RCU usage splats with cpuidle in several places in omap_enter_idle_coupled() with the kernel debug options enabled: RCU used illegally from extended quiescent state! ... (_raw_spin_lock_irqsave) (omap_enter_idle_coupled+0x17c/0x2d8) (omap_enter_idle_coupled) (cpuidle_enter_state) (cpuidle_enter_state_coupled) (cpuidle_enter) Let's use RCU_NONIDLE to suppress these splats. Things got changed around with commit 1098582a0f6c ("sched,idle,rcu: Push rcu_idle deeper into the idle path") that started triggering these warnings. For the tick_broadcast related calls, ideally we'd just switch over to using CPUIDLE_FLAG_TIMER_STOP for omap_enter_idle_coupled() to have the generic cpuidle code handle the tick_broadcast related calls for us and then just drop the tick_broadcast calls here. But we're currently missing the call in the common cpuidle code for tick_broadcast_enable() that CPU1 hotplug needs as described in earlier commit 50d6b3cf9403 ("ARM: OMAP2+: fix lack of timer interrupts on CPU1 after hotplug"). Cc: Daniel Lezcano Cc: Paul E. McKenney Cc: Russell King Acked-by: Paul E. McKenney Signed-off-by: Tony Lindgren Signed-off-by: Sasha Levin --- arch/arm/mach-omap2/cpuidle44xx.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/arch/arm/mach-omap2/cpuidle44xx.c b/arch/arm/mach-omap2/cpuidle44xx.c index c8d317fafe2ea..de37027ad7587 100644 --- a/arch/arm/mach-omap2/cpuidle44xx.c +++ b/arch/arm/mach-omap2/cpuidle44xx.c @@ -151,10 +151,10 @@ static int omap_enter_idle_coupled(struct cpuidle_device *dev, (cx->mpu_logic_state == PWRDM_POWER_OFF); /* Enter broadcast mode for periodic timers */ - tick_broadcast_enable(); + RCU_NONIDLE(tick_broadcast_enable()); /* Enter broadcast mode for one-shot timers */ - tick_broadcast_enter(); + RCU_NONIDLE(tick_broadcast_enter()); /* * Call idle CPU PM enter notifier chain so that @@ -166,7 +166,7 @@ static int omap_enter_idle_coupled(struct cpuidle_device *dev, if (dev->cpu == 0) { pwrdm_set_logic_retst(mpu_pd, cx->mpu_logic_state); - omap_set_pwrdm_state(mpu_pd, cx->mpu_state); + RCU_NONIDLE(omap_set_pwrdm_state(mpu_pd, cx->mpu_state)); /* * Call idle CPU cluster PM enter notifier chain @@ -178,7 +178,7 @@ static int omap_enter_idle_coupled(struct cpuidle_device *dev, index = 0; cx = state_ptr + index; pwrdm_set_logic_retst(mpu_pd, cx->mpu_logic_state); - omap_set_pwrdm_state(mpu_pd, cx->mpu_state); + RCU_NONIDLE(omap_set_pwrdm_state(mpu_pd, cx->mpu_state)); mpuss_can_lose_context = 0; } } @@ -194,9 +194,9 @@ static int omap_enter_idle_coupled(struct cpuidle_device *dev, mpuss_can_lose_context) gic_dist_disable(); - clkdm_deny_idle(cpu_clkdm[1]); - omap_set_pwrdm_state(cpu_pd[1], PWRDM_POWER_ON); - clkdm_allow_idle(cpu_clkdm[1]); + RCU_NONIDLE(clkdm_deny_idle(cpu_clkdm[1])); + RCU_NONIDLE(omap_set_pwrdm_state(cpu_pd[1], PWRDM_POWER_ON)); + RCU_NONIDLE(clkdm_allow_idle(cpu_clkdm[1])); if (IS_PM44XX_ERRATUM(PM_OMAP4_ROM_SMP_BOOT_ERRATUM_GICD) && mpuss_can_lose_context) { @@ -222,7 +222,7 @@ static int omap_enter_idle_coupled(struct cpuidle_device *dev, cpu_pm_exit(); cpu_pm_out: - tick_broadcast_exit(); + RCU_NONIDLE(tick_broadcast_exit()); fail: cpuidle_coupled_parallel_barrier(dev, &abort_barrier); -- 2.27.0