public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Ni, Ray" <ray.ni@intel.com>
To: "fanjianfeng@byosoft.com.cn" <fanjianfeng@byosoft.com.cn>,
	devel <devel@edk2.groups.io>,
	"Ma, Maurice" <maurice.ma@intel.com>,
	Patrick Rudolph <patrick.rudolph@9elements.com>,
	"Dong, Guo" <guo.dong@intel.com>,
	"Dong, Eric" <eric.dong@intel.com>
Cc: "devel@edk2.groups.io" <devel@edk2.groups.io>,
	"You, Benjamin" <benjamin.you@intel.com>
Subject: Re: [edk2-devel] [PATCH] UefiPayloadPkg/UefiPayloadEntry: Remove 4GB memory WA
Date: Tue, 23 Feb 2021 02:52:11 +0000	[thread overview]
Message-ID: <CO1PR11MB49300F453078DE5B17B70AF88C809@CO1PR11MB4930.namprd11.prod.outlook.com> (raw)
In-Reply-To: <202102230850236136429@byosoft.com.cn>

[-- Attachment #1: Type: text/plain, Size: 6669 bytes --]

Jeff,
You are right that BSP’s GDT and IDT tables are under 4G memory.

It’s because when AP wakes up, it needs the GDT for entering protected mode. AP cannot access above 4G memory without entering to long mode.

I do agree that the 64bit IDT is not proper for AP when entering protected mode. As long as there is no exception in the short time frame (load 64bit IDT, before entering long mode), it’s still ok.

Thanks,
Ray

From: fanjianfeng@byosoft.com.cn <fanjianfeng@byosoft.com.cn>
Sent: Tuesday, February 23, 2021 8:50 AM
To: devel <devel@edk2.groups.io>; Ma, Maurice <maurice.ma@intel.com>; Patrick Rudolph <patrick.rudolph@9elements.com>; Dong, Guo <guo.dong@intel.com>; Dong, Eric <eric.dong@intel.com>; Ni, Ray <ray.ni@intel.com>
Cc: devel@edk2.groups.io; You, Benjamin <benjamin.you@intel.com>
Subject: Re: Re: [edk2-devel] [PATCH] UefiPayloadPkg/UefiPayloadEntry: Remove 4GB memory WA

we will save the current BSP's GDT and IDT for APs at first time APs are waken by BSP as below. APs will start from real mode to protected mode and then to long mode. During protected mode, BSP's GDT/IDT table are working on APs.

In UefiCpuPkg\Library\MpInitLib\MpLib.c,
  //
  // Get the BSP's data of GDT and IDT
  //
  AsmReadGdtr ((IA32_DESCRIPTOR *) &ExchangeInfo->GdtrProfile);
  AsmReadIdtr ((IA32_DESCRIPTOR *) &ExchangeInfo->IdtrProfile);

It seems to be one bug we have assumption on GDT table and IDT table located under 4G memory space.

Could Ray&Eric help me to confirm it?

Jeff

From: Ma, Maurice<mailto:maurice.ma@intel.com>
Date: 2021-02-23 00:49
To: Patrick Rudolph<mailto:patrick.rudolph@9elements.com>; Dong, Guo<mailto:guo.dong@intel.com>; Dong, Eric<mailto:eric.dong@intel.com>; Ni, Ray<mailto:ray.ni@intel.com>
CC: devel@edk2.groups.io<mailto:devel@edk2.groups.io>; You, Benjamin<mailto:benjamin.you@intel.com>
Subject: Re: [edk2-devel] [PATCH] UefiPayloadPkg/UefiPayloadEntry: Remove 4GB memory WA
Hi, Ray and Eric,

Is there any reason why the GDT base was typecast to UINT32 in CpuDxe driver ?
In x64 long mode, the GDT base is actually 64bit.   Typecasting will zero out the high 32bit address.
To me the correct code seems to be something like:
gdtPtr.Base = (UINTN)(VOID*) gdt;

Thanks
Maurice
> -----Original Message-----
> From: Patrick Rudolph <patrick.rudolph@9elements.com<mailto:patrick.rudolph@9elements.com>>
> Sent: Monday, February 22, 2021 7:43
> To: Dong, Guo <guo.dong@intel.com<mailto:guo.dong@intel.com>>
> Cc: devel@edk2.groups.io<mailto:devel@edk2.groups.io>; Ma, Maurice <maurice.ma@intel.com<mailto:maurice.ma@intel.com>>; You,
> Benjamin <benjamin.you@intel.com<mailto:benjamin.you@intel.com>>
> Subject: Re: [edk2-devel] [PATCH] UefiPayloadPkg/UefiPayloadEntry:
> Remove 4GB memory WA
>
> Hi Guo,
> I tested on 078400ee15e7b250e4dfafd840c2e0c19835e16b and run it in
> QEMU.
> The problem seems to be here, as gdt is allocated > 4GiB:
> gdtPtr.Base = (UINT32)(UINTN)(VOID*) gdt;
>
> Regards,
> Patrick
>
> On Mon, Feb 22, 2021 at 3:59 PM Dong, Guo <guo.dong@intel.com<mailto:guo.dong@intel.com>> wrote:
> >
> >
> > Hi Patrick,
> > Please make sure you are using latest master when testing this patch.
> > That issue should be fix be this patch:
> > UefiCpuPkg/CpuDxe: Fix boot error (commit:
> > ebfe2d3eb5ac7fd92d74011edb31303a181920c7)
> > And there is similar fix in another place as below:
> > UefiCpuPkg/MpInitLib: Fix a hang in above 4GB case (commit:
> > edd74ad3ad79b855f76d9cf60a96c405cb3e863b)
> >
> > Thanks,
> > Guo
> >
> > > -----Original Message-----
> > > From: devel@edk2.groups.io<mailto:devel@edk2.groups.io> <devel@edk2.groups.io<mailto:devel@edk2.groups.io>> On Behalf Of
> > > Patrick Rudolph
> > > Sent: Monday, February 22, 2021 7:04 AM
> > > To: devel@edk2.groups.io<mailto:devel@edk2.groups.io>; Ma, Maurice <maurice.ma@intel.com<mailto:maurice.ma@intel.com>>
> > > Cc: Dong, Guo <guo.dong@intel.com<mailto:guo.dong@intel.com>>; You, Benjamin
> > > <benjamin.you@intel.com<mailto:benjamin.you@intel.com>>
> > > Subject: Re: [edk2-devel] [PATCH] UefiPayloadPkg/UefiPayloadEntry:
> > > Remove 4GB memory WA
> > >
> > > This patch breaks booting on master.
> > > In CpuDxe.efi / InitGlobalDescriptorTable as the GDT pointer is
> > > casted to 32bits.
> > >
> > > Regards,
> > > Patrick
> > >
> > > On Fri, Feb 19, 2021 at 3:12 AM Ma, Maurice <maurice.ma@intel.com<mailto:maurice.ma@intel.com>>
> wrote:
> > > >
> > > > Reviewed-by:  Maurice Ma <maurice.ma@intel.com<mailto:maurice.ma@intel.com>>
> > > >
> > > > Regards
> > > > Maurice
> > > >
> > > > > -----Original Message-----
> > > > > From: Dong, Guo <guo.dong@intel.com<mailto:guo.dong@intel.com>>
> > > > > Sent: Sunday, February 14, 2021 21:13
> > > > > To: devel@edk2.groups.io<mailto:devel@edk2.groups.io>
> > > > > Cc: Ma, Maurice <maurice.ma@intel.com<mailto:maurice.ma@intel.com>>; You, Benjamin
> > > > > <benjamin.you@intel.com<mailto:benjamin.you@intel.com>>
> > > > > Subject: [edk2-devel] [PATCH] UefiPayloadPkg/UefiPayloadEntry:
> > > > > Remove 4GB memory WA
> > > > >
> > > > > Previous it would hang in CpuDxe if DXE drivers are dispatched above
> 4GB.
> > > > > Now remove the work around since the fixed in CpuDxe are merged.
> > > > >
> > > > > Signed-off-by: Guo Dong <guo.dong@intel.com<mailto:guo.dong@intel.com>>
> > > > > ---
> > > > >  UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.c | 5 -----
> > > > >  1 file changed, 5 deletions(-)
> > > > >
> > > > > diff --git a/UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.c
> > > > > b/UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.c
> > > > > index 805f5448d9..c403b0a80a 100644
> > > > > --- a/UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.c
> > > > > +++ b/UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.c
> > > > > @@ -40,11 +40,6 @@ MemInfoCallback (
> > > > >               EFI_RESOURCE_ATTRIBUTE_WRITE_THROUGH_CACHEABLE |
> > > > >               EFI_RESOURCE_ATTRIBUTE_WRITE_BACK_CACHEABLE;
> > > > >
> > > > > -  if (Base >= BASE_4GB ) {
> > > > > -    // Remove tested attribute to avoid DXE core to dispatch driver to
> > > > > memory above 4GB
> > > > > -    Attribue &= ~EFI_RESOURCE_ATTRIBUTE_TESTED;
> > > > > -  }
> > > > > -
> > > > >    BuildResourceDescriptorHob (Type, Attribue,
> > > > > (EFI_PHYSICAL_ADDRESS)Base, Size);
> > > > >    DEBUG ((DEBUG_INFO , "buildhob: base = 0x%lx, size = 0x%lx,
> > > > > type = 0x%x\n", Base, Size, Type));
> > > > >
> > > > > --
> > > > > 2.16.2.windows.1
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > >
> > >
> > >
> > >
> >






[-- Attachment #2: Type: text/html, Size: 39216 bytes --]

  reply	other threads:[~2021-02-23  2:52 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-02-15  5:13 [edk2-devel] [PATCH] UefiPayloadPkg/UefiPayloadEntry: Remove 4GB memory WA Guo Dong
2021-02-19  2:12 ` Ma, Maurice
2021-02-22 14:04   ` Patrick Rudolph
2021-02-22 14:59     ` Guo Dong
2021-02-22 15:42       ` Patrick Rudolph
2021-02-22 16:49         ` Ma, Maurice
2021-02-22 17:10           ` Guo Dong
2021-02-22 18:06             ` Patrick Rudolph
2021-02-22 18:32               ` Guo Dong
2021-02-23  0:50           ` fanjianfeng
2021-02-23  2:52             ` Ni, Ray [this message]
2021-02-23  3:42               ` Jeff Fan
2021-02-23  5:21                 ` Ni, Ray
2021-02-23  5:44                   ` Jeff Fan
2021-02-24  1:49                     ` Ni, Ray
2021-02-23  7:25                   ` Ma, Maurice
2021-02-23  9:07                     ` Ni, Ray
2021-02-23 14:12                       ` Ma, Maurice

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CO1PR11MB49300F453078DE5B17B70AF88C809@CO1PR11MB4930.namprd11.prod.outlook.com \
    --to=devel@edk2.groups.io \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox