On Mon, Mar 12, 2018 at 10:54:18AM +0100, Rafael J. Wysocki wrote:
> @@ -378,6 +384,26 @@ static int menu_select(struct cpuidle_dr
>       if (idx == -1)
>               idx = 0; /* No states enabled. Must use 0. */
>  
> +     if (drv->states[idx].flags & CPUIDLE_FLAG_POLLING) {
> +             *nohz_ret = false;
> +     } else if (drv->states[idx].target_residency < TICK_USEC_HZ) {
> +             first_idx = idx;
> +             for (i = idx + 1; i < drv->state_count; i++) {
> +                     if (!drv->states[i].disabled &&
> +                         !dev->states_usage[i].disable) {
> +                             first_idx = i;
> +                             break;
> +                     }
                }
> +
> +             /*
> +              * Do not stop the tick if there is at least one more state
> +              * within the tick period range that could be used if longer
> +              * idle duration was predicted.
> +              */
> +             *nohz_ret = !(first_idx > idx &&
> +                           drv->states[first_idx].target_residency < 
> TICK_USEC_HZ);


Why though? That comment only states what it does, but gives no clue as
to why we're doing this. What was wrong with disabling NOHZ if the
selected state (@idx) has shorter target residency.


> +     }
> +
>       data->last_state_idx = idx;
>  
>       return data->last_state_idx;
> 

Reply via email to