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

Re: [Xen-devel] [PATCH 4/5] libxc/arm: allocate xenstore and console pages



On Tue, 2012-06-26 at 19:05 +0100, Stefano Stabellini wrote:
> On Tue, 26 Jun 2012, Ian Campbell wrote:
> > On Fri, 2012-06-22 at 17:09 +0100, Stefano Stabellini wrote:
> > > Allocate two additional pages at the end of the guest physical memory
> > > for xenstore and console.
> > > Set HVM_PARAM_STORE_PFN and HVM_PARAM_CONSOLE_PFN to the corresponding
> > > values.
> > > 
> > > Signed-off-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>
> > > ---
> > >  tools/libxc/xc_dom_arm.c |   32 ++++++++++++++++++++++----------
> > >  1 files changed, 22 insertions(+), 10 deletions(-)
> > > 
> > > diff --git a/tools/libxc/xc_dom_arm.c b/tools/libxc/xc_dom_arm.c
> > > index bb86139..df2eefe 100644
> > > --- a/tools/libxc/xc_dom_arm.c
> > > +++ b/tools/libxc/xc_dom_arm.c
> > > @@ -25,6 +25,10 @@
> > >  #include "xg_private.h"
> > >  #include "xc_dom.h"
> > >  
> > > +#define NR_MAGIC_PAGES 2
> > > +#define CONSOLE_PFN_OFFSET 0
> > > +#define XENSTORE_PFN_OFFSET 1
> > > +
> > >  /* 
> > > ------------------------------------------------------------------------ 
> > > */
> > >  /*
> > >   * arm guests are hybrid and start off with paging disabled, therefore no
> > > @@ -47,12 +51,6 @@ static int setup_pgtables_arm(struct xc_dom_image *dom)
> > >  static int alloc_magic_pages(struct xc_dom_image *dom)
> > >  {
> > >      DOMPRINTF_CALLED(dom->xch);
> > > -    /* XXX
> > > -     *   dom->p2m_guest
> > > -     *   dom->start_info_pfn
> > > -     *   dom->xenstore_pfn
> > > -     *   dom->console_pfn
> > > -     */
> > >      return 0;
> > >  }
> > >  
> > > @@ -127,18 +125,19 @@ int arch_setup_meminit(struct xc_dom_image *dom)
> > >  {
> > >      int rc;
> > >      xen_pfn_t pfn, allocsz, i;
> > > +    xen_pfn_t store_pfn, console_pfn;
> > >  
> > >      fprintf(stderr, "%s: tot pages %"PRI_xen_pfn" rambase 
> > > %"PRI_xen_pfn"\n", __func__,
> > >              dom->total_pages, dom->rambase_pfn);
> > >  
> > >      dom->shadow_enabled = 1;
> > >  
> > > -    dom->p2m_host = xc_dom_malloc(dom, sizeof(xen_pfn_t) * 
> > > dom->total_pages);
> > > +    dom->p2m_host = xc_dom_malloc(dom, sizeof(xen_pfn_t) * 
> > > (dom->total_pages + NR_MAGIC_PAGES));
> > >  
> > >      fprintf(stderr, "%s: setup p2m from %"PRI_xen_pfn" for 
> > > %"PRI_xen_pfn" pages\n", __func__,
> > >              dom->rambase_pfn, dom->total_pages );
> > >      /* setup initial p2m */
> > > -    for ( pfn = 0; pfn < dom->total_pages; pfn++ )
> > > +    for ( pfn = 0; pfn < (dom->total_pages + NR_MAGIC_PAGES); pfn++ )
> > >          dom->p2m_host[pfn] = pfn + dom->rambase_pfn;
> > >  
> > >      fprintf(stderr, "%s: init'd p2m_host[0] = %"PRI_xen_pfn"\n", 
> > > __func__, dom->p2m_host[0]);
> > > @@ -148,10 +147,10 @@ int arch_setup_meminit(struct xc_dom_image *dom)
> > >  
> > >      /* allocate guest memory */
> > >      for ( i = rc = allocsz = 0;
> > > -          (i < dom->total_pages) && !rc;
> > > +          (i < dom->total_pages + NR_MAGIC_PAGES) && !rc;
> > >            i += allocsz )
> > >      {
> > > -        allocsz = dom->total_pages - i;
> > > +        allocsz = (dom->total_pages + NR_MAGIC_PAGES) - i;
> > 
> > All these "+ NR_MAGIC_PAGES" are a bit troublesome looking.
> > 
> > Do these pages need to be in p2m_host or would it be fine to just insert
> > them into the guest p2m individually outside the main allocation logic?
> 
> I think it makes sense for them to be in p2m_host. In fact if we try to
> allocate them later, wouldn't we have the problem of having to extend
> the guest p2m? We might as well do it here.

The actual guest p2m is internal to the hypervisor so we never see it at
the tools layer.

I'm unsure if we need these magic pages in p2m_host. If we remember the
gfn of the magic pages that's just as useful as remembering the offset
in p2m_host and using p2m_host[offset]?


Ian.



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