Patchwork [V2] qemu-char: Inherit ptys and improve output from -serial pty

login
register
mail settings
Submitter Lei Li
Date Dec. 21, 2012, 4:26 a.m.
Message ID <1356063998-31749-1-git-send-email-lilei@linux.vnet.ibm.com>
Download mbox | patch
Permalink /patch/207757/
State New
Headers show

Comments

Lei Li - Dec. 21, 2012, 4:26 a.m.
Changes since V1:
  - Avoid crashing since qemu_opts_id() may return null on some
    systems according to Markus's suggestion.

When controlling a qemu instance from another program, it's
hard to know which serial port or monitor device is redirected
to which pty. With more than one device using "pty" a lot of
guesswork is involved.

$ ./x86_64-softmmu/qemu-system-x86_64 -serial pty -serial pty -monitor pty
char device redirected to /dev/pts/5
char device redirected to /dev/pts/6
char device redirected to /dev/pts/7

Although we can find out what everything else is connected to
by the "info chardev" with "-monitor stdio" in the command line,
It'd be very useful to be able to have qemu inherit pseudo-tty
file descriptors so they could just be specified on the command
line like:

$ ./x86_64-softmmu/qemu-system-x86_64 -serial pty -serial pty -monitor pty
char device compat_monitor0 redirected to /dev/pts/5
char device serial0 redirected to /dev/pts/6
char device serial1 redirected to /dev/pts/7

Referred link: https://bugs.launchpad.net/qemu/+bug/938552

Signed-off-by: Lei Li <lilei@linux.vnet.ibm.com>
---
 qemu-char.c |    8 +++++++-
 1 files changed, 7 insertions(+), 1 deletions(-)
Markus Armbruster - Dec. 21, 2012, 7:56 a.m.
Lei Li <lilei@linux.vnet.ibm.com> writes:

> Changes since V1:
>   - Avoid crashing since qemu_opts_id() may return null on some
>     systems according to Markus's suggestion.

Version history belongs below the "---" line.

> When controlling a qemu instance from another program, it's
> hard to know which serial port or monitor device is redirected
> to which pty. With more than one device using "pty" a lot of
> guesswork is involved.
>
> $ ./x86_64-softmmu/qemu-system-x86_64 -serial pty -serial pty -monitor pty
> char device redirected to /dev/pts/5
> char device redirected to /dev/pts/6
> char device redirected to /dev/pts/7
>
> Although we can find out what everything else is connected to
> by the "info chardev" with "-monitor stdio" in the command line,
> It'd be very useful to be able to have qemu inherit pseudo-tty
> file descriptors so they could just be specified on the command
> line like:
>
> $ ./x86_64-softmmu/qemu-system-x86_64 -serial pty -serial pty -monitor pty
> char device compat_monitor0 redirected to /dev/pts/5
> char device serial0 redirected to /dev/pts/6
> char device serial1 redirected to /dev/pts/7
>
> Referred link: https://bugs.launchpad.net/qemu/+bug/938552
>
> Signed-off-by: Lei Li <lilei@linux.vnet.ibm.com>
> ---
>  qemu-char.c |    8 +++++++-
>  1 files changed, 7 insertions(+), 1 deletions(-)
>
> diff --git a/qemu-char.c b/qemu-char.c
> index 6113d0a..31388be 100644
> --- a/qemu-char.c
> +++ b/qemu-char.c
> @@ -980,6 +980,7 @@ static CharDriverState *qemu_chr_open_pty(QemuOpts *opts)
>      CharDriverState *chr;
>      PtyCharDriver *s;
>      struct termios tty;
> +    const char *label;
>      int master_fd, slave_fd, len;
>  #if defined(__OpenBSD__) || defined(__DragonFly__)
>      char pty_name[PATH_MAX];
> @@ -1005,7 +1006,12 @@ static CharDriverState *qemu_chr_open_pty(QemuOpts *opts)
>      chr->filename = g_malloc(len);
>      snprintf(chr->filename, len, "pty:%s", q_ptsname(master_fd));
>      qemu_opt_set(opts, "path", q_ptsname(master_fd));
> -    fprintf(stderr, "char device redirected to %s\n", q_ptsname(master_fd));
> +
> +    label = qemu_opts_id(opts);
> +    fprintf(stderr, "char device%s%s redirected to %s\n",
> +            label ? " " : "",
> +            label ?: "",
> +            q_ptsname(master_fd));
>  
>      s = g_malloc0(sizeof(PtyCharDriver));
>      chr->opaque = s;

Reviewed-by: Markus Armbruster <armbru@redhat.com>
Anthony Liguori - Dec. 23, 2012, 9:28 p.m.
Lei Li <lilei@linux.vnet.ibm.com> writes:

> Changes since V1:
>   - Avoid crashing since qemu_opts_id() may return null on some
>     systems according to Markus's suggestion.
>
> When controlling a qemu instance from another program, it's
> hard to know which serial port or monitor device is redirected
> to which pty. With more than one device using "pty" a lot of
> guesswork is involved.
>
> $ ./x86_64-softmmu/qemu-system-x86_64 -serial pty -serial pty -monitor pty
> char device redirected to /dev/pts/5
> char device redirected to /dev/pts/6
> char device redirected to /dev/pts/7
>
> Although we can find out what everything else is connected to
> by the "info chardev" with "-monitor stdio" in the command line,
> It'd be very useful to be able to have qemu inherit pseudo-tty
> file descriptors so they could just be specified on the command
> line like:
>
> $ ./x86_64-softmmu/qemu-system-x86_64 -serial pty -serial pty -monitor pty
> char device compat_monitor0 redirected to /dev/pts/5
> char device serial0 redirected to /dev/pts/6
> char device serial1 redirected to /dev/pts/7
>
> Referred link: https://bugs.launchpad.net/qemu/+bug/938552
>
> Signed-off-by: Lei Li <lilei@linux.vnet.ibm.com>

Applied. Thanks.

Regards,

Anthony Liguori

> ---
>  qemu-char.c |    8 +++++++-
>  1 files changed, 7 insertions(+), 1 deletions(-)
>
> diff --git a/qemu-char.c b/qemu-char.c
> index 6113d0a..31388be 100644
> --- a/qemu-char.c
> +++ b/qemu-char.c
> @@ -980,6 +980,7 @@ static CharDriverState *qemu_chr_open_pty(QemuOpts *opts)
>      CharDriverState *chr;
>      PtyCharDriver *s;
>      struct termios tty;
> +    const char *label;
>      int master_fd, slave_fd, len;
>  #if defined(__OpenBSD__) || defined(__DragonFly__)
>      char pty_name[PATH_MAX];
> @@ -1005,7 +1006,12 @@ static CharDriverState *qemu_chr_open_pty(QemuOpts *opts)
>      chr->filename = g_malloc(len);
>      snprintf(chr->filename, len, "pty:%s", q_ptsname(master_fd));
>      qemu_opt_set(opts, "path", q_ptsname(master_fd));
> -    fprintf(stderr, "char device redirected to %s\n", q_ptsname(master_fd));
> +
> +    label = qemu_opts_id(opts);
> +    fprintf(stderr, "char device%s%s redirected to %s\n",
> +            label ? " " : "",
> +            label ?: "",
> +            q_ptsname(master_fd));
>  
>      s = g_malloc0(sizeof(PtyCharDriver));
>      chr->opaque = s;
> -- 
> 1.7.7.6

Patch

diff --git a/qemu-char.c b/qemu-char.c
index 6113d0a..31388be 100644
--- a/qemu-char.c
+++ b/qemu-char.c
@@ -980,6 +980,7 @@  static CharDriverState *qemu_chr_open_pty(QemuOpts *opts)
     CharDriverState *chr;
     PtyCharDriver *s;
     struct termios tty;
+    const char *label;
     int master_fd, slave_fd, len;
 #if defined(__OpenBSD__) || defined(__DragonFly__)
     char pty_name[PATH_MAX];
@@ -1005,7 +1006,12 @@  static CharDriverState *qemu_chr_open_pty(QemuOpts *opts)
     chr->filename = g_malloc(len);
     snprintf(chr->filename, len, "pty:%s", q_ptsname(master_fd));
     qemu_opt_set(opts, "path", q_ptsname(master_fd));
-    fprintf(stderr, "char device redirected to %s\n", q_ptsname(master_fd));
+
+    label = qemu_opts_id(opts);
+    fprintf(stderr, "char device%s%s redirected to %s\n",
+            label ? " " : "",
+            label ?: "",
+            q_ptsname(master_fd));
 
     s = g_malloc0(sizeof(PtyCharDriver));
     chr->opaque = s;