Have a single function for this, rather than doing the same in half a dozen places. Signed-off-by: Jan Beulich --- a/xen/arch/x86/cpu/amd.c +++ b/xen/arch/x86/cpu/amd.c @@ -240,13 +240,18 @@ int cpu_has_amd_erratum(const struct cpu * amd_flush_filter={on,off}. Forcibly Enable or disable the TLB flush * filter on AMD 64-bit processors. */ -static int flush_filter_force; -static void flush_filter(char *s) +static int __read_mostly flush_filter_force; +static void __init flush_filter(char *s) { - if (!strcmp(s, "off")) + switch (parse_bool(s)) + { + case 0: flush_filter_force = -1; - if (!strcmp(s, "on")) + break; + case 1: flush_filter_force = 1; + break; + } } custom_param("amd_flush_filter", flush_filter); --- a/xen/arch/x86/setup.c +++ b/xen/arch/x86/setup.c @@ -113,7 +113,7 @@ static void __init parse_acpi_param(char safe_strcpy(acpi_param, s); /* Interpret the parameter for use within Xen. */ - if ( !strcmp(s, "off") ) + if ( !parse_bool(s) ) { disable_acpi(); } --- a/xen/arch/x86/x86_64/mmconfig-shared.c +++ b/xen/arch/x86/x86_64/mmconfig-shared.c @@ -37,8 +37,7 @@ static void __init parse_mmcfg(char *s) if ( ss ) *ss = '\0'; - if ( !strcmp(s, "off") || !strcmp(s, "no") || !strcmp(s, "false") || - !strcmp(s, "0") || !strcmp(s, "disable") ) + if ( !parse_bool(s) ) pci_probe &= ~PCI_PROBE_MMCONF; else if ( !strcmp(s, "amd_fam10") || !strcmp(s, "amd-fam10") ) pci_probe |= PCI_CHECK_ENABLE_AMD_MMCONF; --- a/xen/common/kernel.c +++ b/xen/common/kernel.c @@ -26,7 +26,7 @@ int tainted; xen_commandline_t saved_cmdline; -void cmdline_parse(char *cmdline) +void __init cmdline_parse(char *cmdline) { char opt[100], *optval, *optkey, *q; const char *p = cmdline; @@ -83,10 +83,7 @@ void cmdline_parse(char *cmdline) break; case OPT_BOOL: case OPT_INVBOOL: - if ( !strcmp("no", optval) || - !strcmp("off", optval) || - !strcmp("false", optval) || - !strcmp("0", optval) ) + if ( !parse_bool(optval) ) bool_assert = !bool_assert; if ( param->type == OPT_INVBOOL ) bool_assert = !bool_assert; @@ -115,6 +112,25 @@ void cmdline_parse(char *cmdline) } } +int __init parse_bool(const char *s) +{ + if ( !strcmp("no", s) || + !strcmp("off", s) || + !strcmp("false", s) || + !strcmp("disable", s) || + !strcmp("0", s) ) + return 0; + + if ( !strcmp("yes", s) || + !strcmp("on", s) || + !strcmp("true", s) || + !strcmp("enable", s) || + !strcmp("1", s) ) + return 1; + + return -1; +} + /** * print_tainted - return a string to represent the kernel taint state. * --- a/xen/drivers/passthrough/iommu.c +++ b/xen/drivers/passthrough/iommu.c @@ -59,8 +59,7 @@ static void __init parse_iommu_param(cha if ( ss ) *ss = '\0'; - if ( !strcmp(s, "off") || !strcmp(s, "no") || !strcmp(s, "false") || - !strcmp(s, "0") || !strcmp(s, "disable") ) + if ( !parse_bool(s) ) iommu_enabled = 0; else if ( !strcmp(s, "force") || !strcmp(s, "required") ) force_iommu = 1; --- a/xen/drivers/passthrough/vtd/x86/ats.c +++ b/xen/drivers/passthrough/vtd/x86/ats.c @@ -58,13 +58,15 @@ static void __init parse_ats_param(char if ( ss ) *ss = '\0'; - if ( !strcmp(s, "off") || !strcmp(s, "no") || !strcmp(s, "false") || - !strcmp(s, "0") || !strcmp(s, "disable") ) + switch ( parse_bool(s) ) + { + case 0: ats_enabled = 0; - - if ( !strcmp(s, "on") || !strcmp(s, "yes") || !strcmp(s, "true") || - !strcmp(s, "1") || !strcmp(s, "enable") ) + break; + case 1: ats_enabled = 1; + break; + } s = ss + 1; } while ( ss ); --- a/xen/include/xen/lib.h +++ b/xen/include/xen/lib.h @@ -57,6 +57,7 @@ do { struct domain; void cmdline_parse(char *cmdline); +int parse_bool(const char *s); /*#define DEBUG_TRACE_DUMP*/ #ifdef DEBUG_TRACE_DUMP