All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] usb-redir: Add flow control support v2 + one more fix
@ 2013-03-19 13:54 Hans de Goede
  2013-03-19 13:54 ` [Qemu-devel] [PATCH 1/2] usb-redir: Add flow control support Hans de Goede
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Hans de Goede @ 2013-03-19 13:54 UTC (permalink / raw)
  To: Gerd Hoffmann; +Cc: qemu-devel

Here is v2 of the "usb-redir: Add flow control support" patch
with the checkpatch issue fixed + one other usb-redir bugfix.

Regards,

Hans

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

* [Qemu-devel] [PATCH 1/2] usb-redir: Add flow control support
  2013-03-19 13:54 [Qemu-devel] usb-redir: Add flow control support v2 + one more fix Hans de Goede
@ 2013-03-19 13:54 ` Hans de Goede
  2013-03-19 13:54 ` [Qemu-devel] [PATCH 2/2] usb-redir: Fix crash on migration with no client connected Hans de Goede
  2013-03-19 14:06 ` [Qemu-devel] usb-redir: Add flow control support v2 + one more fix Gerd Hoffmann
  2 siblings, 0 replies; 4+ messages in thread
From: Hans de Goede @ 2013-03-19 13:54 UTC (permalink / raw)
  To: Gerd Hoffmann; +Cc: Hans de Goede, qemu-devel

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
---
 hw/usb/redirect.c | 33 ++++++++++++++++++++++++++++++++-
 1 file changed, 32 insertions(+), 1 deletion(-)

diff --git a/hw/usb/redirect.c b/hw/usb/redirect.c
index c519b9b..0b2a5e6 100644
--- a/hw/usb/redirect.c
+++ b/hw/usb/redirect.c
@@ -104,6 +104,8 @@ struct USBRedirDevice {
     /* Data passed from chardev the fd_read cb to the usbredirparser read cb */
     const uint8_t *read_buf;
     int read_buf_size;
+    /* Active chardev-watch-tag */
+    guint watch;
     /* For async handling of close */
     QEMUBH *chardev_close_bh;
     /* To delay the usb attach in case of quick chardev close + open */
@@ -254,9 +256,21 @@ static int usbredir_read(void *priv, uint8_t *data, int count)
     return count;
 }
 
+static gboolean usbredir_write_unblocked(GIOChannel *chan, GIOCondition cond,
+                                         void *opaque)
+{
+    USBRedirDevice *dev = opaque;
+
+    dev->watch = 0;
+    usbredirparser_do_write(dev->parser);
+
+    return FALSE;
+}
+
 static int usbredir_write(void *priv, uint8_t *data, int count)
 {
     USBRedirDevice *dev = priv;
+    int r;
 
     if (!dev->cs->opened) {
         return 0;
@@ -267,7 +281,17 @@ static int usbredir_write(void *priv, uint8_t *data, int count)
         return 0;
     }
 
-    return qemu_chr_fe_write(dev->cs, data, count);
+    r = qemu_chr_fe_write(dev->cs, data, count);
+    if (r < count) {
+        if (!dev->watch) {
+            dev->watch = qemu_chr_fe_add_watch(dev->cs, G_IO_OUT,
+                                               usbredir_write_unblocked, dev);
+        }
+        if (r < 0) {
+            r = 0;
+        }
+    }
+    return r;
 }
 
 /*
@@ -1085,6 +1109,10 @@ static void usbredir_chardev_close_bh(void *opaque)
         usbredirparser_destroy(dev->parser);
         dev->parser = NULL;
     }
+    if (dev->watch) {
+        g_source_remove(dev->watch);
+        dev->watch = 0;
+    }
 }
 
 static void usbredir_create_parser(USBRedirDevice *dev)
@@ -1319,6 +1347,9 @@ static void usbredir_handle_destroy(USBDevice *udev)
     if (dev->parser) {
         usbredirparser_destroy(dev->parser);
     }
+    if (dev->watch) {
+        g_source_remove(dev->watch);
+    }
 
     free(dev->filter_rules);
 }
-- 
1.8.1.4

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

* [Qemu-devel] [PATCH 2/2] usb-redir: Fix crash on migration with no client connected
  2013-03-19 13:54 [Qemu-devel] usb-redir: Add flow control support v2 + one more fix Hans de Goede
  2013-03-19 13:54 ` [Qemu-devel] [PATCH 1/2] usb-redir: Add flow control support Hans de Goede
@ 2013-03-19 13:54 ` Hans de Goede
  2013-03-19 14:06 ` [Qemu-devel] usb-redir: Add flow control support v2 + one more fix Gerd Hoffmann
  2 siblings, 0 replies; 4+ messages in thread
From: Hans de Goede @ 2013-03-19 13:54 UTC (permalink / raw)
  To: Gerd Hoffmann; +Cc: Hans de Goede, qemu-devel

If no client is connected on the src side, then we won't receive a
parser during migrate, in this case usbredir_post_load() should be a nop,
rather then to try to derefefence the NULL dev->parser pointer.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
---
 hw/usb/redirect.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/hw/usb/redirect.c b/hw/usb/redirect.c
index 0b2a5e6..e0df74b 100644
--- a/hw/usb/redirect.c
+++ b/hw/usb/redirect.c
@@ -2006,6 +2006,10 @@ static int usbredir_post_load(void *priv, int version_id)
 {
     USBRedirDevice *dev = priv;
 
+    if (dev->parser == NULL) {
+        return 0;
+    }
+
     switch (dev->device_info.speed) {
     case usb_redir_speed_low:
         dev->dev.speed = USB_SPEED_LOW;
-- 
1.8.1.4

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

* Re: [Qemu-devel] usb-redir: Add flow control support v2 + one more fix
  2013-03-19 13:54 [Qemu-devel] usb-redir: Add flow control support v2 + one more fix Hans de Goede
  2013-03-19 13:54 ` [Qemu-devel] [PATCH 1/2] usb-redir: Add flow control support Hans de Goede
  2013-03-19 13:54 ` [Qemu-devel] [PATCH 2/2] usb-redir: Fix crash on migration with no client connected Hans de Goede
@ 2013-03-19 14:06 ` Gerd Hoffmann
  2 siblings, 0 replies; 4+ messages in thread
From: Gerd Hoffmann @ 2013-03-19 14:06 UTC (permalink / raw)
  To: Hans de Goede; +Cc: qemu-devel

On 03/19/13 14:54, Hans de Goede wrote:
> Here is v2 of the "usb-redir: Add flow control support" patch
> with the checkpatch issue fixed + one other usb-redir bugfix.

Added #1, #2 is already in the usb queue (yes, I should flush it ...).

cheers,
  Gerd

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

end of thread, other threads:[~2013-03-19 14:06 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-03-19 13:54 [Qemu-devel] usb-redir: Add flow control support v2 + one more fix Hans de Goede
2013-03-19 13:54 ` [Qemu-devel] [PATCH 1/2] usb-redir: Add flow control support Hans de Goede
2013-03-19 13:54 ` [Qemu-devel] [PATCH 2/2] usb-redir: Fix crash on migration with no client connected Hans de Goede
2013-03-19 14:06 ` [Qemu-devel] usb-redir: Add flow control support v2 + one more fix Gerd Hoffmann

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.