[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] Elf loader fixes
Hi, > I have two issues with your latest patch: > - the heuristics you use to distinguish between "old" and "new" kernel > images, especially the case where a valid "new" kernel image could be > mistaken for an "old" image. I don't think it can ever happen, at least not with linux. The (correct) paddr addresses must be relatively small, otherwise loading the kernel on machines with a small amount of memory will not work. Especially they must be much smaller than the usual linux kernel VIRT_BASE. Not sure about other OS'es, maybe there are some which use a small VIRT_BASE, then it could be problematic, yes. > - the change to the entry point, now entry point and the elf header > paddr fields are in different address modes. xen/include/xen/elf.h says entry point is virtual. IMHO the elf headers should be correctly filled. > - we want to be able to specify where the virtual address space mapped > by the initial pagetables starts, this is why we have VIRT_BASE Sure. > - since we always run in virtual address mode, we thought that the > loader should also do so, thus it will load the image to a virtual > address - this seems to be in line with how other loaders would read > the elf header paddr fields, i.e. use them as load addresses. Well, loadelfimage() in tools/libxc/xc_load_elf.c copyes the image page-by-page to the _physical_ addresses. And this is how it should be IMHO. virt_base is only used to create the initial virtual mappings as expected by the guest kernel (and for bug-compatibility with old kernels). The dom0 builder can take a shortcut and simply copy the big blobs to virtual addresses (paddr + virt_base). That works because the initial virtual mapping is a simple offset to the physical address and the mappings are already created and active at that point. > If we really need to get rid of how we change LOAD_OFFSET in Linux, > how about this: > we add another entry to the __xen_guest header, PHYS_OFFSET=0 and then > substract PHYS_OFFSET from all elf header paddr fiels to turn them > into physical addresses, respectively, resp. add VIRT_BASE-PHYS_OFFSET > to turn them into virtual addresses. We default PHYS_OFFSET to > VIRT_BASE if it's not present in the __xen_guest header. I don't think the new PHYS_OFFSET is needed. cheers, Gerd -- Gerd 'just married' Hoffmann <kraxel@xxxxxxx> I'm the hacker formerly known as Gerd Knorr. http://www.suse.de/~kraxel/just-married.jpeg _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |