[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] elf loader problems on xen/ia64
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
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |