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

Re: [Xen-devel] [PATCH v3 07/19] libxl: x86: factor out e820_host_sanitize



On 13/01/15 12:11, Wei Liu wrote:
> This function gets the machine E820 map and sanitize it according to PV
> guest configuration.
>
> This will be used in later patch. No functional change introduced in
> this patch.
>
> Signed-off-by: Wei Liu <wei.liu2@xxxxxxxxxx>
> Cc: Ian Campbell <ian.campbell@xxxxxxxxxx>
> Cc: Ian Jackson <ian.jackson@xxxxxxxxxxxxx>
> Cc: Dario Faggioli <dario.faggioli@xxxxxxxxxx>
> Cc: Elena Ufimtseva <ufimtseva@xxxxxxxxx>
> ---
>  tools/libxl/libxl_x86.c |   31 ++++++++++++++++++++++---------
>  1 file changed, 22 insertions(+), 9 deletions(-)
>
> diff --git a/tools/libxl/libxl_x86.c b/tools/libxl/libxl_x86.c
> index 9ceb373..e959e37 100644
> --- a/tools/libxl/libxl_x86.c
> +++ b/tools/libxl/libxl_x86.c
> @@ -207,6 +207,27 @@ static int e820_sanitize(libxl_ctx *ctx, struct 
> e820entry src[],
>      return 0;
>  }
>  
> +static int e820_host_sanitize(libxl__gc *gc,
> +                              libxl_domain_build_info *b_info,
> +                              struct e820entry map[],
> +                              uint32_t *nr)
> +{
> +    int rc;
> +
> +    rc = xc_get_machine_memory_map(CTX->xch, map, E820MAX);

This function should not assume that map[] is E820MAX entries long.  The
code you copied was passing a local variable whereas here you are
passing someone else's pointer.  You should pass the length in *nr like
e820_sanitize() does.

~Andrew

> +    if (rc < 0) {
> +        errno = rc;
> +        return ERROR_FAIL;
> +    }
> +
> +    *nr = rc;
> +
> +    rc = e820_sanitize(CTX, map, nr, b_info->target_memkb,
> +                       (b_info->max_memkb - b_info->target_memkb) +
> +                       b_info->u.pv.slack_memkb);
> +    return rc;
> +}
> +
>  static int libxl__e820_alloc(libxl__gc *gc, uint32_t domid,
>          libxl_domain_config *d_config)
>  {
> @@ -223,15 +244,7 @@ static int libxl__e820_alloc(libxl__gc *gc, uint32_t 
> domid,
>      if (!libxl_defbool_val(b_info->u.pv.e820_host))
>          return ERROR_INVAL;
>  
> -    rc = xc_get_machine_memory_map(ctx->xch, map, E820MAX);
> -    if (rc < 0) {
> -        errno = rc;
> -        return ERROR_FAIL;
> -    }
> -    nr = rc;
> -    rc = e820_sanitize(ctx, map, &nr, b_info->target_memkb,
> -                       (b_info->max_memkb - b_info->target_memkb) +
> -                       b_info->u.pv.slack_memkb);
> +    rc = e820_host_sanitize(gc, b_info, map, &nr);
>      if (rc)
>          return ERROR_FAIL;
>  



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