All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH] make -qmp stdio usable
@ 2010-08-11 21:56 Paolo Bonzini
  2010-08-22 21:50 ` Anthony Liguori
  0 siblings, 1 reply; 3+ messages in thread
From: Paolo Bonzini @ 2010-08-11 21:56 UTC (permalink / raw)
  To: qemu-devel; +Cc: Kevin Wolf

Currently -qmp stdio (or the equivalent -mon/-chardev combination) sets
up the terminal attributes even though it does not go through readline
to actually do I/O.  As a result, echo is disabled and you cannot see
anything you type.  This patch fixes it by adding a "cooked" option to
the stdio chardev backend, that when set will disable switching the tty
to raw mode.

Cc: Kevin Wolf <kwolf@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 qemu-char.c   |   26 ++++++++++++++------------
 qemu-config.c |    3 +++
 vl.c          |    3 +++
 3 files changed, 20 insertions(+), 12 deletions(-)

diff --git a/qemu-char.c b/qemu-char.c
index 6a3952c..15e1891 100644
--- a/qemu-char.c
+++ b/qemu-char.c
@@ -735,19 +735,21 @@ static void term_init(QemuOpts *opts)
     oldtty = tty;
     old_fd0_flags = fcntl(0, F_GETFL);
 
-    tty.c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP
+    if (!qemu_opt_get_bool(opts, "cooked", 0)) {
+        tty.c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP
                           |INLCR|IGNCR|ICRNL|IXON);
-    tty.c_oflag |= OPOST;
-    tty.c_lflag &= ~(ECHO|ECHONL|ICANON|IEXTEN);
-    /* if graphical mode, we allow Ctrl-C handling */
-    if (!qemu_opt_get_bool(opts, "signal", display_type != DT_NOGRAPHIC))
-        tty.c_lflag &= ~ISIG;
-    tty.c_cflag &= ~(CSIZE|PARENB);
-    tty.c_cflag |= CS8;
-    tty.c_cc[VMIN] = 1;
-    tty.c_cc[VTIME] = 0;
-
-    tcsetattr (0, TCSANOW, &tty);
+        tty.c_oflag |= OPOST;
+        tty.c_lflag &= ~(ECHO|ECHONL|ICANON|IEXTEN);
+        /* if graphical mode, we allow Ctrl-C handling */
+        if (!qemu_opt_get_bool(opts, "signal", display_type != DT_NOGRAPHIC))
+            tty.c_lflag &= ~ISIG;
+        tty.c_cflag &= ~(CSIZE|PARENB);
+        tty.c_cflag |= CS8;
+        tty.c_cc[VMIN] = 1;
+        tty.c_cc[VTIME] = 0;
+
+	tcsetattr (0, TCSANOW, &tty);
+    }
 
     if (!term_atexit_done++)
         atexit(term_exit);
diff --git a/qemu-config.c b/qemu-config.c
index 95abe61..8c525b0 100644
--- a/qemu-config.c
+++ b/qemu-config.c
@@ -146,6 +146,9 @@ QemuOptsList qemu_chardev_opts = {
         },{
             .name = "signal",
             .type = QEMU_OPT_BOOL,
+        },{
+            .name = "cooked",
+            .type = QEMU_OPT_BOOL,
         },
         { /* end if list */ }
     },
diff --git a/vl.c b/vl.c
index b3e3676..be122e7 100644
--- a/vl.c
+++ b/vl.c
@@ -1596,6 +1596,9 @@ static void monitor_parse(const char *optarg, const char *mode)
             fprintf(stderr, "parse error: %s\n", optarg);
             exit(1);
         }
+        if (!strcmp(mode, "control")) {
+            qemu_opt_set(opts, "cooked", "on");
+        }
     }
 
     opts = qemu_opts_create(&qemu_mon_opts, label, 1);
-- 
1.7.1

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [Qemu-devel] [PATCH] make -qmp stdio usable
  2010-08-11 21:56 [Qemu-devel] [PATCH] make -qmp stdio usable Paolo Bonzini
@ 2010-08-22 21:50 ` Anthony Liguori
  2010-08-23  6:22   ` Paolo Bonzini
  0 siblings, 1 reply; 3+ messages in thread
From: Anthony Liguori @ 2010-08-22 21:50 UTC (permalink / raw)
  To: Paolo Bonzini; +Cc: Kevin Wolf, qemu-devel

On 08/11/2010 04:56 PM, Paolo Bonzini wrote:
> Currently -qmp stdio (or the equivalent -mon/-chardev combination) sets
> up the terminal attributes even though it does not go through readline
> to actually do I/O.  As a result, echo is disabled and you cannot see
> anything you type.  This patch fixes it by adding a "cooked" option to
> the stdio chardev backend, that when set will disable switching the tty
> to raw mode.
>    

cooked doesn't make a whole lot of sense to me (and it's not documented 
anywhere).

Maybe raw=on|off or even echo=on|off would make more sense?

Regards,

Anthony Liguori

> Cc: Kevin Wolf<kwolf@redhat.com>
> Signed-off-by: Paolo Bonzini<pbonzini@redhat.com>
> ---
>   qemu-char.c   |   26 ++++++++++++++------------
>   qemu-config.c |    3 +++
>   vl.c          |    3 +++
>   3 files changed, 20 insertions(+), 12 deletions(-)
>
> diff --git a/qemu-char.c b/qemu-char.c
> index 6a3952c..15e1891 100644
> --- a/qemu-char.c
> +++ b/qemu-char.c
> @@ -735,19 +735,21 @@ static void term_init(QemuOpts *opts)
>       oldtty = tty;
>       old_fd0_flags = fcntl(0, F_GETFL);
>
> -    tty.c_iflag&= ~(IGNBRK|BRKINT|PARMRK|ISTRIP
> +    if (!qemu_opt_get_bool(opts, "cooked", 0)) {
> +        tty.c_iflag&= ~(IGNBRK|BRKINT|PARMRK|ISTRIP
>                             |INLCR|IGNCR|ICRNL|IXON);
> -    tty.c_oflag |= OPOST;
> -    tty.c_lflag&= ~(ECHO|ECHONL|ICANON|IEXTEN);
> -    /* if graphical mode, we allow Ctrl-C handling */
> -    if (!qemu_opt_get_bool(opts, "signal", display_type != DT_NOGRAPHIC))
> -        tty.c_lflag&= ~ISIG;
> -    tty.c_cflag&= ~(CSIZE|PARENB);
> -    tty.c_cflag |= CS8;
> -    tty.c_cc[VMIN] = 1;
> -    tty.c_cc[VTIME] = 0;
> -
> -    tcsetattr (0, TCSANOW,&tty);
> +        tty.c_oflag |= OPOST;
> +        tty.c_lflag&= ~(ECHO|ECHONL|ICANON|IEXTEN);
> +        /* if graphical mode, we allow Ctrl-C handling */
> +        if (!qemu_opt_get_bool(opts, "signal", display_type != DT_NOGRAPHIC))
> +            tty.c_lflag&= ~ISIG;
> +        tty.c_cflag&= ~(CSIZE|PARENB);
> +        tty.c_cflag |= CS8;
> +        tty.c_cc[VMIN] = 1;
> +        tty.c_cc[VTIME] = 0;
> +
> +	tcsetattr (0, TCSANOW,&tty);
> +    }
>
>       if (!term_atexit_done++)
>           atexit(term_exit);
> diff --git a/qemu-config.c b/qemu-config.c
> index 95abe61..8c525b0 100644
> --- a/qemu-config.c
> +++ b/qemu-config.c
> @@ -146,6 +146,9 @@ QemuOptsList qemu_chardev_opts = {
>           },{
>               .name = "signal",
>               .type = QEMU_OPT_BOOL,
> +        },{
> +            .name = "cooked",
> +            .type = QEMU_OPT_BOOL,
>           },
>           { /* end if list */ }
>       },
> diff --git a/vl.c b/vl.c
> index b3e3676..be122e7 100644
> --- a/vl.c
> +++ b/vl.c
> @@ -1596,6 +1596,9 @@ static void monitor_parse(const char *optarg, const char *mode)
>               fprintf(stderr, "parse error: %s\n", optarg);
>               exit(1);
>           }
> +        if (!strcmp(mode, "control")) {
> +            qemu_opt_set(opts, "cooked", "on");
> +        }
>       }
>
>       opts = qemu_opts_create(&qemu_mon_opts, label, 1);
>    

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [Qemu-devel] [PATCH] make -qmp stdio usable
  2010-08-22 21:50 ` Anthony Liguori
@ 2010-08-23  6:22   ` Paolo Bonzini
  0 siblings, 0 replies; 3+ messages in thread
From: Paolo Bonzini @ 2010-08-23  6:22 UTC (permalink / raw)
  To: Anthony Liguori; +Cc: Kevin Wolf, qemu-devel

On 08/22/2010 11:50 PM, Anthony Liguori wrote:
> On 08/11/2010 04:56 PM, Paolo Bonzini wrote:
>> Currently -qmp stdio (or the equivalent -mon/-chardev combination) sets
>> up the terminal attributes even though it does not go through readline
>> to actually do I/O. As a result, echo is disabled and you cannot see
>> anything you type. This patch fixes it by adding a "cooked" option to
>> the stdio chardev backend, that when set will disable switching the tty
>> to raw mode.
>
> cooked doesn't make a whole lot of sense to me (and it's not documented
> anywhere).

"Cooked mode" is actually pretty common when talking about the Unix 
TTYs, I can find it for example in curses documentation:

     Normally,  the  tty  driver buffers typed characters until a
     newline or carriage return is typed.  The cbreak routine disables
     line  buffering and erase/kill character-processing (interrupt and
     flow control characters are unaffected), making characters typed by
     the  user  immediately available to the program.  The nocbreak
     routine returns the terminal to normal (cooked) mode.

> Maybe raw=on|off or even echo=on|off would make more sense?

raw would make sense, echo was my first choice but it has the problem 
that echo is done anyway when Qemu's readline is involved.

I'll redo the patch with raw.

Paolo

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2010-08-23  6:22 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-08-11 21:56 [Qemu-devel] [PATCH] make -qmp stdio usable Paolo Bonzini
2010-08-22 21:50 ` Anthony Liguori
2010-08-23  6:22   ` Paolo Bonzini

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.