[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 2/5] xen: arm: Handle 4K aligned hypervisor load address.
On Wed, 2014-07-16 at 18:49 +0100, Julien Grall wrote: > On 16/07/14 17:53, Ian Campbell wrote: > > On Wed, 2014-07-16 at 16:41 +0100, Julien Grall wrote: > >>> + /* Identity map clashes with boot_third, which we cannot handle > >>> yet */ > >>> + PRINT("Unable to build boot page tables - virt and phys > >>> addresses clash.\r\n") > >>> + b fail > >> > >> AFAIU, this can happen if the kernel is loaded around 2MB in the memory, > >> right? > > > > Yes from 2MB up to (but not including) 4MB. > > > > It is an error (I think) that this patch bugs if Xen is loaded at > > exactly 2MB, since then the virtual and identity-physical mappings are > > the same. > > > >> Also what does prevent Xen to be shared between 2 third page table? > > > > This is the virtual mapping, which always starts at exactly 2MB, so that > > can only happen if Xen is larger than 2MB, which we assume is not the > > case both here and in various bits of the C code start of day > > relocating/setup etc. > > Sorry I was thinking that boot_third is used for the 1:1 mapping. > > It looks like you are using a 2MB mapping for the identity mapping: > > + /* ... map of paddr(start) in boot_second */ > + lsrs r1, r9, #SECOND_SHIFT /* Offset of base paddr in > boot_second */ > + mov r2, #0x0ff /* r2 := LPAE entries mask */ > + orr r2, r2, #0x100 > + and r1, r1, r2 > + cmp r1, #1 > + bne 2f /* It's not in slot 1, map it */ > > r9 contains the physical address of start, but the binary could cross > the 2MB boundary (because, for instance, the start address is at > 0xXX2FXXXXX). So the assembly code to enable the pagination may not be > on the same slot. This is indeed a theoretical possibility which I hadn't considered. What saves us in practice is that the code in head.S from _start to paging is <4K and therefore given a 4K aligned load address cannot cross a 4K boundary or a 2MB boundary, etc. The easiest fix is probably a BUILD_BUG_ON of some sort I think. > I think this very unlikely, but if it happens it will be hard to debug. > Maybe you can add a sanity check or add a label before the pagination is > enabled and use it in the slot. > > BTW I think you can use lsr instead of lsrs to get the offset. True. Ian. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |