cpufreq: allow ordinary boolean options to be passed on the command line I was quite surprised to find "cpufreq=off" not doing what one would expect it to do. Fix this. Signed-off-by: Jan Beulich --- a/docs/misc/xen-command-line.markdown +++ b/docs/misc/xen-command-line.markdown @@ -391,11 +391,12 @@ If set, force use of the performance cou available support. ### cpufreq -> `= dom0-kernel | none | xen[,[powersave|performance|ondemand|userspace][,][,[][,[verbose]]]]` +> `= none | {{ | xen } [:[powersave|performance|ondemand|userspace][,][,[][,[verbose]]]]} | dom0-kernel` > Default: `xen` -Indicate where the responsibility for driving power states lies. +Indicate where the responsibility for driving power states lies. Note that the +choice of `dom0-kernel` is deprecated and not supported by all Dom0 kernels. * Default governor policy is ondemand. * `` and `` are integers which represent max and min processor frequencies --- a/xen/drivers/cpufreq/cpufreq.c +++ b/xen/drivers/cpufreq/cpufreq.c @@ -64,9 +64,14 @@ enum cpufreq_controller cpufreq_controll static void __init setup_cpufreq_option(char *str) { - char *arg; + char *arg = strpbrk(str, ",:"); + int choice; - if ( !strcmp(str, "dom0-kernel") ) + if ( arg ) + *arg++ = '\0'; + choice = parse_bool(str); + + if ( choice < 0 && !strcmp(str, "dom0-kernel") ) { xen_processor_pmbits &= ~XEN_PROCESSOR_PM_PX; cpufreq_controller = FREQCTL_dom0_kernel; @@ -74,19 +79,20 @@ static void __init setup_cpufreq_option( return; } - if ( !strcmp(str, "none") ) + if ( choice == 0 || !strcmp(str, "none") ) { xen_processor_pmbits &= ~XEN_PROCESSOR_PM_PX; cpufreq_controller = FREQCTL_none; return; } - if ( (arg = strpbrk(str, ",:")) != NULL ) - *arg++ = '\0'; - - if ( !strcmp(str, "xen") ) + if ( choice > 0 || !strcmp(str, "xen") ) + { + xen_processor_pmbits |= XEN_PROCESSOR_PM_PX; + cpufreq_controller = FREQCTL_xen; if ( arg && *arg ) cpufreq_cmdline_parse(arg); + } } custom_param("cpufreq", setup_cpufreq_option);