diff options
author | Keir Fraser <keir@xen.org> | 2010-12-24 10:10:45 +0000 |
---|---|---|
committer | Keir Fraser <keir@xen.org> | 2010-12-24 10:10:45 +0000 |
commit | 5814ca6b9c845e77c22fb034e8e7a9b35fe6b59a (patch) | |
tree | 2537340f7328351fb2f462d325a89c42befffc3d /xen/common/kernel.c | |
parent | 53ecc28f0e91051cf7874012ea13a6899910b105 (diff) | |
download | xen-5814ca6b9c845e77c22fb034e8e7a9b35fe6b59a.tar.gz xen-5814ca6b9c845e77c22fb034e8e7a9b35fe6b59a.tar.bz2 xen-5814ca6b9c845e77c22fb034e8e7a9b35fe6b59a.zip |
Use bool_t for various boolean variables
... decreasing cache footprint. As a prerequisite this requires making
cmdline_parse() a little more flexible.
Also remove a few variables altogether, and adjust sections
annotations for several others.
Signed-off-by: Jan Beulich <jbeulich@novell.com>
Signed-off-by: Keir Fraser <keir@xen.org>
Diffstat (limited to 'xen/common/kernel.c')
-rw-r--r-- | xen/common/kernel.c | 53 |
1 files changed, 35 insertions, 18 deletions
diff --git a/xen/common/kernel.c b/xen/common/kernel.c index 2a1aabfc60..c061a0d838 100644 --- a/xen/common/kernel.c +++ b/xen/common/kernel.c @@ -26,6 +26,28 @@ int tainted; xen_commandline_t saved_cmdline; +static void __init assign_integer_param( + struct kernel_param *param, uint64_t val) +{ + switch ( param->len ) + { + case sizeof(uint8_t): + *(uint8_t *)param->var = val; + break; + case sizeof(uint16_t): + *(uint16_t *)param->var = val; + break; + case sizeof(uint32_t): + *(uint32_t *)param->var = val; + break; + case sizeof(uint64_t): + *(uint64_t *)param->var = val; + break; + default: + BUG(); + } +} + void __init cmdline_parse(char *cmdline) { char opt[100], *optval, *optkey, *q; @@ -79,34 +101,29 @@ void __init cmdline_parse(char *cmdline) strlcpy(param->var, optval, param->len); break; case OPT_UINT: - *(unsigned int *)param->var = simple_strtol(optval, NULL, 0); + assign_integer_param( + param, + simple_strtoll(optval, NULL, 0)); break; case OPT_BOOL: case OPT_INVBOOL: if ( !parse_bool(optval) ) bool_assert = !bool_assert; - if ( param->type == OPT_INVBOOL ) - bool_assert = !bool_assert; - *(int *)param->var = bool_assert; + assign_integer_param( + param, + (param->type == OPT_BOOL) == bool_assert); break; - case OPT_SIZE: { - uint64_t sz = parse_size_and_unit(optval, NULL); - switch ( param->len ) - { - case sizeof(uint32_t): - *(uint32_t *)param->var = sz; - break; - case sizeof(uint64_t): - *(uint64_t *)param->var = sz; - break; - default: - BUG(); - } + case OPT_SIZE: + assign_integer_param( + param, + parse_size_and_unit(optval, NULL)); break; - } case OPT_CUSTOM: ((void (*)(const char *))param->var)(optval); break; + default: + BUG(); + break; } } } |