From ec02df3bb9027691957218e5ea07c4febb007cec Mon Sep 17 00:00:00 2001
From: michaellee8 <
address@hidden>
Date: Tue, 7 Apr 2020 10:19:27 +0800
Subject: [PATCH] usbredir: introduce new parameters to configure guest reset
behavior for usbredir device
This patch solves the same problem of usb device reset loop as mentioned in ba4c735b4fc7,
but for usbredir device instead. This allows my iPad device to be redirected to my
Mac OS X Catalina guest via SPICE.
However, this patch does not solve everything, it will require further work on the
client-side spice viewers to be useful. I have already opened issues in different
components that will require changes in order to make this patch useful.
Cross-references:
-
https://bugzilla.redhat.com/show_bug.cgi?id=1821518-
https://bugzilla.redhat.com/show_bug.cgi?id=1821517-
https://gitlab.freedesktop.org/spice/usbredir/-/issues/10-
https://bugs.launchpad.net/bugs/1871270Signed-off-by: michaellee8 <
address@hidden>
---
hw/usb/redirect.c | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/hw/usb/redirect.c b/hw/usb/redirect.c
index 45d8b76218..1cb04cebf6 100644
--- a/hw/usb/redirect.c
+++ b/hw/usb/redirect.c
@@ -115,6 +115,8 @@ struct USBRedirDevice {
bool enable_streams;
bool suppress_remote_wake;
bool in_write;
+ bool allow_one_guest_reset;
+ bool allow_all_guest_resets;
uint8_t debug;
int32_t bootindex;
char *filter_str;
@@ -516,6 +518,13 @@ static void usbredir_handle_reset(USBDevice *udev)
{
USBRedirDevice *dev = USB_REDIRECT(udev);
+ if (!dev->allow_one_guest_reset && !dev->allow_all_guest_resets) {
+ return;
+ }
+ if (!dev->allow_all_guest_resets && udev->addr == 0) {
+ return;
+ }
+
DPRINTF("reset device\n");
usbredirparser_send_reset(dev->parser);
usbredirparser_do_write(dev->parser);
@@ -2564,6 +2573,10 @@ static Property usbredir_properties[] = {
DEFINE_PROP_BOOL("streams", USBRedirDevice, enable_streams, true),
DEFINE_PROP_BOOL("suppress-remote-wake", USBRedirDevice,
suppress_remote_wake, true),
+ DEFINE_PROP_BOOL("guest-reset", USBRedirDevice,
+ allow_one_guest_reset, true),
+ DEFINE_PROP_BOOL("guest-resets-all", USBRedirDevice,
+ allow_all_guest_resets, false),
DEFINE_PROP_END_OF_LIST(),
};
--
2.17.1