Messages in this thread | | | Date | Wed, 14 Mar 2018 13:59:29 +0100 | From | Peter Zijlstra <> | Subject | Re: [RFT][PATCH v4 4/7] cpuidle: Return nohz hint from cpuidle_select() |
| |
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; >
| |