Commit 03dba278 authored by Rafael J. Wysocki's avatar Rafael J. Wysocki
Browse files

cpuidle: menu: Replace data->predicted_us with local variable



The predicted_us field in struct menu_device is only accessed in
menu_select(), so replace it with a local variable in that function.

With that, stop using expected_interval instead of predicted_us to
store the new predicted idle duration value if it is set to the
selected state's target residency which is quite confusing.

Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
Acked-by: default avatarDaniel Lezcano <daniel.lezcano@linaro.org>
parent 7037b43e
Loading
Loading
Loading
Loading
+11 −12
Original line number Diff line number Diff line
@@ -124,7 +124,6 @@ struct menu_device {
	int             tick_wakeup;

	unsigned int	next_timer_us;
	unsigned int	predicted_us;
	unsigned int	bucket;
	unsigned int	correction_factor[BUCKETS];
	unsigned int	intervals[INTERVALS];
@@ -290,6 +289,7 @@ static int menu_select(struct cpuidle_driver *drv, struct cpuidle_device *dev,
	int idx;
	unsigned int interactivity_req;
	unsigned int expected_interval;
	unsigned int predicted_us;
	unsigned long nr_iowaiters, cpu_load;
	ktime_t delta_next;

@@ -315,7 +315,7 @@ static int menu_select(struct cpuidle_driver *drv, struct cpuidle_device *dev,
	 * operands are 32 bits.
	 * Make sure to round up for half microseconds.
	 */
	data->predicted_us = DIV_ROUND_CLOSEST_ULL((uint64_t)data->next_timer_us *
	predicted_us = DIV_ROUND_CLOSEST_ULL((uint64_t)data->next_timer_us *
					 data->correction_factor[data->bucket],
					 RESOLUTION * DECAY);

@@ -341,7 +341,7 @@ static int menu_select(struct cpuidle_driver *drv, struct cpuidle_device *dev,
	/*
	 * Use the lowest expected idle interval to pick the idle state.
	 */
	data->predicted_us = min(data->predicted_us, expected_interval);
	predicted_us = min(predicted_us, expected_interval);

	if (tick_nohz_tick_stopped()) {
		/*
@@ -352,19 +352,18 @@ static int menu_select(struct cpuidle_driver *drv, struct cpuidle_device *dev,
		 * the known time till the closest timer event for the idle
		 * state selection.
		 */
		if (data->predicted_us < TICK_USEC)
			data->predicted_us = ktime_to_us(delta_next);
		if (predicted_us < TICK_USEC)
			predicted_us = ktime_to_us(delta_next);
	} else {
		/*
		 * Use the performance multiplier and the user-configurable
		 * latency_req to determine the maximum exit latency.
		 */
		interactivity_req = data->predicted_us / performance_multiplier(nr_iowaiters, cpu_load);
		interactivity_req = predicted_us / performance_multiplier(nr_iowaiters, cpu_load);
		if (latency_req > interactivity_req)
			latency_req = interactivity_req;
	}

	expected_interval = data->predicted_us;
	/*
	 * Find the idle state with the lowest power while satisfying
	 * our constraints.
@@ -378,8 +377,8 @@ static int menu_select(struct cpuidle_driver *drv, struct cpuidle_device *dev,
			continue;
		if (idx == -1)
			idx = i; /* first enabled state */
		if (s->target_residency > data->predicted_us) {
			if (data->predicted_us < TICK_USEC)
		if (s->target_residency > predicted_us) {
			if (predicted_us < TICK_USEC)
				break;

			if (!tick_nohz_tick_stopped()) {
@@ -389,7 +388,7 @@ static int menu_select(struct cpuidle_driver *drv, struct cpuidle_device *dev,
				 * tick in that case and let the governor run
				 * again in the next iteration of the loop.
				 */
				expected_interval = drv->states[idx].target_residency;
				predicted_us = drv->states[idx].target_residency;
				break;
			}

@@ -412,7 +411,7 @@ static int menu_select(struct cpuidle_driver *drv, struct cpuidle_device *dev,
			 * expected idle duration so that the tick is retained
			 * as long as that target residency is low enough.
			 */
			expected_interval = drv->states[idx].target_residency;
			predicted_us = drv->states[idx].target_residency;
			break;
		}
		idx = i;
@@ -426,7 +425,7 @@ static int menu_select(struct cpuidle_driver *drv, struct cpuidle_device *dev,
	 * expected idle duration is shorter than the tick period length.
	 */
	if (((drv->states[idx].flags & CPUIDLE_FLAG_POLLING) ||
	     expected_interval < TICK_USEC) && !tick_nohz_tick_stopped()) {
	     predicted_us < TICK_USEC) && !tick_nohz_tick_stopped()) {
		unsigned int delta_next_us = ktime_to_us(delta_next);

		*stop_tick = false;