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

Re: [Xen-devel] [v3][PATCH 12/16] tools/libxl: passes rdm reservation policy



On Thu, Jun 11, 2015 at 09:15:21AM +0800, Tiejun Chen wrote:
> This patch passes our rdm reservation policy inside libxl
> when we assign a device or attach a device.
> 
> Signed-off-by: Tiejun Chen <tiejun.chen@xxxxxxxxx>
> ---
>  docs/man/xl.pod.1         |  7 ++++++-
>  tools/libxl/libxl_pci.c   | 10 +++++++++-
>  tools/libxl/xl_cmdimpl.c  | 23 +++++++++++++++++++----
>  tools/libxl/xl_cmdtable.c |  2 +-
>  4 files changed, 35 insertions(+), 7 deletions(-)
> 
> diff --git a/docs/man/xl.pod.1 b/docs/man/xl.pod.1
> index 4eb929d..c5c4809 100644
> --- a/docs/man/xl.pod.1
> +++ b/docs/man/xl.pod.1
> @@ -1368,10 +1368,15 @@ it will also attempt to re-bind the device to its 
> original driver, making it
>  usable by Domain 0 again.  If the device is not bound to pciback, it will
>  return success.
>  
> -=item B<pci-attach> I<domain-id> I<BDF>
> +=item B<pci-attach> I<domain-id> I<BDF> [I<rdm>]
>  
>  Hot-plug a new pass-through pci device to the specified domain.
>  B<BDF> is the PCI Bus/Device/Function of the physical device to pass-through.
> +B<rdm policy> is about how to handle conflict between reserving reserved 
> device
> +memory and guest address space. "strict" means an unsolved conflict leads to
> +immediate VM crash, while "relaxed" allows VM moving forward with a warning
> +message thrown out. Here "strict" is default.
> +
>  
>  =item B<pci-detach> [I<-f>] I<domain-id> I<BDF>
>  
> diff --git a/tools/libxl/libxl_pci.c b/tools/libxl/libxl_pci.c
> index a00d799..d2e8911 100644
> --- a/tools/libxl/libxl_pci.c
> +++ b/tools/libxl/libxl_pci.c
> @@ -894,7 +894,7 @@ static int do_pci_add(libxl__gc *gc, uint32_t domid, 
> libxl_device_pci *pcidev, i
>      FILE *f;
>      unsigned long long start, end, flags, size;
>      int irq, i, rc, hvm = 0;
> -    uint32_t flag = XEN_DOMCTL_DEV_RDM_RELAXED;
> +    uint32_t flag;
>  
>      if (type == LIBXL_DOMAIN_TYPE_INVALID)
>          return ERROR_FAIL;
> @@ -988,6 +988,14 @@ static int do_pci_add(libxl__gc *gc, uint32_t domid, 
> libxl_device_pci *pcidev, i
>  
>  out:
>      if (!libxl_is_stubdom(ctx, domid, NULL)) {
> +        if (pcidev->rdm_reserve == LIBXL_RDM_RESERVE_FLAG_RELAXED) {
> +            flag = XEN_DOMCTL_DEV_RDM_RELAXED;
> +        } else if (pcidev->rdm_reserve == LIBXL_RDM_RESERVE_FLAG_STRICT) {
> +            flag = XEN_DOMCTL_DEV_RDM_STRICT;
> +        } else {
> +            LIBXL__LOG_ERRNO(ctx, LIBXL__LOG_ERROR, "unkwon rdm check 
> flag.");

Typo "unkwon" and use LOG(ERROR,...).

> +            return ERROR_FAIL;
> +        }
>          rc = xc_assign_device(ctx->xch, domid, pcidev_encode_bdf(pcidev), 
> flag);
>          if (rc < 0 && (hvm || errno != ENOSYS)) {
>              LIBXL__LOG_ERRNO(ctx, LIBXL__LOG_ERROR, "xc_assign_device 
> failed");
> diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c
> index aedbd4b..4364ba4 100644
> --- a/tools/libxl/xl_cmdimpl.c
> +++ b/tools/libxl/xl_cmdimpl.c
> @@ -3359,7 +3359,8 @@ int main_pcidetach(int argc, char **argv)
>      pcidetach(domid, bdf, force);
>      return 0;
>  }
> -static void pciattach(uint32_t domid, const char *bdf, const char *vs)
> +static void pciattach(uint32_t domid, const char *bdf, const char *vs,
> +                      uint32_t flag)
>  {
>      libxl_device_pci pcidev;
>      XLU_Config *config;
> @@ -3369,6 +3370,7 @@ static void pciattach(uint32_t domid, const char *bdf, 
> const char *vs)
>      config = xlu_cfg_init(stderr, "command line");
>      if (!config) { perror("xlu_cfg_inig"); exit(-1); }
>  
> +    pcidev.rdm_reserve = flag;
>      if (xlu_pci_parse_bdf(config, &pcidev, bdf)) {
>          fprintf(stderr, "pci-attach: malformed BDF specification \"%s\"\n", 
> bdf);
>          exit(2);
> @@ -3381,9 +3383,9 @@ static void pciattach(uint32_t domid, const char *bdf, 
> const char *vs)
>  
>  int main_pciattach(int argc, char **argv)
>  {
> -    uint32_t domid;
> +    uint32_t domid, flag;
>      int opt;
> -    const char *bdf = NULL, *vs = NULL;
> +    const char *bdf = NULL, *vs = NULL, *rdm_policy = NULL;
>  
>      SWITCH_FOREACH_OPT(opt, "", NULL, "pci-attach", 2) {
>          /* No options */
> @@ -3395,7 +3397,20 @@ int main_pciattach(int argc, char **argv)
>      if (optind + 1 < argc)
>          vs = argv[optind + 2];
>  
> -    pciattach(domid, bdf, vs);
> +    if (optind + 2 < argc) {
> +        rdm_policy = argv[optind + 3];
> +    }
> +    if (!strcmp(rdm_policy, "strict")) {
> +        flag = LIBXL_RDM_RESERVE_FLAG_STRICT;
> +    } else if (!strcmp(rdm_policy, "relaxed")) {
> +        flag = LIBXL_RDM_RESERVE_FLAG_RELAXED;
> +    } else {
> +        fprintf(stderr, "%s is an invalid rdm policy: 'strict'|'relaxed'\n",
> +                rdm_policy);
> +        exit(2);
> +    }
> +
> +    pciattach(domid, bdf, vs, flag);
>      return 0;
>  }
>  
> diff --git a/tools/libxl/xl_cmdtable.c b/tools/libxl/xl_cmdtable.c
> index 7f4759b..552fbec 100644
> --- a/tools/libxl/xl_cmdtable.c
> +++ b/tools/libxl/xl_cmdtable.c
> @@ -88,7 +88,7 @@ struct cmd_spec cmd_table[] = {
>      { "pci-attach",
>        &main_pciattach, 0, 1,
>        "Insert a new pass-through pci device",
> -      "<Domain> <BDF> [Virtual Slot]",
> +      "<Domain> <BDF> [Virtual Slot] <policy to reserve 
> rdm['strice'|'relaxed']>",

Should use "[]" to indicate it's optional.

Wei.

>      },
>      { "pci-detach",
>        &main_pcidetach, 0, 1,
> -- 
> 1.9.1

_______________________________________________
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®.