mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-16 01:54:00 +00:00
Merge branch 'pm-cpuidle'
* 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
This commit is contained in:
commit
6040723009
@ -176,6 +176,7 @@ static void lapic_timer_propagate_broadcast(struct acpi_processor *pr) { }
|
|||||||
static bool lapic_timer_needs_broadcast(struct acpi_processor *pr,
|
static bool lapic_timer_needs_broadcast(struct acpi_processor *pr,
|
||||||
struct acpi_processor_cx *cx)
|
struct acpi_processor_cx *cx)
|
||||||
{
|
{
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -66,7 +66,7 @@ static int psci_enter_domain_idle_state(struct cpuidle_device *dev,
|
|||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
/* Do runtime PM to manage a hierarchical CPU toplogy. */
|
/* 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();
|
state = psci_get_domain_state();
|
||||||
if (!state)
|
if (!state)
|
||||||
@ -74,7 +74,7 @@ static int psci_enter_domain_idle_state(struct cpuidle_device *dev,
|
|||||||
|
|
||||||
ret = psci_cpu_suspend_enter(state) ? -1 : 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();
|
cpu_pm_exit();
|
||||||
|
|
||||||
|
@ -142,11 +142,6 @@ static void enter_s2idle_proper(struct cpuidle_driver *drv,
|
|||||||
|
|
||||||
time_start = ns_to_ktime(local_clock());
|
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();
|
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"
|
||||||
@ -159,11 +154,6 @@ static void enter_s2idle_proper(struct cpuidle_driver *drv,
|
|||||||
target_state->enter_s2idle(dev, drv, index);
|
target_state->enter_s2idle(dev, drv, index);
|
||||||
if (WARN_ON_ONCE(!irqs_disabled()))
|
if (WARN_ON_ONCE(!irqs_disabled()))
|
||||||
local_irq_disable();
|
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))
|
if (!(target_state->flags & CPUIDLE_FLAG_RCU_IDLE))
|
||||||
rcu_idle_exit();
|
rcu_idle_exit();
|
||||||
tick_unfreeze();
|
tick_unfreeze();
|
||||||
|
@ -673,6 +673,7 @@ void rcu_idle_enter(void)
|
|||||||
lockdep_assert_irqs_disabled();
|
lockdep_assert_irqs_disabled();
|
||||||
rcu_eqs_enter(false);
|
rcu_eqs_enter(false);
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(rcu_idle_enter);
|
||||||
|
|
||||||
#ifdef CONFIG_NO_HZ_FULL
|
#ifdef CONFIG_NO_HZ_FULL
|
||||||
/**
|
/**
|
||||||
@ -886,6 +887,7 @@ void rcu_idle_exit(void)
|
|||||||
rcu_eqs_exit(false);
|
rcu_eqs_exit(false);
|
||||||
local_irq_restore(flags);
|
local_irq_restore(flags);
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(rcu_idle_exit);
|
||||||
|
|
||||||
#ifdef CONFIG_NO_HZ_FULL
|
#ifdef CONFIG_NO_HZ_FULL
|
||||||
/**
|
/**
|
||||||
|
Loading…
x
Reference in New Issue
Block a user