mirror of
https://github.com/xemu-project/xemu.git
synced 2024-11-27 13:30:52 +00:00
trap signals for "-serial mon:stdio"
With mon:stdio you can exit the VM by switching to the monitor and sending the "quit" command. It is then useful to pass Ctrl-C to the VM instead of exiting. This in turn lets us stop tying the default signal handling behavior to -nographic, removing gratuitous differences between "-display none" and "-nographic". This patch changes behavior for "-display none -serial mon:stdio", as expected, but not for "-display none -serial stdio". Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Michael Tokarev <mjt@tls.msk.ru> Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Message-id: 1372868986-25988-1-git-send-email-mjt@msgid.tls.msk.ru Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
parent
964c6fa16f
commit
02c4bdf1d2
13
qemu-char.c
13
qemu-char.c
@ -926,7 +926,6 @@ static void qemu_chr_set_echo_stdio(CharDriverState *chr, bool echo)
|
|||||||
tty.c_cc[VMIN] = 1;
|
tty.c_cc[VMIN] = 1;
|
||||||
tty.c_cc[VTIME] = 0;
|
tty.c_cc[VTIME] = 0;
|
||||||
}
|
}
|
||||||
/* if graphical mode, we allow Ctrl-C handling */
|
|
||||||
if (!stdio_allow_signal)
|
if (!stdio_allow_signal)
|
||||||
tty.c_lflag &= ~ISIG;
|
tty.c_lflag &= ~ISIG;
|
||||||
|
|
||||||
@ -955,7 +954,6 @@ static CharDriverState *qemu_chr_open_stdio(ChardevStdio *opts)
|
|||||||
chr = qemu_chr_open_fd(0, 1);
|
chr = qemu_chr_open_fd(0, 1);
|
||||||
chr->chr_close = qemu_chr_close_stdio;
|
chr->chr_close = qemu_chr_close_stdio;
|
||||||
chr->chr_set_echo = qemu_chr_set_echo_stdio;
|
chr->chr_set_echo = qemu_chr_set_echo_stdio;
|
||||||
stdio_allow_signal = display_type != DT_NOGRAPHIC;
|
|
||||||
if (opts->has_signal) {
|
if (opts->has_signal) {
|
||||||
stdio_allow_signal = opts->signal;
|
stdio_allow_signal = opts->signal;
|
||||||
}
|
}
|
||||||
@ -2932,6 +2930,14 @@ QemuOpts *qemu_chr_parse_compat(const char *label, const char *filename)
|
|||||||
if (strstart(filename, "mon:", &p)) {
|
if (strstart(filename, "mon:", &p)) {
|
||||||
filename = p;
|
filename = p;
|
||||||
qemu_opt_set(opts, "mux", "on");
|
qemu_opt_set(opts, "mux", "on");
|
||||||
|
if (strcmp(filename, "stdio") == 0) {
|
||||||
|
/* Monitor is muxed to stdio: do not exit on Ctrl+C by default
|
||||||
|
* but pass it to the guest. Handle this only for compat syntax,
|
||||||
|
* for -chardev syntax we have special option for this.
|
||||||
|
* This is what -nographic did, redirecting+muxing serial+monitor
|
||||||
|
* to stdio causing Ctrl+C to be passed to guest. */
|
||||||
|
qemu_opt_set(opts, "signal", "off");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strcmp(filename, "null") == 0 ||
|
if (strcmp(filename, "null") == 0 ||
|
||||||
@ -3060,8 +3066,7 @@ static void qemu_chr_parse_stdio(QemuOpts *opts, ChardevBackend *backend,
|
|||||||
{
|
{
|
||||||
backend->stdio = g_new0(ChardevStdio, 1);
|
backend->stdio = g_new0(ChardevStdio, 1);
|
||||||
backend->stdio->has_signal = true;
|
backend->stdio->has_signal = true;
|
||||||
backend->stdio->signal =
|
backend->stdio->signal = qemu_opt_get_bool(opts, "signal", true);
|
||||||
qemu_opt_get_bool(opts, "signal", display_type != DT_NOGRAPHIC);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void qemu_chr_parse_serial(QemuOpts *opts, ChardevBackend *backend,
|
static void qemu_chr_parse_serial(QemuOpts *opts, ChardevBackend *backend,
|
||||||
|
@ -842,7 +842,8 @@ STEXI
|
|||||||
Normally, QEMU uses SDL to display the VGA output. With this option,
|
Normally, QEMU uses SDL to display the VGA output. With this option,
|
||||||
you can totally disable graphical output so that QEMU is a simple
|
you can totally disable graphical output so that QEMU is a simple
|
||||||
command line application. The emulated serial port is redirected on
|
command line application. The emulated serial port is redirected on
|
||||||
the console. Therefore, you can still use QEMU to debug a Linux kernel
|
the console and muxed with the monitor (unless redirected elsewhere
|
||||||
|
explicitly). Therefore, you can still use QEMU to debug a Linux kernel
|
||||||
with a serial console.
|
with a serial console.
|
||||||
ETEXI
|
ETEXI
|
||||||
|
|
||||||
@ -2485,14 +2486,15 @@ same as if you had specified @code{-serial tcp} except the unix domain socket
|
|||||||
@item mon:@var{dev_string}
|
@item mon:@var{dev_string}
|
||||||
This is a special option to allow the monitor to be multiplexed onto
|
This is a special option to allow the monitor to be multiplexed onto
|
||||||
another serial port. The monitor is accessed with key sequence of
|
another serial port. The monitor is accessed with key sequence of
|
||||||
@key{Control-a} and then pressing @key{c}. See monitor access
|
@key{Control-a} and then pressing @key{c}.
|
||||||
@ref{pcsys_keys} in the -nographic section for more keys.
|
|
||||||
@var{dev_string} should be any one of the serial devices specified
|
@var{dev_string} should be any one of the serial devices specified
|
||||||
above. An example to multiplex the monitor onto a telnet server
|
above. An example to multiplex the monitor onto a telnet server
|
||||||
listening on port 4444 would be:
|
listening on port 4444 would be:
|
||||||
@table @code
|
@table @code
|
||||||
@item -serial mon:telnet::4444,server,nowait
|
@item -serial mon:telnet::4444,server,nowait
|
||||||
@end table
|
@end table
|
||||||
|
When monitor is multiplexed to stdio this way, Ctrl+C will not terminate
|
||||||
|
QEMU anymore but will be passed to the guest instead.
|
||||||
|
|
||||||
@item braille
|
@item braille
|
||||||
Braille device. This will use BrlAPI to display the braille output on a real
|
Braille device. This will use BrlAPI to display the braille output on a real
|
||||||
|
Loading…
Reference in New Issue
Block a user