> On Mar 11, 2019, at 9:04 AM, Yao, Jiewen <jiewen....@intel.com> wrote:
> 
> Thanks Andrew.
> + More CPU people in our team.
> 
> Do you want to post your patch there for reference? :-)
> 
> BTW: Would you please share how to trigger such case at your side?
> Did you report above 4GB memory to be tested?

Jiewen,

I'm working on a chipset that is not open source and I or'ed in 
EFI_RESOURCE_ATTRIBUTE_TESTED to the above 4GB allocation in 
BuildResourceDescriptorHob(). The DXE Core then picked this area for the heap, 
as I seem to remember the 1st loop favors the PHIT, and the 2nd loop favors the 
largest area of free memory. 

> As such all drivers are loaded to above 4GB?

DXE Core is loaded low, and all the drivers loaded by DXE are in > 4GB memory. 

> Do you also allocate BIN to above 4GB?
> 

No I just marked the above 4G memory as tested. 

Thanks,

Andrew Fish

> Thank you
> Yao Jiewen
> 
> 
> 
>> -----Original Message-----
>> From: edk2-devel [mailto:edk2-devel-boun...@lists.01.org] On Behalf Of
>> Andrew Fish via edk2-devel
>> Sent: Monday, March 11, 2019 11:59 PM
>> To: Yao, Jiewen <jiewen....@intel.com>
>> Cc: edk2-devel <edk2-devel@lists.01.org>; Laszlo Ersek <ler...@redhat.com>
>> Subject: Re: [edk2] UefiCpuPkg CpuDxe GDT init question?
>> 
>> Jiewen,
>> 
>> These three fixes got me past the CpuDxe driver:
>> https://bugzilla.tianocore.org/show_bug.cgi?id=1613
>> 
>> Now I getting page faults loading SMM....
>> 
>> Thanks,
>> 
>> Andrew Fish
>> 
>>> On Mar 8, 2019, at 7:10 PM, Andrew Fish <af...@apple.com> wrote:
>>> 
>>> 
>>> 
>>>> On Mar 8, 2019, at 7:08 AM, Laszlo Ersek <ler...@redhat.com
>> <mailto:ler...@redhat.com>> wrote:
>>>> 
>>>> On 03/08/19 15:13, Yao, Jiewen wrote:
>>>>> I guess the historic reason is that AP and BSP share same GDT before. As
>> such, the GDT need to be below 4G, to let AP switch from real mode to
>> protected mode.
>>>>> We don't get issue, because Runtime memory is in BIN, and most
>> platform allocates BIN under 4G.
>>>>> 
>>>>> Some thought:
>>>>> 1) I am think we not sure if AP is using same GDT as BSP today. If yes, we
>> need GDT under 4G, by using MaxAddress. If no, there should be no
>> restriction for BSP GDT. The (UINT32) case should be removed for BSP. But
>> we still AP GDT below 4G, to support wake from INIT-SIPI-SIPI.
>>> 
>>> Jiewen,
>>> 
>>> It looks like there are several places that assume memory is < 4 GB in the
>> CpuDxe driver.
>>> 
>>> I noticed SetCodeSelector () is using a far jump to change the CS at that is
>> limited < 4 GB. I had to hack around it via:
>>>  popq    %rax
>>>  pushq   %rcx
>>>  pushq   %rax
>>>  lretq
>>> 
>>> There is some other crash later on.
>>> 
>>> 
>>>>> 2) I am not sure why we need runtime memory. Do we need touch GDT
>> at UEFI runtime?
>>>> 
>>>> I could be confusing things *very badly*, but I vaguely remember that
>>>> APs could be woken up spuriously later, and they must be able to execute
>>>> code "enough" to go back to sleep.
>>>> 
>>>> The following commits look relevant:
>>>> 
>>>> - 7615702169b8 ("UefiCpuPkg/MpInitLib: Add AsmRelocateApLoop()
>> assembly
>>>> code", 2016-08-17)
>>>> 
>>>> - 4d3314f69488 ("UefiCpuPkg/MpInitLib: Place APs in safe loop before
>>>> hand-off to OS", 2016-08-17)
>>>> 
>>>> - bf2786dc7900 ("UefiCpuPkg/DxeMpLib: Allocate new safe stack < 4GB",
>>>> 2016-11-28)
>>>> 
>>> 
>>> If I'm remembering correctly there are optional idle states for the AP. I
>> think the real mode hlt loop might have used too much power on an UP OS.
>>> 
>>> It is also not clear to me that we don't need the GDT when in real mode. In
>> big-real mode you go to protected mode set the GDT and then it can get
>> used for big-real so it seems like  the GDT is in play even in real mode.
>>> 
>>> Thanks,
>>> 
>>> Andrew Fish
>>> 
>>> 
>>>> Laszlo
>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> Thank you
>>>>> Yao Jiewen
>>>>> 
>>>>> 
>>>>>> -----Original Message-----
>>>>>> From: edk2-devel [mailto:edk2-devel-boun...@lists.01.org
>> <mailto:edk2-devel-boun...@lists.01.org>] On Behalf Of
>>>>>> Laszlo Ersek
>>>>>> Sent: Friday, March 8, 2019 12:00 AM
>>>>>> To: Andrew Fish <af...@apple.com <mailto:af...@apple.com>>;
>> edk2-devel <edk2-devel@lists.01.org <mailto:edk2-devel@lists.01.org>>
>>>>>> Subject: Re: [edk2] UefiCpuPkg CpuDxe GDT init question?
>>>>>> 
>>>>>> Hi Andrew,
>>>>>> 
>>>>>> On 03/07/19 23:37, Andrew Fish via edk2-devel wrote:
>>>>>>> I'm trying to understand why gdtPtr.Base is casting to (UINT32)?
>>>>>>> 1) gdtPtr.Base is a a UINTN
>>>>>>> 2) It is legal for AllocateRuntimePool() to return an address > 4GB
>>>>>>> 
>>>>>>> It seems like the code should just cast to (UINTN)?
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>> 
>> https://github.com/tianocore/edk2/blob/master/UefiCpuPkg/CpuDxe/CpuG
>> <https://github.com/tianocore/edk2/blob/master/UefiCpuPkg/CpuDxe/Cpu
>> G>
>>>>>> dt.c#L151
>>>>>> 
>>>>>> I think you are right.
>>>>>> 
>>>>>> I'm missing the background on this too. I tried to see if any
>>>>>> justification was given in a git commit message, but according to "git
>>>>>> blame", this code dates back to the original addition of the driver,
>>>>>> namely commit a47463f28382 ("Add CPU DXE driver for IA32 & X64
>>>>>> processor
>>>>>> architectures.", 2009-05-27). The commit message is unhelpful (for
>> 3119
>>>>>> lines added).
>>>>>> 
>>>>>> Thanks
>>>>>> Laszlo
>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> VOID
>>>>>>> InitGlobalDescriptorTable (
>>>>>>> VOID
>>>>>>> )
>>>>>>> {
>>>>>>> GDT_ENTRIES *gdt;
>>>>>>> IA32_DESCRIPTOR gdtPtr;
>>>>>>> 
>>>>>>> //
>>>>>>> // Allocate Runtime Data for the GDT
>>>>>>> //
>>>>>>> gdt = AllocateRuntimePool (sizeof (GdtTemplate) + 8);
>>>>>>> ASSERT (gdt != NULL);
>>>>>>> gdt = ALIGN_POINTER (gdt, 8);
>>>>>>> 
>>>>>>> //
>>>>>>> // Initialize all GDT entries
>>>>>>> //
>>>>>>> CopyMem (gdt, &GdtTemplate, sizeof (GdtTemplate));
>>>>>>> 
>>>>>>> //
>>>>>>> // Write GDT register
>>>>>>> //
>>>>>>> gdtPtr.Base = (UINT32)(UINTN)(VOID*) gdt;
>>>>>>> gdtPtr.Limit = (UINT16) (sizeof (GdtTemplate) - 1);
>>>>>>> AsmWriteGdtr (&gdtPtr);
>>>>>>> 
>>>>>>> Thanks,
>>>>>>> 
>>>>>>> Andrew Fish
>>>>>>> _______________________________________________
>>>>>>> edk2-devel mailing list
>>>>>>> edk2-devel@lists.01.org
>>>>>>> https://lists.01.org/mailman/listinfo/edk2-devel
>>>>>>> 
>>>>>> 
>>>>>> _______________________________________________
>>>>>> edk2-devel mailing list
>>>>>> edk2-devel@lists.01.org
>>>>>> https://lists.01.org/mailman/listinfo/edk2-devel
>> 
>> _______________________________________________
>> edk2-devel mailing list
>> edk2-devel@lists.01.org
>> https://lists.01.org/mailman/listinfo/edk2-devel

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to