On (Wed) Dec 01 2010 [11:30:58], Paul Brook wrote:
> > /* Callback function that's called when the guest sends us data */
> > static void flush_buf(VirtIOSerialPort *port, const uint8_t *buf, size_t
> > len) {
> > VirtConsole *vcon = DO_UPCAST(VirtConsole, port, port);
> > + int ret;
> >
> > - qemu_chr_write(vcon->chr, buf, len);
> > + ret = qemu_chr_write(vcon->chr, buf, len);
> > + if (ret == -EAGAIN) {
> > + virtio_serial_throttle_port(port, true);
> > + }
> > }
>
> This looks wrong. It will loose data in the case of a partial write
> (i.e. ret < len)
That doesn't happen currently (qemu_chr_write doesn't return a value > 0
but < len).
I had code in there to handle it, but that would change behaviour for
current users of qemu_chr_write(), which is a risk.
Amit