On Fri, Dec 14, 2018 at 09:15:08AM -0800, Suren Baghdasaryan wrote: > @@ -358,28 +526,23 @@ static void psi_update_work(struct work_struct *work) > { > struct delayed_work *dwork; > struct psi_group *group; > + u64 next_update; > > dwork = to_delayed_work(work); > group = container_of(dwork, struct psi_group, clock_work); > > /* > + * Periodically fold the per-cpu times and feed samples > + * into the running averages. > */ > > + psi_update(group); > > + /* Calculate closest update time */ > + next_update = min(group->polling_next_update, > + group->avg_next_update); > + schedule_delayed_work(dwork, min(PSI_FREQ, > + nsecs_to_jiffies(next_update - sched_clock()) + 1)); See, so I don't at _all_ like how there is no idle option.. > }