@@ -61,6 +61,10 @@ SECTIONS
*(.lockprofile.data)
__lock_profile_end = .;
#endif
+ . = ALIGN(POINTER_ALIGN);
+ __param_start = .;
+ *(.data.param)
+ __param_end = .;
} :text
#if defined(BUILD_ID)
@@ -120,6 +120,10 @@ SECTIONS
*(.lockprofile.data)
__lock_profile_end = .;
#endif
+ . = ALIGN(POINTER_ALIGN);
+ __param_start = .;
+ *(.data.param)
+ __param_end = .;
} :text
#if defined(BUILD_ID)
@@ -188,6 +188,11 @@ static void __init _cmdline_parse(const char *cmdline)
parse_params(cmdline, __setup_start, __setup_end);
}
+int runtime_parse(const char *line)
+{
+ return parse_params(line, __param_start, __param_end);
+}
+
/**
* cmdline_parse -- parses the xen command line.
* If CONFIG_CMDLINE is set, it would be parsed prior to @cmdline.
@@ -90,11 +90,16 @@ struct kernel_param {
};
extern const struct kernel_param __setup_start[], __setup_end[];
+extern const struct kernel_param __param_start[], __param_end[];
+
+#define __dataparam __used_section(".data.param")
+
+#define __param(att) static const att \
+ __attribute__((__aligned__(sizeof(void *)))) struct kernel_param
#define __setup_str static const __initconst \
__attribute__((__aligned__(1))) char
-#define __kparam static const __initsetup \
- __attribute__((__aligned__(sizeof(void *)))) struct kernel_param
+#define __kparam __param(__initsetup)
#define custom_param(_name, _var) \
__setup_str __setup_str_##_var[] = _name; \
@@ -131,6 +136,54 @@ extern const struct kernel_param __setup_start[], __setup_end[];
.len = sizeof(_var), \
.par.var = &_var }
+#define __rtparam __param(__dataparam)
+
+#define custom_runtime_only_param(_name, _var) \
+ __rtparam __rtpar_##_var = \
+ { .name = _name, \
+ .type = OPT_CUSTOM, \
+ .par.func = _var }
+#define boolean_runtime_only_param(_name, _var) \
+ __rtparam __rtpar_##_var = \
+ { .name = _name, \
+ .type = OPT_BOOL, \
+ .len = sizeof(_var), \
+ .par.var = &_var }
+#define integer_runtime_only_param(_name, _var) \
+ __rtparam __rtpar_##_var = \
+ { .name = _name, \
+ .type = OPT_UINT, \
+ .len = sizeof(_var), \
+ .par.var = &_var }
+#define size_runtime_only_param(_name, _var) \
+ __rtparam __rtpar_##_var = \
+ { .name = _name, \
+ .type = OPT_SIZE, \
+ .len = sizeof(_var), \
+ .par.var = &_var }
+#define string_runtime_only_param(_name, _var) \
+ __rtparam __rtpar_##_var = \
+ { .name = _name, \
+ .type = OPT_STR, \
+ .len = sizeof(_var), \
+ .par.var = &_var }
+
+#define custom_runtime_param(_name, _var) \
+ custom_param(_name, _var); \
+ custom_runtime_only_param(_name, _var)
+#define boolean_runtime_param(_name, _var) \
+ boolean_param(_name, _var); \
+ boolean_runtime_only_param(_name, _var)
+#define integer_runtime_param(_name, _var) \
+ integer_param(_name, _var); \
+ integer_runtime_only_param(_name, _var)
+#define size_runtime_param(_name, _var) \
+ size_param(_name, _var); \
+ size_runtime_only_param(_name, _var)
+#define string_runtime_param(_name, _var) \
+ string_param(_name, _var); \
+ string_runtime_only_param(_name, _var)
+
#endif /* __ASSEMBLY__ */
#ifdef CONFIG_LATE_HWDOM
@@ -71,6 +71,7 @@
struct domain;
void cmdline_parse(const char *cmdline);
+int runtime_parse(const char *line);
int parse_bool(const char *s);
/*#define DEBUG_TRACE_DUMP*/
Add the needed infrastructure for runtime parameter changing similar to that used at boot time via cmdline. We are using the same parsing functions as for cmdline parsing, but with a different array of parameter definitions. Cc: Andrew Cooper <andrew.cooper3@citrix.com> Cc: George Dunlap <George.Dunlap@eu.citrix.com> Cc: Ian Jackson <ian.jackson@eu.citrix.com> Cc: Jan Beulich <jbeulich@suse.com> Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> Cc: Stefano Stabellini <sstabellini@kernel.org> Cc: Tim Deegan <tim@xen.org> Cc: Wei Liu <wei.liu2@citrix.com> Signed-off-by: Juergen Gross <jgross@suse.com> --- V2: - added modification of ARM linker script (Wei Liu) V3: - moved runtime parameter array in linker scripts (Jan Beulich) - renamed macros to *_runtime_param() (Jan Beulich) - added *runtime_only_param() macros (Jan Beulich) - let *_runtime_param() macros include boot param functionality (Jan Beulich) --- xen/arch/arm/xen.lds.S | 4 ++++ xen/arch/x86/xen.lds.S | 4 ++++ xen/common/kernel.c | 5 +++++ xen/include/xen/init.h | 57 ++++++++++++++++++++++++++++++++++++++++++++++++-- xen/include/xen/lib.h | 1 + 5 files changed, 69 insertions(+), 2 deletions(-)