All of lore.kernel.org
 help / color / mirror / Atom feed
From: Juergen Gross <jgross@suse.com>
To: Wei Liu <wei.liu2@citrix.com>,
	Xen-devel <xen-devel@lists.xenproject.org>
Cc: Ian Jackson <ian.jackson@eu.citrix.com>,
	Ian Campbell <ian.campbell@citrix.com>
Subject: Re: [PATCH] libxc: refactor memory allocation functions
Date: Tue, 1 Dec 2015 12:45:55 +0100	[thread overview]
Message-ID: <565D8873.4010908@suse.com> (raw)
In-Reply-To: <1448969956-26310-1-git-send-email-wei.liu2@citrix.com>

On 01/12/15 12:39, Wei Liu wrote:
> There were some problems with the original memory allocation functions:
> 1. xc_dom_alloc_segment and xc_dom_alloc_pad ended up calling
>    xc_dom_chk_alloc_pages while xc_dom_alloc_page open-coded everything.
> 2. xc_dom_alloc_pad didn't call dom->allocate.
> 
> Refactor the code so that:
> 1. xc_dom_alloc_{segment,pad,page} end up calling
>    xc_dom_chk_alloc_pages.
> 2. xc_dom_chk_alloc_pages calls dom->allocate.
> 
> This way we avoid scattering dom->allocate over multiple locations and
> open-coding.
> 
> Also change the return type of xc_dom_alloc_page to xen_pfn_t and return
> an invalid pfn when xc_dom_chk_alloc_pages fails.
> 
> Signed-off-by: Wei Liu <wei.liu2@citrix.com>

Reviewed-by: Juergen Gross <jgross@suse.com>

> ---
> Cc: Ian Campbell <ian.campbell@citrix.com>
> Cc: Ian Jackson <ian.jackson@eu.citrix.com>
> Cc: Juergen Gross <jgross@suse.com>
> 
> We don't have INVALID_PFN, maybe we need one?
> 
> Tested with Jessie with 64 bit pvgrub, Wheezy with 64 bit pvgrub, Wheezy pv
> guest, Wheezy HVM guest, Wheezy HVM with qemu stubdom.
> 
>  tools/libxc/include/xc_dom.h |  2 +-
>  tools/libxc/xc_dom_core.c    | 16 +++++++---------
>  2 files changed, 8 insertions(+), 10 deletions(-)
> 
> diff --git a/tools/libxc/include/xc_dom.h b/tools/libxc/include/xc_dom.h
> index 2176216..2d0de8c 100644
> --- a/tools/libxc/include/xc_dom.h
> +++ b/tools/libxc/include/xc_dom.h
> @@ -350,7 +350,7 @@ char *xc_dom_strdup(struct xc_dom_image *dom, const char *str);
>  
>  /* --- alloc memory pool ------------------------------------------- */
>  
> -int xc_dom_alloc_page(struct xc_dom_image *dom, char *name);
> +xen_pfn_t xc_dom_alloc_page(struct xc_dom_image *dom, char *name);
>  int xc_dom_alloc_segment(struct xc_dom_image *dom,
>                           struct xc_dom_seg *seg, char *name,
>                           xen_vaddr_t start, xen_vaddr_t size);
> diff --git a/tools/libxc/xc_dom_core.c b/tools/libxc/xc_dom_core.c
> index 5d6c3ba..8967970 100644
> --- a/tools/libxc/xc_dom_core.c
> +++ b/tools/libxc/xc_dom_core.c
> @@ -555,6 +555,9 @@ static int xc_dom_chk_alloc_pages(struct xc_dom_image *dom, char *name,
>      dom->pfn_alloc_end += pages;
>      dom->virt_alloc_end += pages * page_size;
>  
> +    if ( dom->allocate )
> +        dom->allocate(dom);
> +
>      return 0;
>  }
>  
> @@ -602,9 +605,6 @@ int xc_dom_alloc_segment(struct xc_dom_image *dom,
>      if ( xc_dom_chk_alloc_pages(dom, name, pages) )
>          return -1;
>  
> -    if (dom->allocate)
> -        dom->allocate(dom);
> -
>      /* map and clear pages */
>      ptr = xc_dom_seg_to_ptr(dom, seg);
>      if ( ptr == NULL )
> @@ -621,18 +621,16 @@ int xc_dom_alloc_segment(struct xc_dom_image *dom,
>      return 0;
>  }
>  
> -int xc_dom_alloc_page(struct xc_dom_image *dom, char *name)
> +xen_pfn_t xc_dom_alloc_page(struct xc_dom_image *dom, char *name)
>  {
> -    unsigned int page_size = XC_DOM_PAGE_SIZE(dom);
>      xen_vaddr_t start;
>      xen_pfn_t pfn;
>  
>      start = dom->virt_alloc_end;
>      pfn = dom->pfn_alloc_end - dom->rambase_pfn;
> -    dom->virt_alloc_end += page_size;
> -    dom->pfn_alloc_end++;
> -    if ( dom->allocate )
> -        dom->allocate(dom);
> +
> +    if ( xc_dom_chk_alloc_pages(dom, name, 1) )
> +        return (xen_pfn_t)-1;
>  
>      DOMPRINTF("%-20s:   %-12s : 0x%" PRIx64 " (pfn 0x%" PRIpfn ")",
>                __FUNCTION__, name, start, pfn);
> 

  reply	other threads:[~2015-12-01 11:45 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-12-01 11:39 [PATCH] libxc: refactor memory allocation functions Wei Liu
2015-12-01 11:45 ` Juergen Gross [this message]
2015-12-01 12:38   ` Ian Campbell
2015-12-01 11:58 ` Ian Campbell
2015-12-01 12:03   ` Wei Liu
2015-12-01 12:14     ` Ian Campbell
2015-12-01 12:04   ` Juergen Gross
2015-12-01 12:12     ` Wei Liu
2015-12-01 14:08       ` Juergen Gross

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=565D8873.4010908@suse.com \
    --to=jgross@suse.com \
    --cc=ian.campbell@citrix.com \
    --cc=ian.jackson@eu.citrix.com \
    --cc=wei.liu2@citrix.com \
    --cc=xen-devel@lists.xenproject.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.