- WIP build fails, investigating - New upstream release 1.1.0 - Drop about a 100 spice + USB patches, which are all upstream
66 lines
1.7 KiB
Diff
66 lines
1.7 KiB
Diff
From 2f61a7bed440164c35c739fcef10d19edef3f8ea Mon Sep 17 00:00:00 2001
|
|
From: Hans de Goede <hdegoede@redhat.com>
|
|
Date: Tue, 19 Jul 2011 10:56:19 +0200
|
|
Subject: [PATCH 111/114] usb-redir: Add flow control support
|
|
|
|
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
|
---
|
|
hw/usb/redirect.c | 26 ++++++++++++++++++++++++--
|
|
1 file changed, 24 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/hw/usb/redirect.c b/hw/usb/redirect.c
|
|
index 6e8180e..5f55d78 100644
|
|
--- a/hw/usb/redirect.c
|
|
+++ b/hw/usb/redirect.c
|
|
@@ -238,12 +238,22 @@ static int usbredir_read(void *priv, uint8_t *data, int count)
|
|
static int usbredir_write(void *priv, uint8_t *data, int count)
|
|
{
|
|
USBRedirDevice *dev = priv;
|
|
+ int r;
|
|
|
|
- if (!dev->cs->opened) {
|
|
+ if (!dev->cs->opened || dev->cs->write_blocked) {
|
|
return 0;
|
|
}
|
|
|
|
- return qemu_chr_fe_write(dev->cs, data, count);
|
|
+ r = qemu_chr_fe_write(dev->cs, data, count);
|
|
+
|
|
+ if (r < 0) {
|
|
+ if (dev->cs->write_blocked) {
|
|
+ return 0;
|
|
+ }
|
|
+ return -1;
|
|
+ }
|
|
+
|
|
+ return r;
|
|
}
|
|
|
|
/*
|
|
@@ -890,10 +900,22 @@ static void usbredir_chardev_event(void *opaque, int event)
|
|
}
|
|
}
|
|
|
|
+static void usbredir_chardev_write_unblocked(void *opaque)
|
|
+{
|
|
+ USBRedirDevice *dev = opaque;
|
|
+
|
|
+ if (dev->parser == NULL) {
|
|
+ /* usbredir_open_close_bh hasn't handled the open event yet */
|
|
+ return;
|
|
+ }
|
|
+ usbredirparser_do_write(dev->parser);
|
|
+}
|
|
+
|
|
static const QemuChrHandlers usbredir_chr_handlers = {
|
|
.fd_can_read = usbredir_chardev_can_read,
|
|
.fd_read = usbredir_chardev_read,
|
|
.fd_event = usbredir_chardev_event,
|
|
+ .fd_write_unblocked = usbredir_chardev_write_unblocked,
|
|
};
|
|
|
|
/*
|
|
--
|
|
1.7.10.4
|
|
|