From: "Dong, Eric" <eric.dong@intel.com>
To: Laszlo Ersek <lersek@redhat.com>
Cc: "edk2-devel@lists.01.org" <edk2-devel@lists.01.org>,
"Ni, Ruiyu" <ruiyu.ni@intel.com>,
"Marvin Häuser" <Marvin.Haeuser@outlook.com>,
"Jeff Fan" <vanjeff_919@hotmail.com>,
"Ard Biesheuvel" <ard.biesheuvel@linaro.org>
Subject: Re: [Patch] UefiCpuPkg/RegisterCpuFeaturesLib: Implement AllocateAcpiCpuData function.
Date: Wed, 8 Aug 2018 01:04:25 +0000 [thread overview]
Message-ID: <ED077930C258884BBCB450DB737E66224AC7CABD@shsmsx102.ccr.corp.intel.com> (raw)
In-Reply-To: <8cf4b763-52c3-9d91-56e9-53e38bd71f12@redhat.com>
Hi Laszlo,
> -----Original Message-----
> From: Laszlo Ersek [mailto:lersek@redhat.com]
> Sent: Saturday, August 4, 2018 12:46 AM
> To: Dong, Eric <eric.dong@intel.com>
> Cc: edk2-devel@lists.01.org; Ni, Ruiyu <ruiyu.ni@intel.com>; Marvin Häuser
> <Marvin.Haeuser@outlook.com>; Jeff Fan <vanjeff_919@hotmail.com>; Ard
> Biesheuvel <ard.biesheuvel@linaro.org>
> Subject: Re: [Patch] UefiCpuPkg/RegisterCpuFeaturesLib: Implement
> AllocateAcpiCpuData function.
>
> Hello Eric,
>
> OVMF does not include CpuFeaturesPei / CpuFeaturesDxe, and so it doesn't
> consume this library. I can't provide test results, but I have some superficial
> comments.
>
> First, I'm adding Marvin and Jeff -- I *vaguely* recall that this issue may have
> been raised by Marvin. Hm... yes, it seems so:
>
> [edk2] CpuS3DataDxe / DxeRegisterCpuFeaturesLib dependency.
>
> http://mid.mail-
> archive.com/VI1PR0801MB17908DB1F03A3C5F84545E1080690@VI1PR0801
> MB1790.eurprd08.prod.outlook.com
> https://lists.01.org/pipermail/edk2-devel/2018-May/025163.html
>
> I have three questions here:
>
> (1) Do we have a TianoCore BZ about this?
>
> (2) If not, does the currently proposed commit message capture the issue in
> enough detail? Should we reference Marvin's initial report and/or a
> TianoCore BZ (if we have one)?
>
Yes, it has an BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=959
I will include this info in my next version patch.
> (3) The implementation seems to follow Jeff's idea. Marvin and Jeff, can you
> please help with the review?
>
> Either way, I propose the following two tags to be appended:
>
> Reported-by: Marvin Häuser <Marvin.Haeuser@outlook.com>
> Suggested-by: Fan Jeff <vanjeff_919@hotmail.com>
>
Sure, will include them in my next version patch.
>
> And one technical question follows below:
>
> On 08/03/18 04:10, Eric Dong wrote:
> > Current code logic can't confirm CpuS3DataDxe driver start before
> > CpuFeaturesDxe driver. So the assumption in CpuFeaturesDxe not valid.
> > Add implementation for AllocateAcpiCpuData function to remove this
> > assumption.
> >
> > Pass OS boot and resume from S3 test.
> >
> > Cc: Laszlo Ersek <lersek@redhat.com>
> > Cc: Ruiyu Ni <ruiyu.ni@intel.com>
> > Contributed-under: TianoCore Contribution Agreement 1.1
> > Signed-off-by: Eric Dong <eric.dong@intel.com>
> > ---
> > .../DxeRegisterCpuFeaturesLib.c | 57 ++++++++++++++++++++--
> > 1 file changed, 54 insertions(+), 3 deletions(-)
> >
> > diff --git
> > a/UefiCpuPkg/Library/RegisterCpuFeaturesLib/DxeRegisterCpuFeaturesLib.
> > c
> > b/UefiCpuPkg/Library/RegisterCpuFeaturesLib/DxeRegisterCpuFeaturesLib.
> > c
> > index 902a339529..0722db6c64 100644
> > ---
> > a/UefiCpuPkg/Library/RegisterCpuFeaturesLib/DxeRegisterCpuFeaturesLib.
> > c
> > +++ b/UefiCpuPkg/Library/RegisterCpuFeaturesLib/DxeRegisterCpuFeatures
> > +++ Lib.c
> > @@ -207,11 +207,62 @@ AllocateAcpiCpuData (
> > VOID
> > )
> > {
> > + EFI_STATUS Status;
> > + UINTN NumberOfCpus;
> > + UINTN NumberOfEnabledProcessors;
> > + ACPI_CPU_DATA *AcpiCpuData;
> > + EFI_PHYSICAL_ADDRESS Address;
> > + UINTN TableSize;
> > + CPU_REGISTER_TABLE *RegisterTable;
> > + UINTN Index;
> > + EFI_PROCESSOR_INFORMATION ProcessorInfoBuffer;
> > +
> > + Address = BASE_4GB - 1;
> > + Status = gBS->AllocatePages (
> > + AllocateMaxAddress,
> > + EfiACPIMemoryNVS,
> > + EFI_SIZE_TO_PAGES (sizeof (ACPI_CPU_DATA)),
> > + &Address
> > + );
> > + ASSERT_EFI_ERROR (Status);
>
> I understand that this code is for IA32 and X64 only, but still, Ard has recently
> introduced a DxeServicesLib API for this kind of allocation:
> it's called AllocatePeiAccessiblePages(). See commit a40e0b7aa918.
>
> (4) Is it feasible to use that function here (and in the second instance below)?
>
After check the code, I found current usage modal not required it below 4G, also it doesn't need ACPI NVS type memory.
I will update it in my next version change.
> From a library dependency standpoint, I think it should be fine: we are
> modifying the DXE instance of the RegisterCpuFeaturesLib class, so a
> dependency on DxeServicesLib should be in order.
>
> Now, if this allocation *must* be satisfied from below 4GB, even if the PEI
> phase has access to >=4GB RAM (as determined by
>
> PhitHob->EfiFreeMemoryTop > MAX_UINT32
>
> ), then my suggestion is wrong (because in that case,
> AllocatePeiAccessiblePages() wouldn't restrict the allocation under 4GB).
>
> CC'ing Ard too.
>
> Thanks!
> Laszlo
>
> > + AcpiCpuData = (ACPI_CPU_DATA *) (UINTN) Address; ASSERT
> > + (AcpiCpuData != NULL);
> > +
> > + GetNumberOfProcessor (&NumberOfCpus,
> &NumberOfEnabledProcessors);
> > + AcpiCpuData->NumberOfCpus = (UINT32) NumberOfCpus;
> > +
> > //
> > - // CpuS3DataDxe will do it.
> > + // Allocate buffer for empty RegisterTable and
> > + PreSmmInitRegisterTable for all CPUs
> > //
> > - ASSERT (FALSE);
> > - return NULL;
> > + TableSize = 2 * NumberOfCpus * sizeof (CPU_REGISTER_TABLE);
> > + Address = BASE_4GB - 1; Status = gBS->AllocatePages (
> > + AllocateMaxAddress,
> > + EfiACPIMemoryNVS,
> > + EFI_SIZE_TO_PAGES (TableSize),
> > + &Address
> > + );
> > + ASSERT_EFI_ERROR (Status);
> > + RegisterTable = (CPU_REGISTER_TABLE *) (UINTN) Address;
> > +
> > + for (Index = 0; Index < NumberOfCpus; Index++) {
> > + Status = GetProcessorInformation (Index, &ProcessorInfoBuffer);
> > + ASSERT_EFI_ERROR (Status);
> > +
> > + RegisterTable[Index].InitialApicId =
> (UINT32)ProcessorInfoBuffer.ProcessorId;
> > + RegisterTable[Index].TableLength = 0;
> > + RegisterTable[Index].AllocatedSize = 0;
> > + RegisterTable[Index].RegisterTableEntry = 0;
> > +
> > + RegisterTable[NumberOfCpus + Index].InitialApicId =
> (UINT32)ProcessorInfoBuffer.ProcessorId;
> > + RegisterTable[NumberOfCpus + Index].TableLength = 0;
> > + RegisterTable[NumberOfCpus + Index].AllocatedSize = 0;
> > + RegisterTable[NumberOfCpus + Index].RegisterTableEntry = 0; }
> > + AcpiCpuData->RegisterTable =
> (EFI_PHYSICAL_ADDRESS)(UINTN)RegisterTable;
> > + AcpiCpuData->PreSmmInitRegisterTable =
> > + (EFI_PHYSICAL_ADDRESS)(UINTN)(RegisterTable + NumberOfCpus);
> > +
> > + return AcpiCpuData;
> > }
> >
> > /**
> >
prev parent reply other threads:[~2018-08-08 1:04 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-08-03 2:10 [Patch] UefiCpuPkg/RegisterCpuFeaturesLib: Implement AllocateAcpiCpuData function Eric Dong
2018-08-03 16:45 ` Laszlo Ersek
2018-08-08 1:04 ` Dong, Eric [this message]
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=ED077930C258884BBCB450DB737E66224AC7CABD@shsmsx102.ccr.corp.intel.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