|
@@ -396,8 +396,8 @@ static void menu_update(struct cpuidle_driver *drv, struct cpuidle_device *dev)
|
|
* power state and occurrence of the wakeup event.
|
|
* power state and occurrence of the wakeup event.
|
|
*
|
|
*
|
|
* If the entered idle state didn't support residency measurements,
|
|
* If the entered idle state didn't support residency measurements,
|
|
- * we are basically lost in the dark how much time passed.
|
|
|
|
- * As a compromise, assume we slept for the whole expected time.
|
|
|
|
|
|
+ * we use them anyway if they are short, and if long,
|
|
|
|
+ * truncate to the whole expected time.
|
|
*
|
|
*
|
|
* Any measured amount of time will include the exit latency.
|
|
* Any measured amount of time will include the exit latency.
|
|
* Since we are interested in when the wakeup begun, not when it
|
|
* Since we are interested in when the wakeup begun, not when it
|
|
@@ -405,22 +405,17 @@ static void menu_update(struct cpuidle_driver *drv, struct cpuidle_device *dev)
|
|
* the measured amount of time is less than the exit latency,
|
|
* the measured amount of time is less than the exit latency,
|
|
* assume the state was never reached and the exit latency is 0.
|
|
* assume the state was never reached and the exit latency is 0.
|
|
*/
|
|
*/
|
|
- if (unlikely(target->flags & CPUIDLE_FLAG_TIME_INVALID)) {
|
|
|
|
- /* Use timer value as is */
|
|
|
|
- measured_us = data->next_timer_us;
|
|
|
|
|
|
|
|
- } else {
|
|
|
|
- /* Use measured value */
|
|
|
|
- measured_us = cpuidle_get_last_residency(dev);
|
|
|
|
|
|
+ /* measured value */
|
|
|
|
+ measured_us = cpuidle_get_last_residency(dev);
|
|
|
|
|
|
- /* Deduct exit latency */
|
|
|
|
- if (measured_us > target->exit_latency)
|
|
|
|
- measured_us -= target->exit_latency;
|
|
|
|
|
|
+ /* Deduct exit latency */
|
|
|
|
+ if (measured_us > target->exit_latency)
|
|
|
|
+ measured_us -= target->exit_latency;
|
|
|
|
|
|
- /* Make sure our coefficients do not exceed unity */
|
|
|
|
- if (measured_us > data->next_timer_us)
|
|
|
|
- measured_us = data->next_timer_us;
|
|
|
|
- }
|
|
|
|
|
|
+ /* Make sure our coefficients do not exceed unity */
|
|
|
|
+ if (measured_us > data->next_timer_us)
|
|
|
|
+ measured_us = data->next_timer_us;
|
|
|
|
|
|
/* Update our correction ratio */
|
|
/* Update our correction ratio */
|
|
new_factor = data->correction_factor[data->bucket];
|
|
new_factor = data->correction_factor[data->bucket];
|