WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

[Xen-devel] elf loader problems on xen/ia64

To: xen-devel <xen-devel@xxxxxxxxxxxxxxxxxxx>, xen-ia64-devel <xen-ia64-devel@xxxxxxxxxxxxxxxxxxx>
Subject: [Xen-devel] elf loader problems on xen/ia64
From: Alex Williamson <alex.williamson@xxxxxx>
Date: Sat, 20 May 2006 14:37:53 -0600
Delivery-date: Sat, 20 May 2006 13:38:21 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Organization: LOSL
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
Hi,

   I've spent the past day chasing down why xen/ia64 stopped booting
paravirtualized kernels on xen-unstable.hg.  The problem started in
xen-unstable.hg cset 9980.  This made the following change in
loadelfimage():

@@ -204,7 +216,7 @@ loadelfimage(
 
         for ( done = 0; done < phdr->p_filesz; done += chunksz )
         {
-            pa = (phdr->p_paddr + done) - dsi->v_start;
+            pa = (phdr->p_paddr + done) - dsi->elf_paddr_offset;
             va = xc_map_foreign_range(
                 xch, dom, PAGE_SIZE, PROT_WRITE, parray[pa>>PAGE_SHIFT]);
             chunksz = phdr->p_filesz - done;
@@ -217,7 +229,7 @@ loadelfimage(
 
         for ( ; done < phdr->p_memsz; done += chunksz )
         {
-            pa = (phdr->p_paddr + done) - dsi->v_start;
+            pa = (phdr->p_paddr + done) - dsi->elf_paddr_offset;
             va = xc_map_foreign_range(
                 xch, dom, PAGE_SIZE, PROT_WRITE, parray[pa>>PAGE_SHIFT]);
             chunksz = phdr->p_memsz - done;

On ia64, the kernel image has these as follows:

phdr->p_paddr = 0x4000000
dsi->v_start = 0x4000000
dsi->elf_paddr_offset = 0x0

Therefore this change introduces a significant difference in the
resulting pa value, and causes and MCA when the guest kernel is loaded.
Changesets 10006 and 10009 mask this problem by declaring the image
invalid because xen/ia64 does not have a guestinfo section in the kernel
binary.

   I'm not and elf expert, what's the best way to solve this?  It seems
we've overlooked that Xen/ia64 doesn't have a VIRT_BASE tag in
guestinfo, so elf_paddr_offset never gets set to anything useful.  Is it
best to set dsi->elf_paddr_offset to phdr->p_paddr somewhere in
parseelfimage()?  Thanks,

        Alex

-- 
Alex Williamson                             HP Linux & Open Source Lab


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

<Prev in Thread] Current Thread [Next in Thread>