[PATCH RFC idle 2/3] arm: Avoid invoking RCU when CPU is idle
From: rostedt@goodmis.org (Steven Rostedt)
Date: 2012-02-06 19:32:54
Also in:
linux-omap, linux-samsung-soc
On Sat, 2012-02-04 at 06:21 -0800, Paul E. McKenney wrote:
On Fri, Feb 03, 2012 at 02:36:27PM -0500, Steven Rostedt wrote:
quoted
Note, this race is even made harder to hit, because due to the static branch that controls whether this gets called, will be off if no tracepoints are attached. So the race can only happen after at least one tracepoint is active.I agree that this race is hard to hit when running Linux on bare metal. But consider a Linux kernel running as a guest OS. Then the host might preempt the guest in the middle of a tracepoint. Then from the guest OS's viewpoint, that VCPU has just stopped, possibly for a very long time -- easily long enough for all the other VCPUs to pass through quiescent states. And the guest OS is ignoring that VCPU, so a too-short grace period could easily happen in this scenario.
But there's one thing that you forget. The race only happens on adding or removing of the tracepoint, which requires human intervention. That is, this gap needs to exist when a human starts or stops tracing on the guest. For the race to occur, the one guest CPU has to preempt at that exact location, and then be busy doing other things as a user on the guest enables or disables tracing. For the enabled part, something else had to already be tracing that same tracepoint (which seldom happens, and only if the users chooses to (root user)). Otherwise, the race only exists on removing the tracepoint. OK, I'll update statement for running this on a guest. It is less likely to trigger than me winning the lottery, becoming president of the United states, *or* curing cancer. Not all together, just one of the above ;-) -- Steve