All of lore.kernel.org
 help / color / mirror / Atom feed
From: Paolo Bonzini <pbonzini@redhat.com>
To: "Daniel P. Berrange" <berrange@redhat.com>, qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH v2 4/4] char: convert qemu_chr_fe_write to qemu_chr_fe_write_all
Date: Tue, 6 Sep 2016 17:23:55 +0200	[thread overview]
Message-ID: <8adbf9ea-1e51-6233-9796-73cd712bef15@redhat.com> (raw)
In-Reply-To: <1473170165-540-5-git-send-email-berrange@redhat.com>



On 06/09/2016 15:56, Daniel P. Berrange wrote:
> The mux chardev was not checking the return value of any
> qemu_chr_fe_write() call so would silently loose data
> on EAGAIN.
> 
> Similarly the qemu_chr_fe_printf method would not check
> errors and was not in a position to retry even if it
> could check.
> 
> Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
> ---
>  qemu-char.c | 18 ++++++++++++------
>  1 file changed, 12 insertions(+), 6 deletions(-)
> 
> diff --git a/qemu-char.c b/qemu-char.c
> index 5f82ebb..6104f24 100644
> --- a/qemu-char.c
> +++ b/qemu-char.c
> @@ -440,7 +440,9 @@ void qemu_chr_fe_printf(CharDriverState *s, const char *fmt, ...)
>      va_list ap;
>      va_start(ap, fmt);
>      vsnprintf(buf, sizeof(buf), fmt, ap);
> -    qemu_chr_fe_write(s, (uint8_t *)buf, strlen(buf));
> +    /* XXX this blocks entire thread. Rewrite to use
> +     * qemu_chr_fe_write and background I/O callbacks */
> +    qemu_chr_fe_write_all(s, (uint8_t *)buf, strlen(buf));
>      va_end(ap);
>  }
>  
> @@ -556,7 +558,9 @@ static int mux_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
>                           (secs / 60) % 60,
>                           secs % 60,
>                           (int)(ti % 1000));
> -                qemu_chr_fe_write(d->drv, (uint8_t *)buf1, strlen(buf1));
> +                /* XXX this blocks entire thread. Rewrite to use
> +                 * qemu_chr_fe_write and background I/O callbacks */
> +                qemu_chr_fe_write_all(d->drv, (uint8_t *)buf1, strlen(buf1));
>                  d->linestart = 0;
>              }
>              ret += qemu_chr_fe_write(d->drv, buf+i, 1);
> @@ -594,13 +598,15 @@ static void mux_print_help(CharDriverState *chr)
>                   "\n\rEscape-Char set to Ascii: 0x%02x\n\r\n\r",
>                   term_escape_char);
>      }
> -    qemu_chr_fe_write(chr, (uint8_t *)cbuf, strlen(cbuf));
> +    /* XXX this blocks entire thread. Rewrite to use
> +     * qemu_chr_fe_write and background I/O callbacks */
> +    qemu_chr_fe_write_all(chr, (uint8_t *)cbuf, strlen(cbuf));
>      for (i = 0; mux_help[i] != NULL; i++) {
>          for (j=0; mux_help[i][j] != '\0'; j++) {
>              if (mux_help[i][j] == '%')
> -                qemu_chr_fe_write(chr, (uint8_t *)ebuf, strlen(ebuf));
> +                qemu_chr_fe_write_all(chr, (uint8_t *)ebuf, strlen(ebuf));
>              else
> -                qemu_chr_fe_write(chr, (uint8_t *)&mux_help[i][j], 1);
> +                qemu_chr_fe_write_all(chr, (uint8_t *)&mux_help[i][j], 1);
>          }
>      }
>  }
> @@ -625,7 +631,7 @@ static int mux_proc_byte(CharDriverState *chr, MuxDriver *d, int ch)
>          case 'x':
>              {
>                   const char *term =  "QEMU: Terminated\n\r";
> -                 qemu_chr_fe_write(chr, (uint8_t *)term, strlen(term));
> +                 qemu_chr_fe_write_all(chr, (uint8_t *)term, strlen(term));
>                   exit(0);
>                   break;
>              }
> 

Queued for 2.8, thanks.

Paolo

  reply	other threads:[~2016-09-06 15:24 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-09-06 13:56 [Qemu-devel] [PATCH v2 0/4] Global fix / workaround usage of qemu_chr_fe_write Daniel P. Berrange
2016-09-06 13:56 ` [Qemu-devel] [PATCH v2 1/4] impi: check return of qemu_chr_fe_write() for errors Daniel P. Berrange
2016-09-06 13:56 ` [Qemu-devel] [PATCH v2 2/4] sclpconsolelm: remove bogus check for -EAGAIN Daniel P. Berrange
2016-09-06 13:56 ` [Qemu-devel] [PATCH v2 3/4] hw: replace most use of qemu_chr_fe_write with qemu_chr_fe_write_all Daniel P. Berrange
2016-09-06 13:56 ` [Qemu-devel] [PATCH v2 4/4] char: convert qemu_chr_fe_write to qemu_chr_fe_write_all Daniel P. Berrange
2016-09-06 15:23   ` Paolo Bonzini [this message]
2016-09-08 14:24   ` Eric Blake

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=8adbf9ea-1e51-6233-9796-73cd712bef15@redhat.com \
    --to=pbonzini@redhat.com \
    --cc=berrange@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.