From: "Laszlo Ersek" <lersek@redhat.com>
To: Ji-yunX Lu <ji-yunx.lu@intel.com>, devel@edk2.groups.io
Cc: Eric Dong <eric.dong@intel.com>, Ray Ni <ray.ni@intel.com>,
Rahul Kumar <rahul1.kumar@intel.com>
Subject: Re: [edk2: PATCH] UefiCpuPkg: To enable X2Apic by default
Date: Fri, 10 Jul 2020 13:51:05 +0200 [thread overview]
Message-ID: <35d1394b-605f-9dc3-6ec1-73668229e74e@redhat.com> (raw)
In-Reply-To: <822cc92e-74f8-14b3-928f-49c0fd670ffc@redhat.com>
On 07/10/20 07:38, Laszlo Ersek wrote:
> On 07/10/20 05:31, Ji-yunX Lu wrote:
>> BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=2845
>> Platform shall enable X2APIC by default to meet requirements for interrupt steering policy on Windows OS.
>>
>> Change-Id: Ia9e24bce79c91762c560fa3de6260716939f0b1b
>> Signed-off-by: Ji-yunX Lu <ji-yunx.lu@intel.com>
>> Cc: Eric Dong <eric.dong@intel.com>
>> Cc: Ray Ni <ray.ni@intel.com>
>> Cc: Laszlo Ersek <lersek@redhat.com>
>> Cc: Rahul Kumar <rahul1.kumar@intel.com>
>> ---
>> UefiCpuPkg/Library/MpInitLib/MpLib.c | 21 ++++-----------------
>> 1 file changed, 4 insertions(+), 17 deletions(-)
>>
>> diff --git a/UefiCpuPkg/Library/MpInitLib/MpLib.c b/UefiCpuPkg/Library/MpInitLib/MpLib.c
>> index ab7a8ed663..70bc5da195 100644
>> --- a/UefiCpuPkg/Library/MpInitLib/MpLib.c
>> +++ b/UefiCpuPkg/Library/MpInitLib/MpLib.c
>> @@ -488,8 +488,8 @@ CollectProcessorCount (
>> )
>> {
>> UINTN Index;
>> - CPU_INFO_IN_HOB *CpuInfoInHob;
>> BOOLEAN X2Apic;
>> + CPUID_VERSION_INFO_ECX VersionInfoEcx;
>>
>> //
>> // Send 1st broadcast IPI to APs to wakeup APs
>> @@ -505,26 +505,13 @@ CollectProcessorCount (
>> CpuPause ();
>> }
>>
>> -
>> - //
>> - // Enable x2APIC mode if
>> - // 1. Number of CPU is greater than 255; or
>> - // 2. There are any logical processors reporting an Initial APIC ID of 255 or greater.
>> - //
>> X2Apic = FALSE;
>> - if (CpuMpData->CpuCount > 255) {
>> + AsmCpuid (CPUID_VERSION_INFO, NULL, NULL, &VersionInfoEcx.Uint32, NULL);
>> + if (VersionInfoEcx.Bits.x2APIC == 1) {
>> //
>> - // If there are more than 255 processor found, force to enable X2APIC
>> + // Enable x2APIC mode if capable
>> //
>> X2Apic = TRUE;
>> - } else {
>> - CpuInfoInHob = (CPU_INFO_IN_HOB *) (UINTN) CpuMpData->CpuInfoInHob;
>> - for (Index = 0; Index < CpuMpData->CpuCount; Index++) {
>> - if (CpuInfoInHob[Index].InitialApicId >= 0xFF) {
>> - X2Apic = TRUE;
>> - break;
>> - }
>> - }
>> }
>>
>> if (X2Apic) {
>>
>
> (1) I think this would break platforms that resolve the LocalApicLib
> class to the "BaseXApicLib.inf" instance.
>
> Based on the message of my earlier commit decb365b0016 ("OvmfPkg: select
> LocalApicLib instance with x2apic support", 2015-11-30), it seems like
> the BaseXApicLib instance notices and trips an assert when the LAPIC is
> in X2APIC mode, at the next time a LocalApicLib API is used.
>
> The BaseXApicLib instance contains many ASSERTs like this:
>
> ASSERT (GetApicMode () == LOCAL_APIC_MODE_XAPIC);
>
> and the GetApicMode() function itself has the following ASSERT:
>
> ASSERT (ApicBaseMsr.Bits.EXTD == 0);
>
> So, the change proposed in this patch needs to be gated by a boolean or
> Feature PCD, and the PCD should default to FALSE. If the platform uses
> the BaseXApicX2ApicLib instance, then it can set the PCD to TRUE.
>
> In turn, for such platform DSCs that already use BaseXApicX2ApicLib
> exclusively, in edk2 and in edk2-platforms, please post patches that set
> the PCD to TRUE. This includes the OvmfPkg platform DSC files, for example.
If a PCD is considered overkill for this, then a new API could be
declared in LocalApicLib.
UINTN
EFIAPI
GetMaxApicMode (
VOID
);
In BaseXApicLib, the function would return constant LOCAL_APIC_MODE_XAPIC.
In BaseXApicX2ApicLib, the function would call the AsmCpuid() seen above
in the patch, and return LOCAL_APIC_MODE_XAPIC or
LOCAL_APIC_MODE_X2APIC, dependent on "VersionInfoEcx.Bits.x2APIC".
And then this patch would call GetMaxApicMode(), rather than check CPUID.
Thanks
Laszlo
prev parent reply other threads:[~2020-07-10 11:51 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-07-10 3:31 [edk2: PATCH] UefiCpuPkg: To enable X2Apic by default Ji-yunX Lu
2020-07-10 5:38 ` Laszlo Ersek
2020-07-10 11:51 ` Laszlo Ersek [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=35d1394b-605f-9dc3-6ec1-73668229e74e@redhat.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