From patchwork Wed Jul 3 06:44:33 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Tokarev X-Patchwork-Id: 256544 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id 684E02C0097 for ; Wed, 3 Jul 2013 16:44:57 +1000 (EST) Received: from localhost ([::1]:45262 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UuGoA-0004FL-Ta for incoming@patchwork.ozlabs.org; Wed, 03 Jul 2013 02:44:54 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:48108) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UuGnw-0004CV-Pg for qemu-devel@nongnu.org; Wed, 03 Jul 2013 02:44:42 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UuGnu-0003lh-EF for qemu-devel@nongnu.org; Wed, 03 Jul 2013 02:44:40 -0400 Received: from isrv.corpit.ru ([86.62.121.231]:54823) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UuGnu-0003ks-2x for qemu-devel@nongnu.org; Wed, 03 Jul 2013 02:44:38 -0400 Received: from gandalf.tls.msk.ru (mjt.vpn.tls.msk.ru [192.168.177.99]) by isrv.corpit.ru (Postfix) with ESMTP id 4CB35404B6; Wed, 3 Jul 2013 10:44:35 +0400 (MSK) Received: by gandalf.tls.msk.ru (Postfix, from userid 1000) id B1FDF1B7; Wed, 3 Jul 2013 10:44:34 +0400 (MSK) From: Michael Tokarev To: Anthony Liguori , qemu-devel@nongnu.org Date: Wed, 3 Jul 2013 10:44:33 +0400 Message-Id: <1372833874-21416-1-git-send-email-mjt@msgid.tls.msk.ru> X-Mailer: git-send-email 1.7.10.4 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 86.62.121.231 Cc: Paolo Bonzini , mjt@tls.msk.ru Subject: [Qemu-devel] [PATCH v2 1/2] trap signals for "-serial mon:stdio" X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org From: Paolo Bonzini 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 Signed-off-by: Michael Tokarev --- V2: added code comments and documentation fixes by mjt (hopefully the s-o-b stands still) qemu-char.c | 13 +++++++++---- qemu-options.hx | 8 +++++--- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/qemu-char.c b/qemu-char.c index 6cec5d7..18c42a3 100644 --- a/qemu-char.c +++ b/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[VTIME] = 0; } - /* if graphical mode, we allow Ctrl-C handling */ if (!stdio_allow_signal) tty.c_lflag &= ~ISIG; @@ -955,7 +954,6 @@ static CharDriverState *qemu_chr_open_stdio(ChardevStdio *opts) chr = qemu_chr_open_fd(0, 1); chr->chr_close = qemu_chr_close_stdio; chr->chr_set_echo = qemu_chr_set_echo_stdio; - stdio_allow_signal = display_type != DT_NOGRAPHIC; if (opts->has_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)) { filename = p; 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 || @@ -3060,8 +3066,7 @@ static void qemu_chr_parse_stdio(QemuOpts *opts, ChardevBackend *backend, { backend->stdio = g_new0(ChardevStdio, 1); backend->stdio->has_signal = true; - backend->stdio->signal = - qemu_opt_get_bool(opts, "signal", display_type != DT_NOGRAPHIC); + backend->stdio->signal = qemu_opt_get_bool(opts, "signal", true); } static void qemu_chr_parse_serial(QemuOpts *opts, ChardevBackend *backend, diff --git a/qemu-options.hx b/qemu-options.hx index 137a39b..d676b03 100644 --- a/qemu-options.hx +++ b/qemu-options.hx @@ -842,7 +842,8 @@ STEXI Normally, QEMU uses SDL to display the VGA output. With this option, you can totally disable graphical output so that QEMU is a simple 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. ETEXI @@ -2485,14 +2486,15 @@ same as if you had specified @code{-serial tcp} except the unix domain socket @item mon:@var{dev_string} This is a special option to allow the monitor to be multiplexed onto another serial port. The monitor is accessed with key sequence of -@key{Control-a} and then pressing @key{c}. See monitor access -@ref{pcsys_keys} in the -nographic section for more keys. +@key{Control-a} and then pressing @key{c}. @var{dev_string} should be any one of the serial devices specified above. An example to multiplex the monitor onto a telnet server listening on port 4444 would be: @table @code @item -serial mon:telnet::4444,server,nowait @end table +When monitor is multiplexed to stdio this way, Ctrl+C will not terminate +guest anymore but will be passed to the guest as is. @item braille Braille device. This will use BrlAPI to display the braille output on a real