[libvirt] [PATCH 6/7] xen: implement virNodeDeviceDetachFlags backend

Jim Fehlig jfehlig at suse.com
Thu Apr 25 01:21:06 UTC 2013


Laine Stump wrote:
> This was the only hypervisor driver other than qemu that implemented
> virNodeDeviceDettach. It doesn't currently support multiple pci device
> assignment driver backends, but it is simple to plug in this new API,
> which will make it easier for Xen people to fill it in later when they
> decide to support VFIO (or whatever other) device assignment. Also it
> means that management applications will have the same API available to
> them for both hypervisors on any given version of libvirt.
>
> The only acceptable value for driverName in this case is NULL, since
> there is no alternate, and I'm not willing to pick a name for the
> default driver used by Xen.
>   

:-)

ACK to the xen driver changes.

> ---
>  src/xen/xen_driver.c | 25 ++++++++++++++++++++++---
>  1 file changed, 22 insertions(+), 3 deletions(-)
>
> diff --git a/src/xen/xen_driver.c b/src/xen/xen_driver.c
> index a6990cf..8971d4c 100644
> --- a/src/xen/xen_driver.c
> +++ b/src/xen/xen_driver.c
> @@ -1,7 +1,7 @@
>  /*
>   * xen_driver.c: Unified Xen driver.
>   *
> - * Copyright (C) 2007-2012 Red Hat, Inc.
> + * Copyright (C) 2007-2013 Red Hat, Inc.
>   *
>   * This library is free software; you can redistribute it and/or
>   * modify it under the terms of the GNU Lesser General Public
> @@ -2133,12 +2133,16 @@ out:
>  }
>  
>  static int
> -xenUnifiedNodeDeviceDettach(virNodeDevicePtr dev)
> +xenUnifiedNodeDeviceDetachFlags(virNodeDevicePtr dev,
> +                                const char *driverName,
> +                                unsigned int flags)
>  {
>      virPCIDevicePtr pci;
>      unsigned domain, bus, slot, function;
>      int ret = -1;
>  
> +    virCheckFlags(0, -1);
> +
>      if (xenUnifiedNodeDeviceGetPciInfo(dev, &domain, &bus, &slot, &function) < 0)
>          return -1;
>  
> @@ -2146,7 +2150,15 @@ xenUnifiedNodeDeviceDettach(virNodeDevicePtr dev)
>      if (!pci)
>          return -1;
>  
> -    if (virPCIDeviceDetach(pci, NULL, NULL, "pciback") < 0)
> +    if (!driverName) {
> +        virPCIDeviceSetStubDriver(pci, "pciback");
> +    } else {
> +        virReportError(VIR_ERR_INVALID_ARG,
> +                       _("unknown driver name '%s'"), driverName);
> +        goto out;
> +    }
> +
> +    if (virPCIDeviceDetach(pci, NULL, NULL, NULL) < 0)
>          goto out;
>  
>      ret = 0;
> @@ -2156,6 +2168,12 @@ out:
>  }
>  
>  static int
> +xenUnifiedNodeDeviceDettach(virNodeDevicePtr dev)
> +{
> +    return xenUnifiedNodeDeviceDetachFlags(dev, NULL, 0);
> +}
> +
> +static int
>  xenUnifiedNodeDeviceAssignedDomainId(virNodeDevicePtr dev)
>  {
>      int numdomains;
> @@ -2405,6 +2423,7 @@ static virDriver xenUnifiedDriver = {
>      .connectDomainEventRegister = xenUnifiedConnectDomainEventRegister, /* 0.5.0 */
>      .connectDomainEventDeregister = xenUnifiedConnectDomainEventDeregister, /* 0.5.0 */
>      .nodeDeviceDettach = xenUnifiedNodeDeviceDettach, /* 0.6.1 */
> +    .nodeDeviceDetachFlags = xenUnifiedNodeDeviceDetachFlags, /* 1.0.5 */
>      .nodeDeviceReAttach = xenUnifiedNodeDeviceReAttach, /* 0.6.1 */
>      .nodeDeviceReset = xenUnifiedNodeDeviceReset, /* 0.6.1 */
>      .connectIsEncrypted = xenUnifiedConnectIsEncrypted, /* 0.7.3 */
>   




More information about the libvir-list mailing list