lkml.org 
[lkml]   [2012]   [Feb]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
SubjectRe: [PATCH RFC idle] Make arm, sh, and x86 stop using RCU when idle
On Wed, Feb 01, 2012 at 04:42:53PM -0800, Paul E. McKenney wrote:
> Hello!
>
> RCU's shiny new diagnostics (thank you, Frederic!) for using RCU when idle
> located a few problems in arm, sh, and x86. This patch series contains
> alleged fixes for these problems. And they are real problems -- if RCU
> believes that the CPU is idle, it is ignoring it. Which means that the
> idle CPU can say "rcu_read_lock()" all it like, but there will be no
> useful effect.
>
> I was tempted to break these up, but doing so is bad for bisectability.
>
Presumably the same changes will also need to be reflected in cpuidle?

If so, here's a start:

Signed-off-by: Paul Mundt <lethal@linux-sh.org>

---

diff --git a/drivers/cpuidle/cpuidle.c b/drivers/cpuidle/cpuidle.c
index 59f4261..97adcd4 100644
--- a/drivers/cpuidle/cpuidle.c
+++ b/drivers/cpuidle/cpuidle.c
@@ -18,6 +18,7 @@
#include <linux/ktime.h>
#include <linux/hrtimer.h>
#include <linux/module.h>
+#include <linux/rcupdate.h>
#include <trace/events/power.h>

#include "cpuidle.h"
@@ -89,6 +90,8 @@ int cpuidle_idle_call(void)
next_state = cpuidle_curr_governor->select(drv, dev);
if (need_resched()) {
local_irq_enable();
+ rcu_idle_enter();
+ rcu_idle_exit();
return 0;
}

@@ -96,9 +99,11 @@ int cpuidle_idle_call(void)

trace_power_start(POWER_CSTATE, next_state, dev->cpu);
trace_cpu_idle(next_state, dev->cpu);
+ rcu_idle_enter();

entered_state = target_state->enter(dev, drv, next_state);

+ rcu_idle_exit();
trace_power_end(dev->cpu);
trace_cpu_idle(PWR_EVENT_EXIT, dev->cpu);

@@ -173,8 +178,10 @@ static int poll_idle(struct cpuidle_device *dev,

t1 = ktime_get();
local_irq_enable();
+ rcu_idle_enter();
while (!need_resched())
cpu_relax();
+ rcu_idle_exit();

t2 = ktime_get();
diff = ktime_to_us(ktime_sub(t2, t1));

\
 
 \ /
  Last update: 2012-02-02 03:33    [W:0.313 / U:0.384 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site