aboutsummaryrefslogtreecommitdiffstats
path: root/xen/common/kernel.c
diff options
context:
space:
mode:
authorKeir Fraser <keir@xen.org>2010-12-24 10:10:45 +0000
committerKeir Fraser <keir@xen.org>2010-12-24 10:10:45 +0000
commit5814ca6b9c845e77c22fb034e8e7a9b35fe6b59a (patch)
tree2537340f7328351fb2f462d325a89c42befffc3d /xen/common/kernel.c
parent53ecc28f0e91051cf7874012ea13a6899910b105 (diff)
downloadxen-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.c53
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;
}
}
}