|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH v6 1/2] xen/common: add keyhandler to show Xen command line
From: Denis Mukhin <dmukhin@xxxxxxxx>
Currently there's no way to print Xen command line on the emergency
console for debugging purposes when 'xl' is unavailable.
Add new print_cmdline() function to print both built-in and run-time
command lines on the console.
To allow built-in command printout, drop __initconst in
'opt_builtin_cmdline' declaration.
Add new keyhander '?' to show command line printout.
Signed-off-by: Denis Mukhin <dmukhin@xxxxxxxx>
---
Changes since v5:
- drop version printout from 'h'
- add new handler for system information
Changes since v4:
- promote opt_builtin_cmdline to __ro_after_init and use it for
built-in command line reporting
- account for empty saved_cmdline
- adjust register_keyhandler() call - use '?'
Changes since v3:
- print built-in command line too
- change handler to print command line only
Changes since v2:
- account for CONFIG_CMDLINE_OVERRIDE case
---
xen/common/kernel.c | 20 +++++++++++++++++++-
xen/common/keyhandler.c | 10 +++++++++-
xen/include/xen/lib.h | 1 +
3 files changed, 29 insertions(+), 2 deletions(-)
diff --git a/xen/common/kernel.c b/xen/common/kernel.c
index d1bef9ac2b2b..f4bbd8818fa8 100644
--- a/xen/common/kernel.c
+++ b/xen/common/kernel.c
@@ -35,7 +35,7 @@ boolean_param("dit", opt_dit);
#endif
static xen_commandline_t __ro_after_init saved_cmdline;
-static const char __initconst opt_builtin_cmdline[] = CONFIG_CMDLINE;
+static const char opt_builtin_cmdline[] = CONFIG_CMDLINE;
char __ro_after_init xen_cap_info[128];
static int assign_integer_param(const struct kernel_param *param, uint64_t val)
@@ -758,6 +758,24 @@ long do_xen_version(int cmd, XEN_GUEST_HANDLE_PARAM(void)
arg)
return -ENOSYS;
}
+void print_cmdline(void)
+{
+ const char *cmdline;
+
+ if ( opt_builtin_cmdline[0] )
+ printk("Built-in command line: %s\n", opt_builtin_cmdline);
+
+ if ( IS_ENABLED(CONFIG_CMDLINE_OVERRIDE) )
+ cmdline = "<ignored> (CONFIG_CMDLINE_OVERRIDE=y)";
+ else if ( saved_cmdline[0] )
+ cmdline = saved_cmdline;
+ else
+ cmdline = NULL;
+
+ if ( cmdline )
+ printk("Command line: %s\n", cmdline);
+}
+
/*
* Local variables:
* mode: C
diff --git a/xen/common/keyhandler.c b/xen/common/keyhandler.c
index cb6df2823b00..92b0573d8b3a 100644
--- a/xen/common/keyhandler.c
+++ b/xen/common/keyhandler.c
@@ -28,7 +28,7 @@ static unsigned char keypress_key;
static bool alt_key_handling;
static keyhandler_fn_t cf_check show_handlers, cf_check dump_hwdom_registers,
- cf_check dump_domains, cf_check read_clocks;
+ cf_check dump_domains, cf_check read_clocks, cf_check show_system_info;
static irq_keyhandler_fn_t cf_check do_toggle_alt_key, cf_check dump_registers,
cf_check reboot_machine, cf_check run_all_keyhandlers;
@@ -58,6 +58,7 @@ static struct keyhandler {
KEYHANDLER('t', read_clocks, "display multi-cpu clock info", 1),
KEYHANDLER('0', dump_hwdom_registers, "dump Dom0 registers", 1),
IRQ_KEYHANDLER('*', run_all_keyhandlers, "print all diagnostics", 0),
+ KEYHANDLER('?', show_system_info, "show system information", false),
#ifdef CONFIG_PERF_COUNTERS
KEYHANDLER('p', perfc_printall, "print performance counters", 1),
@@ -138,6 +139,13 @@ static void cf_check show_handlers(unsigned char key)
isprint(i) ? i : ' ', i, key_table[i].desc);
}
+static void cf_check show_system_info(unsigned char key)
+{
+ printk("'%c' pressed -> showing system information\n", key);
+
+ print_cmdline();
+}
+
static cpumask_t dump_execstate_mask;
void cf_check dump_execstate(const struct cpu_user_regs *regs)
diff --git a/xen/include/xen/lib.h b/xen/include/xen/lib.h
index 3c545ff33c61..618e37b920e3 100644
--- a/xen/include/xen/lib.h
+++ b/xen/include/xen/lib.h
@@ -48,6 +48,7 @@ int parse_signed_integer(const char *name, const char *s,
const char *e,
int cmdline_strcmp(const char *frag, const char *name);
void print_version(void);
+void print_cmdline(void);
#ifdef CONFIG_DEBUG_TRACE
extern void debugtrace_dump(void);
--
2.54.0
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |