[libvirt] [PATCH 6/6] qemu: Make save/restore with USB devices usable
Daniel P. Berrange
berrange at redhat.com
Wed Oct 10 15:40:59 UTC 2012
On Tue, Oct 09, 2012 at 02:13:27PM +0200, Jiri Denemark wrote:
> Save/restore with passed through USB devices currently only works if the
> USB device can be found at the same USB address where it used to be
> before saving a domain. This makes sense in case a user explicitly
> configure the USB address in domain XML. However, if the device was
> found automatically by vendor/product identification, we should try to
> search for that device when restoring the domain and use any device we
> find as long as there is only one available. In other words, the USB
> device can now be removed and plugged again or the host can be rebooted
> between saving and restoring the domain.
> ---
> src/conf/domain_conf.c | 10 ++++++++++
> src/conf/domain_conf.h | 2 ++
> src/qemu/qemu_driver.c | 5 +++--
> src/qemu/qemu_hostdev.c | 47 ++++++++++++++++++++++++++++++++++++++++-------
> src/qemu/qemu_migration.c | 3 ++-
> 5 files changed, 57 insertions(+), 10 deletions(-)
>
> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
> index c32ce8d..0cb686d 100644
> --- a/src/conf/domain_conf.c
> +++ b/src/conf/domain_conf.c
> @@ -2695,6 +2695,7 @@ virDomainHostdevSubsysUsbDefParseXML(const xmlNodePtr node,
> int got_product, got_vendor;
> xmlNodePtr cur;
> char *startupPolicy = NULL;
> + char *autoAddress;
>
> if ((startupPolicy = virXMLPropString(node, "startupPolicy"))) {
> def->startupPolicy =
> @@ -2709,6 +2710,12 @@ virDomainHostdevSubsysUsbDefParseXML(const xmlNodePtr node,
> VIR_FREE(startupPolicy);
> }
>
> + if ((autoAddress = virXMLPropString(node, "autoAddress"))) {
> + if (STREQ(autoAddress, "yes"))
> + def->source.subsys.u.usb.autoAddress = true;
> + VIR_FREE(autoAddress);
> + }
> +
> /* Product can validly be 0, so we need some extra help to determine
> * if it is uninitialized*/
> got_product = 0;
> @@ -12072,6 +12079,9 @@ virDomainHostdevSourceFormat(virBufferPtr buf,
> policy = virDomainStartupPolicyTypeToString(def->startupPolicy);
> virBufferAsprintf(buf, " startupPolicy='%s'", policy);
> }
> + if (def->source.subsys.u.usb.autoAddress &&
> + (flags & VIR_DOMAIN_XML_MIGRATABLE))
> + virBufferAddLit(buf, " autoAddress='yes'");
> virBufferAddLit(buf, ">\n");
>
> virBufferAdjustIndent(buf, 2);
Do we really need to add a new attribute for this. IMHO if the user
has specified a vendor+product, then it is always auto-address, even
if they have also given a dev+address.
Daniel
--
|: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org -o- http://virt-manager.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|
More information about the libvir-list
mailing list