|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v1 1/2] arm: Add ability to relocate Xen in over 4GB space
On 10/04/15 14:58, Iurii Konovalenko wrote:
> Hi, Julien!
Hi Iurii,
> On Wed, Apr 8, 2015 at 7:05 PM, Julien Grall <julien.grall@xxxxxxxxxx> wrote:
>
>> The virtualization extension requires LPAE. Any reason to make this
>> optional?
> I agree with you - there is no real reason to make it optional. I will
> rework patch
> to include functionality without any flags by default.
Before doing a such change, I'd like the point of view of Stefano or Ian
on this patch.
>>> +#ifdef ARM32_RELOCATE_OVER_4GB
>>> + ldr r1, =_start
>>> + sub r4, r1
>>> + add r4, #BOOT_RELOC_VIRT_START
>>> +#endif
>>
>> This chunk need some comment in order to explain what it's doing.
>>
>> AFAIU the resulting value in r4, will be exactly the same as "ldr r4,
>> =init_ttbr".
> Not exactly. Virtual address of _start is 0x00200000, but
> #BOOT_RELOC_VIRT_START is 0x00800000.
> This part of code is needed to get value, that was "stashed by CPU 0" in
> relocated copy of Xen when secondary CPUs run in non-relocated.
And the reloc Xen is mapped by setup_page_tables in mm.c, right?
If so, this definitely need a comment explaining why and how it works.
Because you are relying on multiple things in the code.
- 1:1 mapping is not overlapped (see my comment on the previous mail)
- reloc Xen will never overlap the boot Xen (for instance we could
decide that Xen doesn't need to be relocated).
- After relocation, Xen is still modifying the boot page table (clean
them) but hopefully it's only the relocated version
This is making the code in setup_page_tables quite difficult to
understand now.
>>> + xen_relocation_offset = __pa(init_secondary) - xen_relocation_offset;
>>
>> The Xen may be relocated below the boot copy. So the final result may be
>> negative.
> This offset is used to get physical address of non-relocated variables
> and write there values.
> If it is negative, then calculating non-relocated address gives bigger
> number (substraction of negative value).
> In addition, it's hard to imagine when it can be negative if we take
> highest region of highest memory bank.
Simple, the board has all the memory banks below 4G and Xen has been
loaded by the bootloader at a very high address.
Regards,
--
Julien Grall
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |