[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 7/7] libxl, Use QMP to insert a passthrough device when using upstream QEMU
On Fri, 2011-10-07 at 13:10 +0100, Anthony PERARD wrote: > Signed-off-by: Anthony PERARD <anthony.perard@xxxxxxxxxx> Sticking within the 80-column limit is getting pretty hard, perhaps pulling out the interactions with old-qemu into a new function would help? > --- > tools/libxl/libxl_pci.c | 58 > ++++++++++++++++++++++++++++++----------------- > 1 files changed, 37 insertions(+), 21 deletions(-) > > diff --git a/tools/libxl/libxl_pci.c b/tools/libxl/libxl_pci.c > index 1523cf0..b6cb4a3 100644 > --- a/tools/libxl/libxl_pci.c > +++ b/tools/libxl/libxl_pci.c > @@ -613,27 +613,43 @@ static int do_pci_add(libxl__gc *gc, uint32_t domid, > libxl_device_pci *pcidev, i > NULL, NULL, NULL) < 0) { > return ERROR_FAIL; > } > - path = libxl__sprintf(gc, "/local/domain/0/device-model/%d/state", > domid); > - state = libxl__xs_read(gc, XBT_NULL, path); > - path = libxl__sprintf(gc, > "/local/domain/0/device-model/%d/parameter", domid); > - if (pcidev->vdevfn) > - libxl__xs_write(gc, XBT_NULL, path, PCI_BDF_VDEVFN, > pcidev->domain, > - pcidev->bus, pcidev->dev, pcidev->func, > pcidev->vdevfn); > - else > - libxl__xs_write(gc, XBT_NULL, path, PCI_BDF, pcidev->domain, > - pcidev->bus, pcidev->dev, pcidev->func); > - path = libxl__sprintf(gc, "/local/domain/0/device-model/%d/command", > domid); > - xs_write(ctx->xsh, XBT_NULL, path, "pci-ins", strlen("pci-ins")); > - rc = libxl__wait_for_device_model(gc, domid, NULL, NULL, > - pci_ins_check, state); > - path = libxl__sprintf(gc, > "/local/domain/0/device-model/%d/parameter", domid); > - vdevfn = libxl__xs_read(gc, XBT_NULL, path); > - path = libxl__sprintf(gc, "/local/domain/0/device-model/%d/state", > domid); > - if ( rc < 0 ) > - LIBXL__LOG(ctx, LIBXL__LOG_ERROR, "qemu refused to add device: > %s", vdevfn); > - else if ( sscanf(vdevfn, "0x%x", &pcidev->vdevfn) != 1 ) > - rc = -1; > - xs_write(ctx->xsh, XBT_NULL, path, state, strlen(state)); > + if (libxl__device_model_version_running(gc, domid) > + == LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN) { > + rc = libxl__qmp_pci_add(gc, domid, pcidev); > + } else { > + path = libxl__sprintf(gc, > "/local/domain/0/device-model/%d/state", > + domid); > + state = libxl__xs_read(gc, XBT_NULL, path); > + path = libxl__sprintf(gc, > + > "/local/domain/0/device-model/%d/parameter", > + domid); > + if (pcidev->vdevfn) { > + libxl__xs_write(gc, XBT_NULL, path, PCI_BDF_VDEVFN, > + pcidev->domain, pcidev->bus, pcidev->dev, > + pcidev->func, pcidev->vdevfn); > + } else { > + libxl__xs_write(gc, XBT_NULL, path, PCI_BDF, pcidev->domain, > + pcidev->bus, pcidev->dev, pcidev->func); > + } > + path = libxl__sprintf(gc, > + "/local/domain/0/device-model/%d/command", > + domid); > + xs_write(ctx->xsh, XBT_NULL, path, "pci-ins", strlen("pci-ins")); > + rc = libxl__wait_for_device_model(gc, domid, NULL, NULL, > + pci_ins_check, state); > + path = libxl__sprintf(gc, > + > "/local/domain/0/device-model/%d/parameter", > + domid); > + vdevfn = libxl__xs_read(gc, XBT_NULL, path); > + path = libxl__sprintf(gc, > "/local/domain/0/device-model/%d/state", > + domid); > + if ( rc < 0 ) > + LIBXL__LOG(ctx, LIBXL__LOG_ERROR, > + "qemu refused to add device: %s", vdevfn); > + else if ( sscanf(vdevfn, "0x%x", &pcidev->vdevfn) != 1 ) > + rc = -1; > + xs_write(ctx->xsh, XBT_NULL, path, state, strlen(state)); > + } > if ( rc ) > return ERROR_FAIL; > break; _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |