[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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.