Message ID | ef35e6cc166de3be38171b07cf3d5f3a786310a0.1359982059.git.amit.shah@redhat.com |
---|---|
State | New |
Headers | show |
On Mon, Feb 4, 2013 at 12:50 PM, Amit Shah <amit.shah@redhat.com> wrote: > The virtio-serial-bus already has the logic to make flow control work > properly. Hook into the char layer's new ability to signal a backend is > writable again. > > Signed-off-by: Amit Shah <amit.shah@redhat.com> > --- > hw/virtio-console.c | 13 +++++++++++++ > 1 file changed, 13 insertions(+) > > diff --git a/hw/virtio-console.c b/hw/virtio-console.c > index 46072a0..0cf6072 100644 > --- a/hw/virtio-console.c > +++ b/hw/virtio-console.c > @@ -20,6 +20,18 @@ typedef struct VirtConsole { > CharDriverState *chr; > } VirtConsole; > > +/* > + * Callback function that's called from chardevs when backend becomes > + * writable. > + */ > +static gboolean chr_write_unblocked(GIOChannel *chan, GIOCondition cond, > + void *opaque) > +{ > + VirtConsole *vcon = opaque; > + > + virtio_serial_throttle_port(&vcon->port, false); > + return false; FALSE since this is gboolean. > +} > > /* Callback function that's called when the guest sends us data */ > static ssize_t flush_buf(VirtIOSerialPort *port, const uint8_t *buf, size_t len) > @@ -48,6 +60,7 @@ static ssize_t flush_buf(VirtIOSerialPort *port, const uint8_t *buf, size_t len) > * do_flush_queued_data(). > */ > ret = 0; > + qemu_chr_fe_add_watch(vcon->chr, G_IO_OUT, chr_write_unblocked, vcon); > } > return ret; > } > -- > 1.8.1 > >
diff --git a/hw/virtio-console.c b/hw/virtio-console.c index 46072a0..0cf6072 100644 --- a/hw/virtio-console.c +++ b/hw/virtio-console.c @@ -20,6 +20,18 @@ typedef struct VirtConsole { CharDriverState *chr; } VirtConsole; +/* + * Callback function that's called from chardevs when backend becomes + * writable. + */ +static gboolean chr_write_unblocked(GIOChannel *chan, GIOCondition cond, + void *opaque) +{ + VirtConsole *vcon = opaque; + + virtio_serial_throttle_port(&vcon->port, false); + return false; +} /* Callback function that's called when the guest sends us data */ static ssize_t flush_buf(VirtIOSerialPort *port, const uint8_t *buf, size_t len) @@ -48,6 +60,7 @@ static ssize_t flush_buf(VirtIOSerialPort *port, const uint8_t *buf, size_t len) * do_flush_queued_data(). */ ret = 0; + qemu_chr_fe_add_watch(vcon->chr, G_IO_OUT, chr_write_unblocked, vcon); } return ret; }
The virtio-serial-bus already has the logic to make flow control work properly. Hook into the char layer's new ability to signal a backend is writable again. Signed-off-by: Amit Shah <amit.shah@redhat.com> --- hw/virtio-console.c | 13 +++++++++++++ 1 file changed, 13 insertions(+)