On 8/29/19 6:42 PM, Daniel Lezcano wrote: > On 29/08/2019 19:16, 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 now, for a KVM guest, the >> idle governors have these ratings: >> >> * ladder -> 10 >> * teo -> 19 >> * menu -> 20 >> * haltpoll -> 21 >> * ladder + nohz=off -> 25 >> >> 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 modload. > > Are the guest and host kernel the same? IOW compiled with the same > kernel config? > You just need to toggle this (regardless off CONFIG_HALTPOLL_CPUIDLE): CONFIG_CPU_IDLE_GOV_HALTPOLL=y And *if you are a KVM guest* it will be the default (unless using nohz=off in which case ladder gets the highest rating -- see the listing right above). Host will just behave differently because the haltpoll governor is checking if it is running as kvm guest, and only registering in that case. > >> 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=. >> > > > >