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
|