mirror of
https://github.com/rd-stuffs/msm-4.14.git
synced 2025-02-20 11:45:48 +08:00
Revert "cpuidle: Hardcode stop_tick
"
This reverts commit 05f9f1909535fc539e2639683f3d70f6dfc0bbc9. Change-Id: I9d179c49a6333c7786985465edb8036636621870 Signed-off-by: Richard Raya <rdxzv.dev@gmail.com>
This commit is contained in:
parent
80424c6f0d
commit
2d15a0306b
@ -283,13 +283,18 @@ int cpuidle_enter_state(struct cpuidle_device *dev, struct cpuidle_driver *drv,
|
||||
*
|
||||
* @drv: the cpuidle driver
|
||||
* @dev: the cpuidle device
|
||||
* @stop_tick: indication on whether or not to stop the tick
|
||||
*
|
||||
* Returns the index of the idle state. The return value must not be negative.
|
||||
*
|
||||
* The memory location pointed to by @stop_tick is expected to be written the
|
||||
* 'false' boolean value if the scheduler tick should not be stopped before
|
||||
* entering the returned state.
|
||||
*/
|
||||
int cpuidle_select(struct cpuidle_driver *drv, struct cpuidle_device *dev)
|
||||
int cpuidle_select(struct cpuidle_driver *drv, struct cpuidle_device *dev,
|
||||
bool *stop_tick)
|
||||
{
|
||||
return cpuidle_curr_governor->select(drv, dev);
|
||||
return cpuidle_curr_governor->select(drv, dev, stop_tick);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -281,8 +281,10 @@ again:
|
||||
* menu_select - selects the next idle state to enter
|
||||
* @drv: cpuidle driver containing state data
|
||||
* @dev: the CPU
|
||||
* @stop_tick: indication on whether or not to stop the tick
|
||||
*/
|
||||
static int menu_select(struct cpuidle_driver *drv, struct cpuidle_device *dev)
|
||||
static int menu_select(struct cpuidle_driver *drv, struct cpuidle_device *dev,
|
||||
bool *stop_tick)
|
||||
{
|
||||
struct menu_device *data = this_cpu_ptr(&menu_devices);
|
||||
struct device *device = get_cpu_device(dev->cpu);
|
||||
@ -307,6 +309,7 @@ static int menu_select(struct cpuidle_driver *drv, struct cpuidle_device *dev)
|
||||
|
||||
/* Special case when user has set very strict latency requirement */
|
||||
if (unlikely(latency_req == 0)) {
|
||||
*stop_tick = false;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -436,6 +439,8 @@ static int menu_select(struct cpuidle_driver *drv, struct cpuidle_device *dev)
|
||||
expected_interval < TICK_USEC) && !tick_nohz_tick_stopped()) {
|
||||
unsigned int delta_next_us = ktime_to_us(delta_next);
|
||||
|
||||
*stop_tick = false;
|
||||
|
||||
if (idx > 0 && drv->states[idx].target_residency > delta_next_us) {
|
||||
/*
|
||||
* The tick is not going to be stopped and the target
|
||||
|
@ -1002,7 +1002,7 @@ static bool psci_enter_sleep(struct lpm_cluster *cluster,
|
||||
#endif
|
||||
|
||||
static int lpm_cpuidle_select(struct cpuidle_driver *drv,
|
||||
struct cpuidle_device *dev)
|
||||
struct cpuidle_device *dev, bool *stop_tick)
|
||||
{
|
||||
struct lpm_cluster *cluster = per_cpu(cpu_cluster, dev->cpu);
|
||||
int idx;
|
||||
|
@ -714,7 +714,7 @@ static bool psci_enter_sleep(struct lpm_cpu *cpu, int idx, bool from_idle)
|
||||
}
|
||||
|
||||
static int lpm_cpuidle_select(struct cpuidle_driver *drv,
|
||||
struct cpuidle_device *dev)
|
||||
struct cpuidle_device *dev, bool *stop_tick)
|
||||
{
|
||||
struct lpm_cpu *cpu = per_cpu(cpu_lpm, dev->cpu);
|
||||
|
||||
|
@ -131,7 +131,8 @@ extern bool cpuidle_not_available(struct cpuidle_driver *drv,
|
||||
struct cpuidle_device *dev);
|
||||
|
||||
extern int cpuidle_select(struct cpuidle_driver *drv,
|
||||
struct cpuidle_device *dev);
|
||||
struct cpuidle_device *dev,
|
||||
bool *stop_tick);
|
||||
extern int cpuidle_enter(struct cpuidle_driver *drv,
|
||||
struct cpuidle_device *dev, int index);
|
||||
extern void cpuidle_reflect(struct cpuidle_device *dev, int index);
|
||||
@ -163,7 +164,7 @@ static inline bool cpuidle_not_available(struct cpuidle_driver *drv,
|
||||
struct cpuidle_device *dev)
|
||||
{return true; }
|
||||
static inline int cpuidle_select(struct cpuidle_driver *drv,
|
||||
struct cpuidle_device *dev)
|
||||
struct cpuidle_device *dev, bool *stop_tick)
|
||||
{return -ENODEV; }
|
||||
static inline int cpuidle_enter(struct cpuidle_driver *drv,
|
||||
struct cpuidle_device *dev, int index)
|
||||
@ -246,7 +247,8 @@ struct cpuidle_governor {
|
||||
struct cpuidle_device *dev);
|
||||
|
||||
int (*select) (struct cpuidle_driver *drv,
|
||||
struct cpuidle_device *dev);
|
||||
struct cpuidle_device *dev,
|
||||
bool *stop_tick);
|
||||
void (*reflect) (struct cpuidle_device *dev, int index);
|
||||
};
|
||||
|
||||
|
@ -189,13 +189,17 @@ static void cpuidle_idle_call(void)
|
||||
next_state = cpuidle_find_deepest_state(drv, dev);
|
||||
call_cpuidle(drv, dev, next_state);
|
||||
} else {
|
||||
bool stop_tick = true;
|
||||
|
||||
/*
|
||||
* Ask the cpuidle framework to choose a convenient idle state.
|
||||
*/
|
||||
next_state = cpuidle_select(drv, dev);
|
||||
next_state = cpuidle_select(drv, dev, &stop_tick);
|
||||
|
||||
tick_nohz_idle_stop_tick();
|
||||
if (stop_tick || tick_nohz_tick_stopped())
|
||||
tick_nohz_idle_stop_tick();
|
||||
else
|
||||
tick_nohz_idle_retain_tick();
|
||||
|
||||
rcu_idle_enter();
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user