On 11/27/18 13:13, Ard Biesheuvel wrote:
> On Tue, 27 Nov 2018 at 13:11, Laszlo Ersek <[email protected]> wrote:
>>
>> On 11/26/18 23:37, Ard Biesheuvel wrote:
>>> The ArmVirtQemu targets currently limit the size of the IPA space to
>>> 40 bits because that is all what KVM supports. However, this is about
>>> to change, and so we need to update the code if we want to ensure that
>>> our UEFI firmware builds can keep running on systems that set values
>>> other than 40 (which could be > 40 or < 40)
>>>
>>> So refactor the way we deal with this limit, both for bare metal and for
>>> virtual targets, so that
>>> a) the range of the GCD memory map is based directly on the CPU's PA range
>>> b) the range of the 1:1 mapping in the page tables is based on the CPU's PA
>>>    range (unless it exceeds what the architecture permits for 4k pages)
>>> c) PcdPrePiCpuMemorySize is no longer needed, and can be removed.
>>>
>>> Patch #1 introduces ARM_MMU_IDMAP_RANGE and ArmGetPhysicalAddressBits ()
>>> in ArmLib.
>>
>> OK, so the crucial piece of info I missed under v1 was that given the
>> fixed 4KB page size under UEFI, we might not be able to identity map all
>> the memory that the CPU would otherwise be capable of addressing
>> (assuming the OS set up a larger page size).
>>
>> However... that seems to leave us with a conundrum. (I'm 100% sure it is
>> nothing new to you, but it is new to me.)
>>
>> If we size the GCD memory space map exactly to what we can identity map
>> under UEFI, then the UEFI memmap will not advertize the rest of the RAM
>> to the OS, and the memory will be unusable.
>>
>> On the other hand, if we size the GCD to the exact RAM size (part of
>> which could be out of reach for the CPU *under UEFI*, using 4KB pages),
>> then the OS will be happy. But, what happens when gBS->AllocatePages()
>> is served from such a high (>48bits) address range, and then the client
>> module tries to access the (not mapped) chunk?
>>
> 
> That is an excellent question, given that IA32 and ARM are in exactly
> the same boat with [L]PAE.

And that's an excellent observation too; I should have noticed the
parallel with at least IA32 myself!

I remember the article where Brian explains why vendors ship IA32-only
firmware on 64-bit capable Intel processors. Hm... It's here:

https://software.intel.com/en-us/blogs/2015/07/22/why-cheap-systems-run-32-bit-uefi-on-x64-systems

Obviously Linux people were never happy with that, so they worked around
it, and the kernel switches to 64-bit mode itself, AFAIK... But what
about the RAM that the 32-bit DXE phase (and firmware runtime) can't
see, but the OS can? Maybe Linux can provide some pointers here (as you
say).

[...]

Thank you!
Laszlo
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to