qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [RfC PATCH] usb/vmstate: add parent dev path


From: Gerd Hoffmann
Subject: [Qemu-devel] [RfC PATCH] usb/vmstate: add parent dev path
Date: Tue, 13 Mar 2012 13:34:47 +0100

... to make vmstate id string truely unique with multiple host
controllers, i.e. move from "1/usb-ptr" to "0000:00:01.3/1/usb-ptr"
(usb tabled connected to piix3 uhci).

This is needed in case you have multiple USB busses in a virtual
machine to make sure the section names are unique.  Obviously this
will break migration.  I'm sitting on the patch for a while already,
with the plan to sneak it in when we have a migration flag day anyway
for the planned new & shiny migration format.

It doesn't look like this is going to happen anytime soon.  I'd like to
have this fixed in the 1.1 release.  Suggestions how to go forward?

cheers,
  Gerd

---
 hw/usb/bus.c |   15 ++++++++++++++-
 1 files changed, 14 insertions(+), 1 deletions(-)

diff --git a/hw/usb/bus.c b/hw/usb/bus.c
index d3f8358..0ffb89e 100644
--- a/hw/usb/bus.c
+++ b/hw/usb/bus.c
@@ -460,7 +460,20 @@ static void usb_bus_dev_print(Monitor *mon, DeviceState 
*qdev, int indent)
 static char *usb_get_dev_path(DeviceState *qdev)
 {
     USBDevice *dev = USB_DEVICE(qdev);
-    return g_strdup(dev->port->path);
+    DeviceState *hcd = qdev->parent_bus->parent;
+    char *id = NULL;
+
+    if (hcd && hcd->parent_bus && hcd->parent_bus->info->get_dev_path) {
+        id = hcd->parent_bus->info->get_dev_path(hcd);
+    }
+    if (id) {
+        int len = strlen(id)+strlen(dev->port->path)+2;
+        char *ret = g_malloc(len);
+        snprintf(ret, len, "%s/%s", id, dev->port->path);
+        return ret;
+    } else {
+        return g_strdup(dev->port->path);
+    }
 }
 
 static char *usb_get_fw_dev_path(DeviceState *qdev)
-- 
1.7.1




reply via email to

[Prev in Thread] Current Thread [Next in Thread]