[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] introduce size_param()
# HG changeset patch # User Keir Fraser <keir.fraser@xxxxxxxxxx> # Date 1251709613 -3600 # Node ID 709a42e8514688b5c955fef4472de7553e6d7544 # Parent f974a04432fc289cde79ca009df8ae92e8e7ceeb introduce size_param() With there being several instances of custom_param() where the handler is just invoking parse_size_and_unit(), it seems to make sense to introduce a simplifying abstraction. Also fix serial_txbufsz not having been guaranteed to be a power of two. Signed-off-by: Jan Beulich <jbeulich@xxxxxxxxxx> --- xen/arch/ia64/xen/domain.c | 6 +----- xen/arch/x86/e820.c | 5 ++--- xen/common/kernel.c | 15 +++++++++++++++ xen/drivers/char/console.c | 6 ++---- xen/drivers/char/serial.c | 17 +++++++++-------- xen/include/xen/init.h | 13 ++++++++++++- 6 files changed, 41 insertions(+), 21 deletions(-) diff -r f974a04432fc -r 709a42e85146 xen/arch/ia64/xen/domain.c --- a/xen/arch/ia64/xen/domain.c Mon Aug 31 09:54:25 2009 +0100 +++ b/xen/arch/ia64/xen/domain.c Mon Aug 31 10:06:53 2009 +0100 @@ -2387,11 +2387,7 @@ arch_do_vcpu_op(int cmd, struct vcpu *v, return rc; } -static void __init parse_dom0_mem(char *s) -{ - dom0_size = parse_size_and_unit(s, NULL); -} -custom_param("dom0_mem", parse_dom0_mem); +size_param("dom0_mem", dom0_size); /* * Helper function for the optimization stuff handling the identity mapping diff -r f974a04432fc -r 709a42e85146 xen/arch/x86/e820.c --- a/xen/arch/x86/e820.c Mon Aug 31 09:54:25 2009 +0100 +++ b/xen/arch/x86/e820.c Mon Aug 31 10:06:53 2009 +0100 @@ -11,9 +11,8 @@ #include <asm/msr.h> /* opt_mem: Limit of physical RAM. Any RAM beyond this point is ignored. */ -unsigned long long opt_mem; -static void parse_mem(char *s) { opt_mem = parse_size_and_unit(s, NULL); } -custom_param("mem", parse_mem); +static unsigned long long __initdata opt_mem; +size_param("mem", opt_mem); /* opt_nomtrr_check: Don't clip ram to highest cacheable MTRR. */ static int __initdata e820_mtrr_clip = -1; diff -r f974a04432fc -r 709a42e85146 xen/common/kernel.c --- a/xen/common/kernel.c Mon Aug 31 09:54:25 2009 +0100 +++ b/xen/common/kernel.c Mon Aug 31 10:06:53 2009 +0100 @@ -92,6 +92,21 @@ void cmdline_parse(char *cmdline) bool_assert = !bool_assert; *(int *)param->var = 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(); + } + break; + } case OPT_CUSTOM: ((void (*)(const char *))param->var)(optval); break; diff -r f974a04432fc -r 709a42e85146 xen/drivers/char/console.c --- a/xen/drivers/char/console.c Mon Aug 31 09:54:25 2009 +0100 +++ b/xen/drivers/char/console.c Mon Aug 31 10:06:53 2009 +0100 @@ -59,10 +59,8 @@ boolean_param("console_timestamps", opt_ boolean_param("console_timestamps", opt_console_timestamps); /* conring_size: allows a large console ring than default (16kB). */ -static uint32_t opt_conring_size; -static void parse_conring_size(char *s) -{ opt_conring_size = parse_size_and_unit(s, NULL); } -custom_param("conring_size", parse_conring_size); +static uint32_t __initdata opt_conring_size; +size_param("conring_size", opt_conring_size); #define _CONRING_SIZE 16384 #define CONRING_IDX_MASK(i) ((i)&(conring_size-1)) diff -r f974a04432fc -r 709a42e85146 xen/drivers/char/serial.c --- a/xen/drivers/char/serial.c Mon Aug 31 09:54:25 2009 +0100 +++ b/xen/drivers/char/serial.c Mon Aug 31 10:06:53 2009 +0100 @@ -19,11 +19,7 @@ /* #define SERIAL_NEVER_DROP_CHARS 1 */ unsigned int serial_txbufsz = 16384; -static void __init parse_serial_tx_buffer(const char *s) -{ - serial_txbufsz = max((unsigned int)parse_size_and_unit(s, NULL), 512u); -} -custom_param("serial_tx_buffer", parse_serial_tx_buffer); +size_param("serial_tx_buffer", serial_txbufsz); #define mask_serial_rxbuf_idx(_i) ((_i)&(serial_rxbufsz-1)) #define mask_serial_txbuf_idx(_i) ((_i)&(serial_txbufsz-1)) @@ -493,9 +489,14 @@ void serial_async_transmit(struct serial void serial_async_transmit(struct serial_port *port) { BUG_ON(!port->driver->tx_empty); - if ( port->txbuf == NULL ) - port->txbuf = alloc_xenheap_pages( - get_order_from_bytes(serial_txbufsz), 0); + if ( port->txbuf != NULL ) + return; + if ( serial_txbufsz < 512 ) + serial_txbufsz = 512; + while ( serial_txbufsz & (serial_txbufsz - 1) ) + serial_txbufsz &= serial_txbufsz - 1; + port->txbuf = alloc_xenheap_pages( + get_order_from_bytes(serial_txbufsz), 0); } /* diff -r f974a04432fc -r 709a42e85146 xen/include/xen/init.h --- a/xen/include/xen/init.h Mon Aug 31 09:54:25 2009 +0100 +++ b/xen/include/xen/init.h Mon Aug 31 10:06:53 2009 +0100 @@ -78,7 +78,14 @@ extern initcall_t __initcall_start, __in */ struct kernel_param { const char *name; - enum { OPT_STR, OPT_UINT, OPT_BOOL, OPT_INVBOOL, OPT_CUSTOM } type; + enum { + OPT_STR, + OPT_UINT, + OPT_BOOL, + OPT_INVBOOL, + OPT_SIZE, + OPT_CUSTOM + } type; void *var; unsigned int len; }; @@ -101,6 +108,10 @@ extern struct kernel_param __setup_start static char __setup_str_##_var[] __initdata = _name; \ static struct kernel_param __setup_##_var __attribute_used__ \ __initsetup = { __setup_str_##_var, OPT_UINT, &_var, sizeof(_var) } +#define size_param(_name, _var) \ + static char __setup_str_##_var[] __initdata = _name; \ + static struct kernel_param __setup_##_var __attribute_used__ \ + __initsetup = { __setup_str_##_var, OPT_SIZE, &_var, sizeof(_var) } #define string_param(_name, _var) \ static char __setup_str_##_var[] __initdata = _name; \ static struct kernel_param __setup_##_var __attribute_used__ \ _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |