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

Re: [Xen-devel] [PATCH 1 of 8] tools: libxc: allow HVM firmware to be loaded at an arbitrary alignment



On Fri, 2011-05-13 at 15:03 +0100, Konrad Rzeszutek Wilk wrote:
> On Fri, May 13, 2011 at 02:42:30PM +0100, Ian Campbell wrote:
> > # HG changeset patch
> > # User Ian Campbell <ian.campbell@xxxxxxxxxx>
> > # Date 1305294079 -3600
> > # Node ID c5c7ae5f33b16ee03535e9c688ad9bee2510b2b6
> > # Parent  9476bc07db2c654b266ab1f1c9ff0c65f401d74d
> > tools: libxc: allow HVM firmware to be loaded at an arbitrary alignment
> > 
> > Enables direct loading of e.g. seabios.elf.
> > 
> > Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
> > 
> > diff -r 9476bc07db2c -r c5c7ae5f33b1 tools/libxc/xc_hvm_build.c
> > --- a/tools/libxc/xc_hvm_build.c    Fri May 13 14:41:19 2011 +0100
> > +++ b/tools/libxc/xc_hvm_build.c    Fri May 13 14:41:19 2011 +0100
> > @@ -88,7 +88,9 @@ static int loadelfimage(
> >      struct elf_binary *elf, uint32_t dom, unsigned long *parray)
> >  {
> >      privcmd_mmap_entry_t *entries = NULL;
> > -    size_t pages = (elf->pend - elf->pstart + PAGE_SIZE - 1) >> PAGE_SHIFT;
> > +    unsigned long pfn_start = elf->pstart >> PAGE_SHIFT;
> > +    unsigned long pfn_end = (elf->pend + PAGE_SIZE - 1) >> PAGE_SHIFT;
> > +    size_t pages = pfn_end - pfn_start;
> >      int i, rc = -1;
> >  
> >      /* Map address space for initial elf image. */
> > @@ -105,6 +107,8 @@ static int loadelfimage(
> >      if ( elf->dest == NULL )
> >          goto err;
> >  
> > +    elf->dest += elf->pstart & 4095;
> 
> Whoa. Decimal numbers! Threw me off when I saw this - so used to 0xfff. :-)

Oops, I switch to the symbolic names for everything else but missed that
one. Should be (PAGE_SIZE - 1).

Updated version below.

8<---------------------------------------------------------------

# HG changeset patch
# User Ian Campbell <ian.campbell@xxxxxxxxxx>
# Date 1305296917 -3600
# Node ID 07b02c79fc9c71ff3c8a966ad78cd8aa94210df5
# Parent  9476bc07db2c654b266ab1f1c9ff0c65f401d74d
tools: libxc: allow HVM firmware to be loaded at an arbitrary alignment

Enables direct loading of e.g. seabios.elf.

Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx>

diff -r 9476bc07db2c -r 07b02c79fc9c tools/libxc/xc_hvm_build.c
--- a/tools/libxc/xc_hvm_build.c        Fri May 13 14:41:19 2011 +0100
+++ b/tools/libxc/xc_hvm_build.c        Fri May 13 15:28:37 2011 +0100
@@ -88,7 +88,9 @@ static int loadelfimage(
     struct elf_binary *elf, uint32_t dom, unsigned long *parray)
 {
     privcmd_mmap_entry_t *entries = NULL;
-    size_t pages = (elf->pend - elf->pstart + PAGE_SIZE - 1) >> PAGE_SHIFT;
+    unsigned long pfn_start = elf->pstart >> PAGE_SHIFT;
+    unsigned long pfn_end = (elf->pend + PAGE_SIZE - 1) >> PAGE_SHIFT;
+    size_t pages = pfn_end - pfn_start;
     int i, rc = -1;
 
     /* Map address space for initial elf image. */
@@ -105,6 +107,8 @@ static int loadelfimage(
     if ( elf->dest == NULL )
         goto err;
 
+    elf->dest += elf->pstart & (PAGE_SIZE - 1);
+
     /* Load the initial elf image. */
     elf_load_binary(elf);
     rc = 0;
@@ -169,12 +173,6 @@ static int setup_guest(xc_interface *xch
         goto error_out;
     }
 
-    if ( (elf.pstart & (PAGE_SIZE - 1)) != 0 )
-    {
-        PERROR("Guest OS must load to a page boundary.");
-        goto error_out;
-    }
-
     IPRINTF("VIRTUAL MEMORY ARRANGEMENT:\n"
             "  Loader:        %016"PRIx64"->%016"PRIx64"\n"
             "  TOTAL:         %016"PRIx64"->%016"PRIx64"\n"



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

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