Commit 4bd2221f authored by Rafael J. Wysocki's avatar Rafael J. Wysocki
Browse files

cpuidle: governors: teo: Avoid selecting states with zero-size bins



If the last two enabled idle states have the same target residency which
is at least equal to TICK_NSEC, teo may select the next-to-last one even
though the size of that state's bin is 0, which is confusing.

Prevent that from happening by adding a target residency check to the
relevant code path.

Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
Reviewed-by: default avatarChristian Loehle <christian.loehle@arm.com>
[ rjw: Fixed a typo in the changelog ]
Link: https://patch.msgid.link/3033265.e9J7NaK4W3@rafael.j.wysocki


Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
parent 80606f4e
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -388,6 +388,15 @@ static int teo_select(struct cpuidle_driver *drv, struct cpuidle_device *dev,
			while (min_idx < idx &&
			       drv->states[min_idx].target_residency_ns < TICK_NSEC)
				min_idx++;

			/*
			 * Avoid selecting a state with a lower index, but with
			 * the same target residency as the current candidate
			 * one.
			 */
			if (drv->states[min_idx].target_residency_ns ==
					drv->states[idx].target_residency_ns)
				goto constraint;
		}

		/*
@@ -410,6 +419,7 @@ static int teo_select(struct cpuidle_driver *drv, struct cpuidle_device *dev,
		}
	}

constraint:
	/*
	 * If there is a latency constraint, it may be necessary to select an
	 * idle state shallower than the current candidate one.