Skip to content

Commit

Permalink
Merge branch 'pm-cpuidle'
Browse files Browse the repository at this point in the history
* pm-cpuidle:
  ACPI: processor: Fix build for ARCH_APICTIMER_STOPS_ON_C3 unset
  cpuidle: Drop misleading comments about RCU usage
  cpuidle: psci: Fix suspicious RCU usage
  rcu/tree: Export rcu_idle_{enter,exit} to modules
  • Loading branch information
Rafael J. Wysocki committed Sep 25, 2020
2 parents 1b0e6e2 + 9559212 commit 6040723
Show file tree
Hide file tree
Showing 4 changed files with 5 additions and 12 deletions.
1 change: 1 addition & 0 deletions drivers/acpi/processor_idle.c
Original file line number Diff line number Diff line change
Expand Up @@ -176,6 +176,7 @@ static void lapic_timer_propagate_broadcast(struct acpi_processor *pr) { }
static bool lapic_timer_needs_broadcast(struct acpi_processor *pr,
struct acpi_processor_cx *cx)
{
return false;
}

#endif
Expand Down
4 changes: 2 additions & 2 deletions drivers/cpuidle/cpuidle-psci.c
Original file line number Diff line number Diff line change
Expand Up @@ -66,15 +66,15 @@ static int psci_enter_domain_idle_state(struct cpuidle_device *dev,
return -1;

/* Do runtime PM to manage a hierarchical CPU toplogy. */
pm_runtime_put_sync_suspend(pd_dev);
RCU_NONIDLE(pm_runtime_put_sync_suspend(pd_dev));

state = psci_get_domain_state();
if (!state)
state = states[idx];

ret = psci_cpu_suspend_enter(state) ? -1 : idx;

pm_runtime_get_sync(pd_dev);
RCU_NONIDLE(pm_runtime_get_sync(pd_dev));

cpu_pm_exit();

Expand Down
10 changes: 0 additions & 10 deletions drivers/cpuidle/cpuidle.c
Original file line number Diff line number Diff line change
Expand Up @@ -142,11 +142,6 @@ static void enter_s2idle_proper(struct cpuidle_driver *drv,

time_start = ns_to_ktime(local_clock());

/*
* 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.
*/
tick_freeze();
/*
* The state used here cannot be a "coupled" one, because the "coupled"
Expand All @@ -159,11 +154,6 @@ static void enter_s2idle_proper(struct cpuidle_driver *drv,
target_state->enter_s2idle(dev, drv, index);
if (WARN_ON_ONCE(!irqs_disabled()))
local_irq_disable();
/*
* timekeeping_resume() that will be called by tick_unfreeze() for the
* first CPU executing it calls functions containing RCU read-side
* critical sections, so tell RCU about that.
*/
if (!(target_state->flags & CPUIDLE_FLAG_RCU_IDLE))
rcu_idle_exit();
tick_unfreeze();
Expand Down
2 changes: 2 additions & 0 deletions kernel/rcu/tree.c
Original file line number Diff line number Diff line change
Expand Up @@ -673,6 +673,7 @@ void rcu_idle_enter(void)
lockdep_assert_irqs_disabled();
rcu_eqs_enter(false);
}
EXPORT_SYMBOL_GPL(rcu_idle_enter);

#ifdef CONFIG_NO_HZ_FULL
/**
Expand Down Expand Up @@ -886,6 +887,7 @@ void rcu_idle_exit(void)
rcu_eqs_exit(false);
local_irq_restore(flags);
}
EXPORT_SYMBOL_GPL(rcu_idle_exit);

#ifdef CONFIG_NO_HZ_FULL
/**
Expand Down

0 comments on commit 6040723

Please sign in to comment.