[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH v10 11/12] tools/libxl: explicitly grant access to needed I/O-memory ranges



On Tue, 2014-07-29 at 00:12 +0200, Arianna Avanzini wrote:

> diff --git a/tools/libxl/libxl_create.c b/tools/libxl/libxl_create.c
> index 1217310..b5bc07a 100644
> --- a/tools/libxl/libxl_create.c
> +++ b/tools/libxl/libxl_create.c
> @@ -19,6 +19,7 @@
>  
>  #include "libxl_internal.h"
>  #include "libxl_arch.h"
> +#include "libxl_pci.h"
>  
>  #include <xc_dom.h>
>  #include <xenguest.h>
> @@ -1194,6 +1195,65 @@ static void domcreate_launch_dm(libxl__egc *egc, 
> libxl__multidev *multidev,
>              libxl__spawn_stub_dm(egc, &dcs->dmss);
>          else
>              libxl__spawn_local_dm(egc, &dcs->dmss.dm);
> +
> +        /*
> +         * If VGA passthru is enabled by domain config and one of the
> +         * passthru GPUs is of VGA class, be sure that the related
> +         * stubdomain and the domain itself can access the VGA
> +         * framebuffer.
> +         */

Please move this hole block into a new internal helper (libxl__foo)
function in libxl_pci.c. This will avoid the need to refactor the
headers in the previous patch too.

> +        for (i = 0 ; d_config->b_info.u.hvm.gfx_passthru.val &&
> +                     i < d_config->num_pcidevs ; i++) {

d_config->b_info.u.hvm.gfx_passthru.val (which is static here) in a for
condition is a bit odd. When you refactor this into a function I think
this would quite naturally become a test and return at the head of the
function.

> diff --git a/tools/libxl/libxl_pci.c b/tools/libxl/libxl_pci.c
> index 21ecab1..1524170 100644
> --- a/tools/libxl/libxl_pci.c
> +++ b/tools/libxl/libxl_pci.c
> @@ -841,10 +841,13 @@ static int qemu_pci_add_xenstore(libxl__gc *gc, 
> uint32_t domid,
>  static int do_pci_add(libxl__gc *gc, uint32_t domid, libxl_device_pci 
> *pcidev, int starting)
>  {
>      libxl_ctx *ctx = libxl__gc_owner(gc);
> +    libxl_domain_type type = libxl__domain_type(gc, domid);
>      int rc, hvm = 0;
>  
> -    switch (libxl__domain_type(gc, domid)) {
> -    case LIBXL_DOMAIN_TYPE_HVM:
> +    if (type == LIBXL_DOMAIN_TYPE_INVALID)
> +        return ERROR_FAIL;
> +
> +    if (type == LIBXL_DOMAIN_TYPE_HVM) {
>          hvm = 1;
>          if (libxl__wait_for_device_model_deprecated(gc, domid, "running",
>                                           NULL, NULL, NULL) < 0) {
> @@ -862,8 +865,7 @@ static int do_pci_add(libxl__gc *gc, uint32_t domid, 
> libxl_device_pci *pcidev, i
>          }
>          if ( rc )
>              return ERROR_FAIL;
> -        break;
> -    case LIBXL_DOMAIN_TYPE_PV:
> +    }

If you don't want to bring the following block back a level please still
include a blank line between the } and {.

> @@ -1176,8 +1175,7 @@ static int do_pci_remove(libxl__gc *gc, uint32_t domid,
>      }
>  
>      rc = ERROR_FAIL;
> -    switch (libxl__domain_type(gc, domid)) {
> -    case LIBXL_DOMAIN_TYPE_HVM:
> +    if (type == LIBXL_DOMAIN_TYPE_HVM) {
>          hvm = 1;
>          if (libxl__wait_for_device_model_deprecated(gc, domid, "running",
>                                           NULL, NULL, NULL) < 0)
> @@ -1198,8 +1196,8 @@ static int do_pci_remove(libxl__gc *gc, uint32_t domid,
>              rc = ERROR_FAIL;
>              goto out_fail;
>          }
> -        break;
> -    case LIBXL_DOMAIN_TYPE_PV:
> +    } else if (type != LIBXL_DOMAIN_TYPE_PV)
> +        abort();

Likewise a blank line after this.

> diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c
> index e035e97..7f1bb6b 100644
> --- a/tools/libxl/xl_cmdimpl.c
> +++ b/tools/libxl/xl_cmdimpl.c
> @@ -1422,6 +1422,7 @@ skip_vfb:
>      if (!xlu_cfg_get_list (config, "pci", &pcis, 0, 0)) {
>          d_config->num_pcidevs = 0;
>          d_config->pcidevs = NULL;
> +        fprintf(stderr, "XEN parsing pci list\n");

Leftover debug?



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

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