Commit ae0afb4f authored by Rafael J. Wysocki's avatar Rafael J. Wysocki

suspend-to-idle: Prevent RCU from complaining about tick_freeze()

Put tick_freeze() under RCU_NONIDLE() to prevent RCU from complaining
about suspicious RCU usage in idle by trace_suspend_resume() called
from there.

While at it, fix a comment related to another usage of RCU_NONIDLE()
in enter_freeze_proper().
Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
Reviewed-by: default avatarPaul E. McKenney <paulmck@linux.vnet.ibm.com>
parent d770e558
...@@ -112,7 +112,12 @@ int cpuidle_find_deepest_state(struct cpuidle_driver *drv, ...@@ -112,7 +112,12 @@ int cpuidle_find_deepest_state(struct cpuidle_driver *drv,
static void enter_freeze_proper(struct cpuidle_driver *drv, static void enter_freeze_proper(struct cpuidle_driver *drv,
struct cpuidle_device *dev, int index) struct cpuidle_device *dev, int index)
{ {
tick_freeze(); /*
* trace_suspend_resume() called by tick_freeze() for the last CPU
* executing it contains RCU usage regarded as invalid in the idle
* context, so tell RCU about that.
*/
RCU_NONIDLE(tick_freeze());
/* /*
* The state used here cannot be a "coupled" one, because the "coupled" * The state used here cannot be a "coupled" one, because the "coupled"
* cpuidle mechanism enables interrupts and doing that with timekeeping * cpuidle mechanism enables interrupts and doing that with timekeeping
...@@ -122,7 +127,7 @@ static void enter_freeze_proper(struct cpuidle_driver *drv, ...@@ -122,7 +127,7 @@ static void enter_freeze_proper(struct cpuidle_driver *drv,
WARN_ON(!irqs_disabled()); WARN_ON(!irqs_disabled());
/* /*
* timekeeping_resume() that will be called by tick_unfreeze() for the * timekeeping_resume() that will be called by tick_unfreeze() for the
* last CPU executing it calls functions containing RCU read-side * first CPU executing it calls functions containing RCU read-side
* critical sections, so tell RCU about that. * critical sections, so tell RCU about that.
*/ */
RCU_NONIDLE(tick_unfreeze()); RCU_NONIDLE(tick_unfreeze());
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment