From patchwork Thu Feb 2 00:43:24 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Paul E. McKenney" X-Patchwork-Id: 6554 Return-Path: X-Original-To: patchwork@peony.canonical.com Delivered-To: patchwork@peony.canonical.com Received: from fiordland.canonical.com (fiordland.canonical.com [91.189.94.145]) by peony.canonical.com (Postfix) with ESMTP id AE7E5249C6 for ; Thu, 2 Feb 2012 00:44:47 +0000 (UTC) Received: from mail-tul01m020-f180.google.com (mail-tul01m020-f180.google.com [209.85.214.180]) by fiordland.canonical.com (Postfix) with ESMTP id 518B4A1850C for ; Thu, 2 Feb 2012 00:44:47 +0000 (UTC) Received: by obbuo19 with SMTP id uo19so2809578obb.11 for ; Wed, 01 Feb 2012 16:44:46 -0800 (PST) Received: by 10.50.236.5 with SMTP id uq5mr9884789igc.13.1328143486582; Wed, 01 Feb 2012 16:44:46 -0800 (PST) X-Forwarded-To: linaro-patchwork@canonical.com X-Forwarded-For: patch@linaro.org linaro-patchwork@canonical.com Delivered-To: patches@linaro.org Received: by 10.231.169.210 with SMTP id a18cs32208ibz; Wed, 1 Feb 2012 16:44:46 -0800 (PST) Received: by 10.68.222.131 with SMTP id qm3mr2607792pbc.34.1328143485986; Wed, 01 Feb 2012 16:44:45 -0800 (PST) Received: from e32.co.us.ibm.com (e32.co.us.ibm.com. [32.97.110.150]) by mx.google.com with ESMTPS id j9si1250278pbh.88.2012.02.01.16.44.45 (version=TLSv1/SSLv3 cipher=OTHER); Wed, 01 Feb 2012 16:44:45 -0800 (PST) Received-SPF: pass (google.com: domain of paulmck@linux.vnet.ibm.com designates 32.97.110.150 as permitted sender) client-ip=32.97.110.150; Authentication-Results: mx.google.com; spf=pass (google.com: domain of paulmck@linux.vnet.ibm.com designates 32.97.110.150 as permitted sender) smtp.mail=paulmck@linux.vnet.ibm.com Received: from /spool/local by e32.co.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Wed, 1 Feb 2012 17:44:44 -0700 Received: from d03dlp01.boulder.ibm.com (9.17.202.177) by e32.co.us.ibm.com (192.168.1.132) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Wed, 1 Feb 2012 17:43:46 -0700 Received: from d03relay04.boulder.ibm.com (d03relay04.boulder.ibm.com [9.17.195.106]) by d03dlp01.boulder.ibm.com (Postfix) with ESMTP id 90DC8C40002; Wed, 1 Feb 2012 17:43:45 -0700 (MST) Received: from d03av01.boulder.ibm.com (d03av01.boulder.ibm.com [9.17.195.167]) by d03relay04.boulder.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id q120hUkS036306; Wed, 1 Feb 2012 17:43:30 -0700 Received: from d03av01.boulder.ibm.com (loopback [127.0.0.1]) by d03av01.boulder.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id q120hRck027458; Wed, 1 Feb 2012 17:43:29 -0700 Received: from paulmck-ThinkPad-W500 ([9.47.24.98]) by d03av01.boulder.ibm.com (8.14.4/8.13.1/NCO v10.0 AVin) with ESMTP id q120hQuR027418; Wed, 1 Feb 2012 17:43:26 -0700 Received: by paulmck-ThinkPad-W500 (Postfix, from userid 1000) id D64CFE51F6; Wed, 1 Feb 2012 16:43:25 -0800 (PST) From: "Paul E. McKenney" To: linux-kernel@vger.kernel.org Cc: mingo@elte.hu, laijs@cn.fujitsu.com, dipankar@in.ibm.com, akpm@linux-foundation.org, mathieu.desnoyers@polymtl.ca, josh@joshtriplett.org, niv@us.ibm.com, tglx@linutronix.de, peterz@infradead.org, rostedt@goodmis.org, Valdis.Kletnieks@vt.edu, dhowells@redhat.com, eric.dumazet@gmail.com, darren@dvhart.com, fweisbec@gmail.com, patches@linaro.org, "Paul E. McKenney" , "Paul E. McKenney" , Paul Mundt , Mike Frysinger , linux-sh@vger.kernel.org Subject: [PATCH RFC idle 3/3] sh: Avoid invoking RCU when CPU is idle Date: Wed, 1 Feb 2012 16:43:24 -0800 Message-Id: <1328143404-11038-3-git-send-email-paulmck@linux.vnet.ibm.com> X-Mailer: git-send-email 1.7.8 In-Reply-To: <1328143404-11038-1-git-send-email-paulmck@linux.vnet.ibm.com> References: <20120202004253.GA10946@linux.vnet.ibm.com> <1328143404-11038-1-git-send-email-paulmck@linux.vnet.ibm.com> X-Content-Scanned: Fidelis XPS MAILER x-cbid: 12020200-3270-0000-0000-000003AB116C From: "Paul E. McKenney" The idle loop is a quiscent state for RCU, which means that RCU ignores CPUs that have told RCU that they are idle via rcu_idle_enter(). There are nevertheless quite a few places where idle CPUs use RCU, most commonly indirectly via tracing. This patch fixes these problems for SH. Many of these bugs have been in the kernel for quite some time, but Frederic's recent change now gives warnings. This patch takes the straightforward approach of pushing the rcu_idle_enter()/rcu_idle_exit() pair further down into the core of the idle loop. Signed-off-by: Paul E. McKenney Signed-off-by: Paul E. McKenney Cc: Paul Mundt Cc: Mike Frysinger Cc: linux-sh@vger.kernel.org --- arch/sh/kernel/idle.c | 11 ++++++++--- 1 files changed, 8 insertions(+), 3 deletions(-) diff --git a/arch/sh/kernel/idle.c b/arch/sh/kernel/idle.c index 406508d..d125668 100644 --- a/arch/sh/kernel/idle.c +++ b/arch/sh/kernel/idle.c @@ -53,8 +53,10 @@ static inline int hlt_works(void) static void poll_idle(void) { local_irq_enable(); + rcu_idle_enter(); while (!need_resched()) cpu_relax(); + rcu_idle_exit(); } void default_idle(void) @@ -66,9 +68,14 @@ void default_idle(void) set_bl_bit(); if (!need_resched()) { local_irq_enable(); + rcu_idle_enter(); cpu_sleep(); - } else + rcu_idle_exit(); + } else { local_irq_enable(); + rcu_idle_enter(); + rcu_idle_exit(); + } set_thread_flag(TIF_POLLING_NRFLAG); clear_bl_bit(); @@ -90,7 +97,6 @@ void cpu_idle(void) /* endless idle loop with no priority at all */ while (1) { tick_nohz_idle_enter(); - rcu_idle_enter(); while (!need_resched()) { check_pgt_cache(); @@ -112,7 +118,6 @@ void cpu_idle(void) start_critical_timings(); } - rcu_idle_exit(); tick_nohz_idle_exit(); preempt_enable_no_resched(); schedule();