Skip to contentSkip to conversation

Release usb devices on shutdown and usb_del

PATCH In review Shahar Havivi 3 participants 5 messages Jun 16, 2010 – Jun 30, 2010

lore
Share & tools
lore
#0 lore raw

v5 cover Release usb devices on shutdown and usb_del

v5:
Fix to Gerd Hoffmann comments on v4.

Shahar Havivi (2):
Return usb device to host on usb_del command
Return usb device to host on exit

 usb-linux.c |   15 +++++++++++++++
 1 files changed, 15 insertions(+), 0 deletions(-)
#1 lore raw

PATCH v5 1/2 Return usb device to host on usb_del command

---
 usb-linux.c |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)
usb-linux.c +1 -0
index 88273ff..22a85e3 100644
@@ -991,6 +991,7 @@ static int usb_host_close(USBHostDevice *dev)
     async_complete(dev);
     dev->closing = 0;
     usb_device_detach(&dev->dev);
+    ioctl(dev->fd, USBDEVFS_RESET);
     close(dev->fd);
     dev->fd = -1;
     return 0;
Signature · 1 line
1.7.0.4
#2 lore raw

PATCH v5 2/2 Return usb device to host on exit

In reply to Shahar Havivi
---
 usb-linux.c |   14 ++++++++++++++
 1 files changed, 14 insertions(+), 0 deletions(-)
usb-linux.c +14 -0
index 22a85e3..c3c38ec 100644
@@ -33,6 +33,7 @@
 #include "qemu-common.h"
 #include "qemu-timer.h"
 #include "monitor.h"
+#include "sysemu.h"
 
 #include <dirent.h>
 #include <sys/ioctl.h>
@@ -132,6 +133,7 @@ typedef struct USBHostDevice {
     int       configuration;
     int       ninterfaces;
     int       closing;
+    Notifier  exit;
 
     struct ctrl_struct ctrl;
     struct endp_data endp_table[MAX_ENDPOINTS];
@@ -404,6 +406,7 @@ static void usb_host_handle_destroy(USBDevice *dev)
 
     usb_host_close(s);
     QTAILQ_REMOVE(&hostdevs, s, next);
+    qemu_remove_exit_notifier(&s->exit);
 }
 
 static int usb_linux_update_endp_table(USBHostDevice *s);
@@ -997,6 +1000,15 @@ static int usb_host_close(USBHostDevice *dev)
     return 0;
 }
 
+static void usb_host_exit_notifier(struct Notifier* n)
+{
+    USBHostDevice *s = container_of(n, USBHostDevice, exit);
+
+    if (s->fd != -1) {
+        ioctl(s->fd, USBDEVFS_RESET);
+    }
+}
+
 static int usb_host_initfn(USBDevice *dev)
 {
     USBHostDevice *s = DO_UPCAST(USBHostDevice, dev, dev);
@@ -1004,6 +1016,8 @@ static int usb_host_initfn(USBDevice *dev)
     dev->auto_attach = 0;
     s->fd = -1;
     QTAILQ_INSERT_TAIL(&hostdevs, s, next);
+    s->exit.notify = usb_host_exit_notifier;
+    qemu_add_exit_notifier(&s->exit);
     usb_host_auto_check(NULL);
     return 0;
 }
Signature · 1 line
1.7.0.4
#4 lore raw
In reply to Shahar Havivi
Quoted 12 lines · Shahar Havivi

v5:
Fix to Gerd Hoffmann comments on v4.

Shahar Havivi (2):
Return usb device to host on usb_del command
Return usb device to host on exit

 usb-linux.c |   15 +++++++++++++++
 1 files changed, 15 insertions(+), 0 deletions(-)

Thanks, both applied.

Signature · 2 lines
Aurelien Jarno                          GPG: 1024D/F1BCDB73
[email protected]                 http://www.aurel32.net