* [Qemu-devel] [PATCHES for 1.0] various spice usb-redir integration patches
@ 2011-11-19 9:22 Hans de Goede
2011-11-19 9:22 ` [Qemu-devel] [PATCH 1/5] qemu-char: rename qemu_chr_event to qemu_chr_be_event and make it public Hans de Goede
` (6 more replies)
0 siblings, 7 replies; 9+ messages in thread
From: Hans de Goede @ 2011-11-19 9:22 UTC (permalink / raw)
To: Gerd Hoffmann; +Cc: qemu-devel
Hi All,
Sorry for sending these in so late, I send most of them in before a long time
ago, but then they got stuck on waiting for the big chardev rewrite. Since it
seems clear now that the big chardev rewrite won't happen before 1.0, I would
like to get these into 1.0 as is.
Thanks & Regards,
Hans
^ permalink raw reply [flat|nested] 9+ messages in thread
* [Qemu-devel] [PATCH 1/5] qemu-char: rename qemu_chr_event to qemu_chr_be_event and make it public
2011-11-19 9:22 [Qemu-devel] [PATCHES for 1.0] various spice usb-redir integration patches Hans de Goede
@ 2011-11-19 9:22 ` Hans de Goede
2011-11-19 9:22 ` [Qemu-devel] [PATCH 2/5] spice-qemu-char: Generate chardev open/close events Hans de Goede
` (5 subsequent siblings)
6 siblings, 0 replies; 9+ messages in thread
From: Hans de Goede @ 2011-11-19 9:22 UTC (permalink / raw)
To: Gerd Hoffmann; +Cc: Hans de Goede, qemu-devel
Rename qemu_chr_event to qemu_chr_be_event, since it is only to be
called by backends and make it public so that it can be used by chardev
code which lives outside of qemu-char.c
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
---
qemu-char.c | 26 +++++++++++++-------------
qemu-char.h | 10 ++++++++++
2 files changed, 23 insertions(+), 13 deletions(-)
diff --git a/qemu-char.c b/qemu-char.c
index b562bf8..27abcb9 100644
--- a/qemu-char.c
+++ b/qemu-char.c
@@ -106,7 +106,7 @@
static QTAILQ_HEAD(CharDriverStateHead, CharDriverState) chardevs =
QTAILQ_HEAD_INITIALIZER(chardevs);
-static void qemu_chr_event(CharDriverState *s, int event)
+void qemu_chr_be_event(CharDriverState *s, int event)
{
/* Keep track if the char device is open */
switch (event) {
@@ -126,7 +126,7 @@ static void qemu_chr_event(CharDriverState *s, int event)
static void qemu_chr_generic_open_bh(void *opaque)
{
CharDriverState *s = opaque;
- qemu_chr_event(s, CHR_EVENT_OPENED);
+ qemu_chr_be_event(s, CHR_EVENT_OPENED);
qemu_bh_delete(s->bh);
s->bh = NULL;
}
@@ -359,7 +359,7 @@ static int mux_proc_byte(CharDriverState *chr, MuxDriver *d, int ch)
bdrv_commit_all();
break;
case 'b':
- qemu_chr_event(chr, CHR_EVENT_BREAK);
+ qemu_chr_be_event(chr, CHR_EVENT_BREAK);
break;
case 'c':
/* Switch to the next registered device */
@@ -580,7 +580,7 @@ static void fd_chr_read(void *opaque)
if (size == 0) {
/* FD has been closed. Remove it from the active list. */
qemu_set_fd_handler2(s->fd_in, NULL, NULL, NULL, NULL);
- qemu_chr_event(chr, CHR_EVENT_CLOSED);
+ qemu_chr_be_event(chr, CHR_EVENT_CLOSED);
return;
}
if (size > 0) {
@@ -613,7 +613,7 @@ static void fd_chr_close(struct CharDriverState *chr)
}
g_free(s);
- qemu_chr_event(chr, CHR_EVENT_CLOSED);
+ qemu_chr_be_event(chr, CHR_EVENT_CLOSED);
}
/* open a character device to a unix fd */
@@ -715,7 +715,7 @@ static void stdio_read(void *opaque)
if (size == 0) {
/* stdin has been closed. Remove it from the active list. */
qemu_set_fd_handler2(0, NULL, NULL, NULL, NULL);
- qemu_chr_event(chr, CHR_EVENT_CLOSED);
+ qemu_chr_be_event(chr, CHR_EVENT_CLOSED);
return;
}
if (size > 0) {
@@ -977,7 +977,7 @@ static void pty_chr_close(struct CharDriverState *chr)
qemu_del_timer(s->timer);
qemu_free_timer(s->timer);
g_free(s);
- qemu_chr_event(chr, CHR_EVENT_CLOSED);
+ qemu_chr_be_event(chr, CHR_EVENT_CLOSED);
}
static int qemu_chr_open_pty(QemuOpts *opts, CharDriverState **_chr)
@@ -1355,7 +1355,7 @@ static void pp_close(CharDriverState *chr)
ioctl(fd, PPRELEASE);
close(fd);
g_free(drv);
- qemu_chr_event(chr, CHR_EVENT_CLOSED);
+ qemu_chr_be_event(chr, CHR_EVENT_CLOSED);
}
static int qemu_chr_open_pp(QemuOpts *opts, CharDriverState **_chr)
@@ -1500,7 +1500,7 @@ static void win_chr_close(CharDriverState *chr)
else
qemu_del_polling_cb(win_chr_poll, chr);
- qemu_chr_event(chr, CHR_EVENT_CLOSED);
+ qemu_chr_be_event(chr, CHR_EVENT_CLOSED);
}
static int win_chr_init(CharDriverState *chr, const char *filename)
@@ -2108,7 +2108,7 @@ static void udp_chr_close(CharDriverState *chr)
closesocket(s->fd);
}
g_free(s);
- qemu_chr_event(chr, CHR_EVENT_CLOSED);
+ qemu_chr_be_event(chr, CHR_EVENT_CLOSED);
}
static int qemu_chr_open_udp(QemuOpts *opts, CharDriverState **_chr)
@@ -2213,7 +2213,7 @@ static void tcp_chr_process_IAC_bytes(CharDriverState *chr,
} else {
if ((unsigned char)buf[i] == IAC_BREAK && s->do_telnetopt == 2) {
/* Handle IAC break commands by sending a serial break */
- qemu_chr_event(chr, CHR_EVENT_BREAK);
+ qemu_chr_be_event(chr, CHR_EVENT_BREAK);
s->do_telnetopt++;
}
s->do_telnetopt++;
@@ -2321,7 +2321,7 @@ static void tcp_chr_read(void *opaque)
qemu_set_fd_handler2(s->fd, NULL, NULL, NULL, NULL);
closesocket(s->fd);
s->fd = -1;
- qemu_chr_event(chr, CHR_EVENT_CLOSED);
+ qemu_chr_be_event(chr, CHR_EVENT_CLOSED);
} else if (size > 0) {
if (s->do_telnetopt)
tcp_chr_process_IAC_bytes(chr, s, buf, &size);
@@ -2433,7 +2433,7 @@ static void tcp_chr_close(CharDriverState *chr)
closesocket(s->listen_fd);
}
g_free(s);
- qemu_chr_event(chr, CHR_EVENT_CLOSED);
+ qemu_chr_be_event(chr, CHR_EVENT_CLOSED);
}
static int qemu_chr_open_socket(QemuOpts *opts, CharDriverState **_chr)
diff --git a/qemu-char.h b/qemu-char.h
index 7efcf99..8ca1e2d 100644
--- a/qemu-char.h
+++ b/qemu-char.h
@@ -212,6 +212,16 @@ int qemu_chr_be_can_write(CharDriverState *s);
*/
void qemu_chr_be_write(CharDriverState *s, uint8_t *buf, int len);
+
+/**
+ * @qemu_chr_be_event:
+ *
+ * Send an event from the back end to the front end.
+ *
+ * @event the event to send
+ */
+void qemu_chr_be_event(CharDriverState *s, int event);
+
void qemu_chr_add_handlers(CharDriverState *s,
IOCanReadHandler *fd_can_read,
IOReadHandler *fd_read,
--
1.7.7.3
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [Qemu-devel] [PATCH 2/5] spice-qemu-char: Generate chardev open/close events
2011-11-19 9:22 [Qemu-devel] [PATCHES for 1.0] various spice usb-redir integration patches Hans de Goede
2011-11-19 9:22 ` [Qemu-devel] [PATCH 1/5] qemu-char: rename qemu_chr_event to qemu_chr_be_event and make it public Hans de Goede
@ 2011-11-19 9:22 ` Hans de Goede
2011-11-19 9:22 ` [Qemu-devel] [PATCH 3/5] usb-redir: Call qemu_chr_fe_open/close Hans de Goede
` (4 subsequent siblings)
6 siblings, 0 replies; 9+ messages in thread
From: Hans de Goede @ 2011-11-19 9:22 UTC (permalink / raw)
To: Gerd Hoffmann; +Cc: Hans de Goede, qemu-devel
Define a state callback and make that generate chardev open/close events when
called by the spice-server.
Notes:
1) For all but the newest spice-server versions (which have a fix for this)
the code ignores these events for a spicevmc with a subtype of vdagent, this
subtype specific knowledge is undesirable, but unavoidable for now, see:
http://lists.freedesktop.org/archives/spice-devel/2011-July/004837.html
2) This code deliberately sends the events immediately rather then from a
bh. This is done this way because:
a) There is no need to do it from a bh; and
b) Doing it from a bh actually causes issues because the spice-server may send
data immediately after the open and when the open runs from a bh, then
qemu_chr_be_can_write will return 0 for the first write which the spice-server
does not expect, when this happens the spice-server will never retry the write
causing communication to stall.
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
---
spice-qemu-char.c | 36 +++++++++++++++++++++++++++++++++++-
1 files changed, 35 insertions(+), 1 deletions(-)
diff --git a/spice-qemu-char.c b/spice-qemu-char.c
index ac52202..7e8eaa9 100644
--- a/spice-qemu-char.c
+++ b/spice-qemu-char.c
@@ -69,11 +69,40 @@ static int vmc_read(SpiceCharDeviceInstance *sin, uint8_t *buf, int len)
return bytes;
}
+static void vmc_state(SpiceCharDeviceInstance *sin, int connected)
+{
+ SpiceCharDriver *scd = container_of(sin, SpiceCharDriver, sin);
+
+#if SPICE_SERVER_VERSION < 0x000901
+ /*
+ * spice-server calls the state callback for the agent channel when the
+ * spice client connects / disconnects. Given that not the client but
+ * the server is doing the parsing of the messages this is wrong as the
+ * server is still listening. Worse, this causes the parser in the server
+ * to go out of sync, so we ignore state calls for subtype vdagent
+ * spicevmc chardevs. For the full story see:
+ * http://lists.freedesktop.org/archives/spice-devel/2011-July/004837.html
+ */
+ if (strcmp(sin->subtype, "vdagent") == 0) {
+ return;
+ }
+#endif
+
+ if ((scd->chr->opened && connected) ||
+ (!scd->chr->opened && !connected)) {
+ return;
+ }
+
+ qemu_chr_be_event(scd->chr,
+ connected ? CHR_EVENT_OPENED : CHR_EVENT_CLOSED);
+}
+
static SpiceCharDeviceInterface vmc_interface = {
.base.type = SPICE_INTERFACE_CHAR_DEVICE,
.base.description = "spice virtual channel char device",
.base.major_version = SPICE_INTERFACE_CHAR_DEVICE_MAJOR,
.base.minor_version = SPICE_INTERFACE_CHAR_DEVICE_MINOR,
+ .state = vmc_state,
.write = vmc_write,
.read = vmc_read,
};
@@ -197,7 +226,12 @@ int qemu_chr_open_spice(QemuOpts *opts, CharDriverState **_chr)
chr->chr_guest_open = spice_chr_guest_open;
chr->chr_guest_close = spice_chr_guest_close;
- qemu_chr_generic_open(chr);
+#if SPICE_SERVER_VERSION < 0x000901
+ /* See comment in vmc_state() */
+ if (strcmp(subtype, "vdagent") == 0) {
+ qemu_chr_generic_open(chr);
+ }
+#endif
*_chr = chr;
return 0;
--
1.7.7.3
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [Qemu-devel] [PATCH 3/5] usb-redir: Call qemu_chr_fe_open/close
2011-11-19 9:22 [Qemu-devel] [PATCHES for 1.0] various spice usb-redir integration patches Hans de Goede
2011-11-19 9:22 ` [Qemu-devel] [PATCH 1/5] qemu-char: rename qemu_chr_event to qemu_chr_be_event and make it public Hans de Goede
2011-11-19 9:22 ` [Qemu-devel] [PATCH 2/5] spice-qemu-char: Generate chardev open/close events Hans de Goede
@ 2011-11-19 9:22 ` Hans de Goede
2011-11-19 9:22 ` [Qemu-devel] [PATCH 4/5] usb-redir: Device disconnect + re-connect robustness fixes Hans de Goede
` (3 subsequent siblings)
6 siblings, 0 replies; 9+ messages in thread
From: Hans de Goede @ 2011-11-19 9:22 UTC (permalink / raw)
To: Gerd Hoffmann; +Cc: Hans de Goede, qemu-devel
To let the chardev now we're ready start receiving data. This is necessary
with the spicevmc chardev to get it registered with the spice-server.
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
---
usb-redir.c | 3 +++
1 files changed, 3 insertions(+), 0 deletions(-)
diff --git a/usb-redir.c b/usb-redir.c
index c74b156..9e13410 100644
--- a/usb-redir.c
+++ b/usb-redir.c
@@ -814,6 +814,8 @@ static int usbredir_initfn(USBDevice *udev)
/* We'll do the attach once we receive the speed from the usb-host */
udev->auto_attach = 0;
+ /* Let the backend know we are ready */
+ qemu_chr_fe_open(dev->cs);
qemu_chr_add_handlers(dev->cs, usbredir_chardev_can_read,
usbredir_chardev_read, usbredir_chardev_event, dev);
@@ -837,6 +839,7 @@ static void usbredir_handle_destroy(USBDevice *udev)
{
USBRedirDevice *dev = DO_UPCAST(USBRedirDevice, dev, udev);
+ qemu_chr_fe_close(dev->cs);
qemu_chr_delete(dev->cs);
/* Note must be done after qemu_chr_close, as that causes a close event */
qemu_bh_delete(dev->open_close_bh);
--
1.7.7.3
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [Qemu-devel] [PATCH 4/5] usb-redir: Device disconnect + re-connect robustness fixes
2011-11-19 9:22 [Qemu-devel] [PATCHES for 1.0] various spice usb-redir integration patches Hans de Goede
` (2 preceding siblings ...)
2011-11-19 9:22 ` [Qemu-devel] [PATCH 3/5] usb-redir: Call qemu_chr_fe_open/close Hans de Goede
@ 2011-11-19 9:22 ` Hans de Goede
2011-11-19 9:22 ` [Qemu-devel] [PATCH 5/5] usb-redir: Don't try to write to the chardev after a close event Hans de Goede
` (2 subsequent siblings)
6 siblings, 0 replies; 9+ messages in thread
From: Hans de Goede @ 2011-11-19 9:22 UTC (permalink / raw)
To: Gerd Hoffmann; +Cc: Hans de Goede, qemu-devel
These fixes mainly target the other side sending some (error status)
packets after a disconnect packet. In some cases these would get queued
up and then reported to the controller when a new device gets connected.
* Fully reset device state on disconnect
* Don't allow a connect message when already connected
* Ignore iso and interrupt status messages when disconnected
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
---
usb-redir.c | 22 +++++++++++++++++++++-
1 files changed, 21 insertions(+), 1 deletions(-)
diff --git a/usb-redir.c b/usb-redir.c
index 9e13410..24fdd31 100644
--- a/usb-redir.c
+++ b/usb-redir.c
@@ -881,6 +881,11 @@ static void usbredir_device_connect(void *priv,
{
USBRedirDevice *dev = priv;
+ if (qemu_timer_pending(dev->attach_timer) || dev->dev.attached) {
+ ERROR("Received device connect while already connected\n");
+ return;
+ }
+
switch (device_connect->speed) {
case usb_redir_speed_low:
DPRINTF("attaching low speed device\n");
@@ -909,19 +914,26 @@ static void usbredir_device_connect(void *priv,
static void usbredir_device_disconnect(void *priv)
{
USBRedirDevice *dev = priv;
+ int i;
/* Stop any pending attaches */
qemu_del_timer(dev->attach_timer);
if (dev->dev.attached) {
usb_device_detach(&dev->dev);
- usbredir_cleanup_device_queues(dev);
/*
* Delay next usb device attach to give the guest a chance to see
* see the detach / attach in case of quick close / open succession
*/
dev->next_attach_time = qemu_get_clock_ms(vm_clock) + 200;
}
+
+ /* Reset state so that the next dev connected starts with a clean slate */
+ usbredir_cleanup_device_queues(dev);
+ memset(dev->endpoint, 0, sizeof(dev->endpoint));
+ for (i = 0; i < MAX_ENDPOINTS; i++) {
+ QTAILQ_INIT(&dev->endpoint[i].bufpq);
+ }
}
static void usbredir_interface_info(void *priv,
@@ -1013,6 +1025,10 @@ static void usbredir_iso_stream_status(void *priv, uint32_t id,
DPRINTF("iso status %d ep %02X id %u\n", iso_stream_status->status,
ep, id);
+ if (!dev->dev.attached) {
+ return;
+ }
+
dev->endpoint[EP2I(ep)].iso_error = iso_stream_status->status;
if (iso_stream_status->status == usb_redir_stall) {
DPRINTF("iso stream stopped by peer ep %02X\n", ep);
@@ -1030,6 +1046,10 @@ static void usbredir_interrupt_receiving_status(void *priv, uint32_t id,
DPRINTF("interrupt recv status %d ep %02X id %u\n",
interrupt_receiving_status->status, ep, id);
+ if (!dev->dev.attached) {
+ return;
+ }
+
dev->endpoint[EP2I(ep)].interrupt_error =
interrupt_receiving_status->status;
if (interrupt_receiving_status->status == usb_redir_stall) {
--
1.7.7.3
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [Qemu-devel] [PATCH 5/5] usb-redir: Don't try to write to the chardev after a close event
2011-11-19 9:22 [Qemu-devel] [PATCHES for 1.0] various spice usb-redir integration patches Hans de Goede
` (3 preceding siblings ...)
2011-11-19 9:22 ` [Qemu-devel] [PATCH 4/5] usb-redir: Device disconnect + re-connect robustness fixes Hans de Goede
@ 2011-11-19 9:22 ` Hans de Goede
2011-11-21 21:05 ` [Qemu-devel] [PATCHES for 1.0] various spice usb-redir integration patches Anthony Liguori
2011-11-28 22:34 ` Anthony Liguori
6 siblings, 0 replies; 9+ messages in thread
From: Hans de Goede @ 2011-11-19 9:22 UTC (permalink / raw)
To: Gerd Hoffmann; +Cc: Hans de Goede, qemu-devel
Since we handle close async in a bh, do_write and thus write can get
called after receiving a close event. This patch adds a check to
the usb-redir write callback to not call qemu_chr_fe_write on a closed
backend.
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
---
usb-redir.c | 4 ++++
1 files changed, 4 insertions(+), 0 deletions(-)
diff --git a/usb-redir.c b/usb-redir.c
index 24fdd31..fb91c92 100644
--- a/usb-redir.c
+++ b/usb-redir.c
@@ -225,6 +225,10 @@ static int usbredir_write(void *priv, uint8_t *data, int count)
{
USBRedirDevice *dev = priv;
+ if (!dev->cs->opened) {
+ return 0;
+ }
+
return qemu_chr_fe_write(dev->cs, data, count);
}
--
1.7.7.3
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [Qemu-devel] [PATCHES for 1.0] various spice usb-redir integration patches
2011-11-19 9:22 [Qemu-devel] [PATCHES for 1.0] various spice usb-redir integration patches Hans de Goede
` (4 preceding siblings ...)
2011-11-19 9:22 ` [Qemu-devel] [PATCH 5/5] usb-redir: Don't try to write to the chardev after a close event Hans de Goede
@ 2011-11-21 21:05 ` Anthony Liguori
2011-11-22 16:36 ` Gerd Hoffmann
2011-11-28 22:34 ` Anthony Liguori
6 siblings, 1 reply; 9+ messages in thread
From: Anthony Liguori @ 2011-11-21 21:05 UTC (permalink / raw)
To: Hans de Goede; +Cc: Gerd Hoffmann, qemu-devel
On 11/19/2011 03:22 AM, Hans de Goede wrote:
> Hi All,
>
> Sorry for sending these in so late, I send most of them in before a long time
> ago, but then they got stuck on waiting for the big chardev rewrite. Since it
> seems clear now that the big chardev rewrite won't happen before 1.0, I would
> like to get these into 1.0 as is.
This seems pretty well isolated. I'm not going to put this in -rc3 because I'd
like to see Gerd at least Ack 2/5. Once it has an Ack, I'll take it either for
-rc4 or for 1.0.z.
Regards,
Anthony Liguori
>
> Thanks& Regards,
>
> Hans
>
>
>
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [Qemu-devel] [PATCHES for 1.0] various spice usb-redir integration patches
2011-11-21 21:05 ` [Qemu-devel] [PATCHES for 1.0] various spice usb-redir integration patches Anthony Liguori
@ 2011-11-22 16:36 ` Gerd Hoffmann
0 siblings, 0 replies; 9+ messages in thread
From: Gerd Hoffmann @ 2011-11-22 16:36 UTC (permalink / raw)
To: Anthony Liguori; +Cc: Hans de Goede, qemu-devel
On 11/21/11 22:05, Anthony Liguori wrote:
> On 11/19/2011 03:22 AM, Hans de Goede wrote:
>> Hi All,
>>
>> Sorry for sending these in so late, I send most of them in before a
>> long time
>> ago, but then they got stuck on waiting for the big chardev rewrite.
>> Since it
>> seems clear now that the big chardev rewrite won't happen before 1.0,
>> I would
>> like to get these into 1.0 as is.
>
> This seems pretty well isolated. I'm not going to put this in -rc3
> because I'd like to see Gerd at least Ack 2/5. Once it has an Ack, I'll
> take it either for -rc4 or for 1.0.z.
Series looks good.
Acked-by: Gerd Hoffmann <kraxel@redhat.com>
cheers,
Gerd
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [Qemu-devel] [PATCHES for 1.0] various spice usb-redir integration patches
2011-11-19 9:22 [Qemu-devel] [PATCHES for 1.0] various spice usb-redir integration patches Hans de Goede
` (5 preceding siblings ...)
2011-11-21 21:05 ` [Qemu-devel] [PATCHES for 1.0] various spice usb-redir integration patches Anthony Liguori
@ 2011-11-28 22:34 ` Anthony Liguori
6 siblings, 0 replies; 9+ messages in thread
From: Anthony Liguori @ 2011-11-28 22:34 UTC (permalink / raw)
To: Hans de Goede; +Cc: Gerd Hoffmann, qemu-devel
On 11/19/2011 03:22 AM, Hans de Goede wrote:
> Hi All,
>
> Sorry for sending these in so late, I send most of them in before a long time
> ago, but then they got stuck on waiting for the big chardev rewrite. Since it
> seems clear now that the big chardev rewrite won't happen before 1.0, I would
> like to get these into 1.0 as is.
Applied all. Thanks.
Regards,
Anthony Liguori
>
> Thanks& Regards,
>
> Hans
>
>
>
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2011-11-28 22:34 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-11-19 9:22 [Qemu-devel] [PATCHES for 1.0] various spice usb-redir integration patches Hans de Goede
2011-11-19 9:22 ` [Qemu-devel] [PATCH 1/5] qemu-char: rename qemu_chr_event to qemu_chr_be_event and make it public Hans de Goede
2011-11-19 9:22 ` [Qemu-devel] [PATCH 2/5] spice-qemu-char: Generate chardev open/close events Hans de Goede
2011-11-19 9:22 ` [Qemu-devel] [PATCH 3/5] usb-redir: Call qemu_chr_fe_open/close Hans de Goede
2011-11-19 9:22 ` [Qemu-devel] [PATCH 4/5] usb-redir: Device disconnect + re-connect robustness fixes Hans de Goede
2011-11-19 9:22 ` [Qemu-devel] [PATCH 5/5] usb-redir: Don't try to write to the chardev after a close event Hans de Goede
2011-11-21 21:05 ` [Qemu-devel] [PATCHES for 1.0] various spice usb-redir integration patches Anthony Liguori
2011-11-22 16:36 ` Gerd Hoffmann
2011-11-28 22:34 ` Anthony Liguori
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.