[libvirt] [RESEND][PATCHv5 2/4] add pci passthrough to libxl driver

Daniel P. Berrange berrange at redhat.com
Mon Oct 14 16:14:15 UTC 2013


On Fri, Sep 13, 2013 at 11:34:35AM +0800, Chunyan Liu wrote:
> Add pci passthrough to libxl driver, support attach-device, detach-device and
> start a vm with pci hostdev specified.
> 
> Signed-off-by: Chunyan Liu <cyliu at suse.com>
> ---
>  po/POTFILES.in           |    2 +-
>  src/libxl/libxl_conf.c   |   63 +++++++
>  src/libxl/libxl_conf.h   |    4 +
>  src/libxl/libxl_driver.c |  443 +++++++++++++++++++++++++++++++++++++++++++++-
>  4 files changed, 510 insertions(+), 2 deletions(-)
> 
> diff --git a/po/POTFILES.in b/po/POTFILES.in
> index ec205c9..d01cb99 100644
> --- a/po/POTFILES.in
> +++ b/po/POTFILES.in
> @@ -159,6 +159,7 @@ src/util/vireventpoll.c
>  src/util/virfile.c
>  src/util/virhash.c
>  src/util/virhook.c
> +src/util/virhostdev.c
>  src/util/viridentity.c
>  src/util/virinitctl.c
>  src/util/viriptables.c
> @@ -196,7 +197,6 @@ src/util/viruri.c
>  src/util/virusb.c
>  src/util/virutil.c
>  src/util/virxml.c
> -src/util/virhostdev.c
>  src/vbox/vbox_MSCOMGlue.c
>  src/vbox/vbox_XPCOMCGlue.c
>  src/vbox/vbox_driver.c

This change is bogus - the sort order should be fixed in the previous
patch.

> diff --git a/src/libxl/libxl_conf.c b/src/libxl/libxl_conf.c
> index d4226b8..31d8f8a 100644
> --- a/src/libxl/libxl_conf.c
> +++ b/src/libxl/libxl_conf.c
> @@ -335,6 +338,10 @@ libxlVmReap(libxlDriverPrivatePtr driver,
>          return -1;
>      }
>  
> +    hostdev_mgr = virHostdevManagerGetDefault();

You must check for NULL return.

> +    virHostdevReAttachDomainHostdevs(hostdev_mgr, LIBXL_DRIVER_NAME,
> +                                     vm->def, VIR_SP_PCI_HOSTDEV);
> +
>      libxlVmCleanup(driver, vm, reason);
>      return 0;
>  }
> @@ -553,6 +560,7 @@ libxlVmStart(libxlDriverPrivatePtr driver, virDomainObjPtr vm,
>      int managed_save_fd = -1;
>      libxlDomainObjPrivatePtr priv = vm->privateData;
>      libxlDriverConfigPtr cfg = libxlDriverConfigGet(driver);
> +    virHostdevManagerPtr hostdev_mgr;
>  
>      if (libxlDomainObjPrivateInitCtx(vm) < 0)
>          goto error;
> @@ -611,6 +619,12 @@ libxlVmStart(libxlDriverPrivatePtr driver, virDomainObjPtr vm,
>          goto error;
>      }
>  
> +    VIR_DEBUG("Preparing host PCI devices");
> +    hostdev_mgr = virHostdevManagerGetDefault();

Again check for NULL

> +    if (virHostdevPrepareDomainHostdevs(hostdev_mgr, LIBXL_DRIVER_NAME,
> +                                        vm->def, VIR_SP_PCI_HOSTDEV) < 0)
> +        goto error;
> +
>      /* use as synchronous operations => ao_how = NULL and no intermediate reports => ao_progress = NULL */
>  
>      if (restore_fd < 0)
> @@ -706,6 +720,7 @@ libxlReconnectDomain(virDomainObjPtr vm,
>      libxl_dominfo d_info;
>      int len;
>      uint8_t *data = NULL;
> +    virHostdevManagerPtr hostdev_mgr;
>  
>      virObjectLock(vm);
>  
> @@ -729,6 +744,13 @@ libxlReconnectDomain(virDomainObjPtr vm,
>  
>      /* Update domid in case it changed (e.g. reboot) while we were gone? */
>      vm->def->id = d_info.domid;
> +
> +    /* Update hostdev state */
> +    hostdev_mgr = virHostdevManagerGetDefault();

Check for NULL.

Many more cases follow, so I won't repeat this point again.


>  
>  static virDriver libxlDriver = {
>      .no = VIR_DRV_LIBXL,
> -    .name = "xenlight",
> +    .name = LIBXL_DRIVER_NAME,

This change should be separate.


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