diff --git a/xen/arch/x86/setup.c b/xen/arch/x86/setup.c index c9b6af826d..4b15e067fa 100644 --- a/xen/arch/x86/setup.c +++ b/xen/arch/x86/setup.c @@ -679,6 +679,15 @@ static void __init noreturn reinit_bsp_stack(void) reset_stack_and_jump_nolp(init_done); } +/* + * x86 early command line parsing in xen/arch/x86/boot/cmdline.c + * has options that are only used during the very initial boot process, + * so they can be ignored now. + */ +ignore_param("no-real-mode"); +ignore_param("edd"); +ignore_param("edid"); + /* * Some scripts add "placeholder" to work around a grub error where it ate the * first parameter. diff --git a/xen/include/xen/param.h b/xen/include/xen/param.h index c2fd075dd0..f4be944248 100644 --- a/xen/include/xen/param.h +++ b/xen/include/xen/param.h @@ -35,6 +35,11 @@ extern const struct kernel_param __setup_start[], __setup_end[]; __attribute__((__aligned__(1))) char #define __kparam __param(__initsetup) +/* Only for use with .init data, to avoid creating livepatch problems. */ +#define __TEMP_NAME(base, line) base ## _ ## line +#define _TEMP_NAME(base, line) __TEMP_NAME(base, line) +#define TEMP_NAME(base) _TEMP_NAME(base, __LINE__) + #define custom_param(_name, _var) \ __setup_str __setup_str_##_var[] = _name; \ __kparam __setup_##_var = \ @@ -71,9 +76,9 @@ extern const struct kernel_param __setup_start[], __setup_end[]; .len = sizeof(_var), \ .par.var = &_var } #define ignore_param(_name) \ - __setup_str setup_str_ign[] = _name; \ - __kparam setup_ign = \ - { .name = setup_str_ign, \ + __setup_str TEMP_NAME(__setup_str_ign)[] = _name; \ + __kparam TEMP_NAME(__setup_ign) = \ + { .name = TEMP_NAME(__setup_str_ign), \ .type = OPT_IGNORE } #ifdef CONFIG_HYPFS