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@xxxxxxxx> > --- > 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 :| -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list