From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:53337) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1S7QwJ-0001Dk-AZ for qemu-devel@nongnu.org; Tue, 13 Mar 2012 08:34:59 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1S7QwE-000491-JI for qemu-devel@nongnu.org; Tue, 13 Mar 2012 08:34:54 -0400 Received: from mx1.redhat.com ([209.132.183.28]:23298) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1S7QwE-00048e-Aq for qemu-devel@nongnu.org; Tue, 13 Mar 2012 08:34:50 -0400 Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id q2DCYmKe014997 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Tue, 13 Mar 2012 08:34:48 -0400 From: Gerd Hoffmann Date: Tue, 13 Mar 2012 13:34:47 +0100 Message-Id: <1331642087-21325-1-git-send-email-kraxel@redhat.com> Subject: [Qemu-devel] [RfC PATCH] usb/vmstate: add parent dev path List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Gerd Hoffmann ... 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