Am 22.03.2012 13:07, schrieb 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 obviously breaks migration. To handle this the usb bus > property "full-path" is added. When setting this to false old > behavior is maintained. This way current qemu will be compatible > with old versions when started using '-M pc-$oldversion'. > > Signed-off-by: Gerd Hoffmann <kra...@redhat.com> > --- > hw/pc_piix.c | 28 ++++++++++++++++++++++++++++ > hw/usb.h | 5 +++++ > hw/usb/bus.c | 18 +++++++++++++++++- > 3 files changed, 50 insertions(+), 1 deletions(-) > > diff --git a/hw/pc_piix.c b/hw/pc_piix.c > index 3f99f9a..8cb7d5f 100644 > --- a/hw/pc_piix.c > +++ b/hw/pc_piix.c > @@ -386,6 +386,10 @@ static QEMUMachine pc_machine_v1_0 = { > .driver = "isa-fdc", > .property = "check_media_rate", > .value = "off", > + },{ > + .driver = "USB", > + .property = "full-path", > + .value = "no",
This touches on our "favorite" bit/bool topic again. While I agree that "no" makes sense for a property of that name, the current code still expects "on" and "off". In particular, "yes" would not work as expected. We should either merge support for yes/no or use "off" here. I had a patch for the former but didn't resubmit after the QOM merge since I thought we would want to move this from qdev to Object first. Andreas > }, > { /* end of list */ } > }, > @@ -405,6 +409,10 @@ static QEMUMachine pc_machine_v0_15 = { > .driver = "isa-fdc", > .property = "check_media_rate", > .value = "off", > + },{ > + .driver = "USB", > + .property = "full-path", > + .value = "no", > }, > { /* end of list */ } > }, > @@ -449,6 +457,10 @@ static QEMUMachine pc_machine_v0_14 = { > .driver = "pc-sysfw", > .property = "rom_only", > .value = stringify(1), > + },{ > + .driver = "USB", > + .property = "full-path", > + .value = "no", > }, > { /* end of list */ } > }, > @@ -505,6 +517,10 @@ static QEMUMachine pc_machine_v0_13 = { > .driver = "pc-sysfw", > .property = "rom_only", > .value = stringify(1), > + },{ > + .driver = "USB", > + .property = "full-path", > + .value = "no", > }, > { /* end of list */ } > }, > @@ -565,6 +581,10 @@ static QEMUMachine pc_machine_v0_12 = { > .driver = "pc-sysfw", > .property = "rom_only", > .value = stringify(1), > + },{ > + .driver = "USB", > + .property = "full-path", > + .value = "no", > }, > { /* end of list */ } > } > @@ -633,6 +653,10 @@ static QEMUMachine pc_machine_v0_11 = { > .driver = "pc-sysfw", > .property = "rom_only", > .value = stringify(1), > + },{ > + .driver = "USB", > + .property = "full-path", > + .value = "no", > }, > { /* end of list */ } > } > @@ -713,6 +737,10 @@ static QEMUMachine pc_machine_v0_10 = { > .driver = "pc-sysfw", > .property = "rom_only", > .value = stringify(1), > + },{ > + .driver = "USB", > + .property = "full-path", > + .value = "no", > }, > { /* end of list */ } > }, > diff --git a/hw/usb/bus.c b/hw/usb/bus.c > index d3f8358..f1e567b 100644 > --- a/hw/usb/bus.c > +++ b/hw/usb/bus.c > @@ -19,6 +19,8 @@ static struct BusInfo usb_bus_info = { > .get_fw_dev_path = usb_get_fw_dev_path, > .props = (Property[]) { > DEFINE_PROP_STRING("port", USBDevice, port_path), > + DEFINE_PROP_BIT("full-path", USBDevice, flags, > + USB_DEV_FLAG_FULL_PATH, true), > DEFINE_PROP_END_OF_LIST() > }, > }; -- SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg