On Thu, Aug 29, 2019 at 7:24 PM Marcelo Tosatti <mtosatti@xxxxxxxxxx> wrote: > > On Thu, Aug 29, 2019 at 06:16:05PM +0100, Joao Martins wrote: > > On 8/29/19 4:10 PM, Joao Martins wrote: > > > When cpus != maxcpus cpuidle-haltpoll will fail to register all vcpus > > > past the online ones and thus fail to register the idle driver. > > > This is because cpuidle_add_sysfs() will return with -ENODEV as a > > > consequence from get_cpu_device() return no device for a non-existing > > > CPU. > > > > > > Instead switch to cpuidle_register_driver() and manually register each > > > of the present cpus through cpuhp_setup_state() callback and future > > > ones that get onlined. This mimmics similar logic that intel_idle does. > > > > > > Fixes: fa86ee90eb11 ("add cpuidle-haltpoll driver") > > > Signed-off-by: Joao Martins <joao.m.martins@xxxxxxxxxx> > > > Signed-off-by: Boris Ostrovsky <boris.ostrovsky@xxxxxxxxxx> > > > --- > > > > While testing the above, I found out another issue on the haltpoll series. > > But I am not sure what is best suited to cpuidle framework, hence requesting > > some advise if below is a reasonable solution or something else is preferred. > > > > Essentially after haltpoll governor got introduced and regardless of the cpuidle > > driver the default governor is gonna be haltpoll for a guest (given haltpoll > > governor doesn't get registered for baremetal). > > Right. > > > Right now, for a KVM guest, the > > idle governors have these ratings: > > > > * ladder -> 10 > > * teo -> 19 > > * menu -> 20 > > * haltpoll -> 21 > > * ladder + nohz=off -> 25 > > Yes. PowerPC KVM guests crash currently due to the use of the haltpoll > governor (have a patch in my queue to fix this, but your solution > embraces more cases). > > > When a guest is booted with MWAIT and intel_idle is probed and sucessfully > > registered, we will end up with a haltpoll governor being used as opposed to > > 'menu' (which used to be the default case). This would prevent IIUC that other > > C-states get used other than poll_state (state 0) and state 1. > > > > Given that haltpoll governor is largely only useful with a cpuidle-haltpoll > > it doesn't look reasonable to be the default? What about using haltpoll governor > > as default when haltpoll idle driver registers or modloads. > > > > My idea to achieve the above would be to decrease the rating to 9 (before the > > lowest rated governor) and retain old defaults before haltpoll. Then we would > > allow a cpuidle driver to define a preferred governor to switch on idle driver > > registration. Naturally all of would be ignored if overidden by > > cpuidle.governor=. > > > > The diff below the scissors line is an example of that. > > > > Thoughts? > > Works for me. Rafael? It works for me too, basically, except that I would rename cpuidle_default_governor in the patch to cpuidle_prev_governor.