[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