From nobody Fri Apr 19 13:57:10 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+43622+1787277+3901457@groups.io; helo=web01.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+43622+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=intel.com ARC-Seal: i=1; a=rsa-sha256; t=1562896405; cv=none; d=zoho.com; s=zohoarc; b=l61jeC6UPEOHXY+fSUfIdb3T0Rf9xcFTJmaXy6SjZzkLeA5xClqjiaE5GpKfpMgURcxkqXrFOi55C0x/O6Emw3iq/sU9nLMFI7V+ytoT8EI4D+TycAyk6rFwmBXJjf7WbNQeKFWjWdZIGt65LihiH6Y2IE12Jl3DGy6vLmWlWrE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1562896405; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Id:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To:ARC-Authentication-Results; bh=M7cpwu521LC1e82dHcw2cbapfFUFCa2AZu2L+XfKVD4=; b=jJQOpad8TfK793u7tDWcmVqmqRBPwa25jACFI8Gc1/40qTo9bsfICdtmY8R8jEE3BILXAvDO5r90lkth319dNqEJqlUJSdjtY/Er/+RhKzAsGTbkWkHsBG3UFTWysu8ZfI26bVzEmf4Qq2RpUWPfNvSCNFtnOnaH5NJFZmVKD7o= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=pass; spf=pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+43622+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) header.from= Received: from web01.groups.io (web01.groups.io [66.175.222.12]) by mx.zohomail.com with SMTPS id 1562896405729832.1450499037048; Thu, 11 Jul 2019 18:53:25 -0700 (PDT) Return-Path: X-Received: from mga01.intel.com (mga01.intel.com []) by groups.io with SMTP; Thu, 11 Jul 2019 18:53:24 -0700 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False X-Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmsmga101.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 11 Jul 2019 18:53:24 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.63,480,1557212400"; d="scan'208";a="249985067" X-Received: from ydong10-win10.ccr.corp.intel.com ([10.239.158.133]) by orsmga001.jf.intel.com with ESMTP; 11 Jul 2019 18:53:22 -0700 From: "Dong, Eric" To: devel@edk2.groups.io Cc: Ray Ni , Laszlo Ersek , Chandana Kumar , Star Zeng Subject: [edk2-devel] [Patch 1/2] UefiCpuPkg/RegisterCpuFeaturesLib: Avoid AP calls gBS service. Date: Fri, 12 Jul 2019 09:53:07 +0800 Message-Id: <20190712015308.26492-2-eric.dong@intel.com> In-Reply-To: <20190712015308.26492-1-eric.dong@intel.com> References: <20190712015308.26492-1-eric.dong@intel.com> MIME-Version: 1.0 Precedence: Bulk List-Unsubscribe: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,eric.dong@intel.com Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1562896405; bh=EkM00xoEyp9d+QdOprUyXEY/nD5YVTQa3B3yFPjTJz4=; h=Cc:Date:From:Reply-To:Subject:To; b=ZHIZ92y8tYeJBhTcW2egzpHvvLyjdOzZ6hVqzNMfwRVuwLg3HqvTH4qvma7tbdQ4eHz 5eNLiCO6XhhnlREUV5REbcf4mjpDj8Sb4B5c3Ic0VD/1CJiE+/2BSlJsfXXahUIujC42y CnOKk1ohuYWKrIhaMIQudUWDxcdABqonmjw= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Type: text/plain; charset="utf-8" REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3D1972 AP calls CollectProcessorData() to collect processor info. CollectProcessorData function finally calls PcdGetSize function to get DynamicPCD PcdCpuFeaturesSetting value. PcdGetSize will use gBS which caused below assert info: Processor Info: Package: 1, MaxCore : 4, MaxThread: 1 Package: 0, Valid Core : 4 ASSERT [CpuFeaturesPei] c:\projects\jsl\jsl_v1193\Edk2\MdePkg\Library \PeiServicesTablePointerLibIdt\PeiServicesTablePointer.c(48): PeiServices !=3D ((void *) 0) This change uses saved global pcd size instead of calls PcdGetSize to fix this issue. Cc: Ray Ni Cc: Laszlo Ersek Cc: Chandana Kumar Cc: Star Zeng Signed-off-by: Eric Dong Reviewed-by: Ray Ni --- .../RegisterCpuFeaturesLib/CpuFeaturesInitialize.c | 13 ++++++++----- .../RegisterCpuFeaturesLib/RegisterCpuFeaturesLib.c | 5 +++++ 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/UefiCpuPkg/Library/RegisterCpuFeaturesLib/CpuFeaturesInitializ= e.c b/UefiCpuPkg/Library/RegisterCpuFeaturesLib/CpuFeaturesInitialize.c index aff7ad600c..87bfc64250 100644 --- a/UefiCpuPkg/Library/RegisterCpuFeaturesLib/CpuFeaturesInitialize.c +++ b/UefiCpuPkg/Library/RegisterCpuFeaturesLib/CpuFeaturesInitialize.c @@ -246,19 +246,20 @@ CpuInitDataInitialize ( =20 @param[in] SupportedFeatureMask The pointer to CPU feature bits mask b= uffer @param[in] OrFeatureBitMask The feature bit mask to do OR operation + @param[in] BitMaskSize The CPU feature bits mask buffer size. + **/ VOID SupportedMaskOr ( IN UINT8 *SupportedFeatureMask, - IN UINT8 *OrFeatureBitMask + IN UINT8 *OrFeatureBitMask, + IN UINT32 BitMaskSize ) { UINTN Index; - UINTN BitMaskSize; UINT8 *Data1; UINT8 *Data2; =20 - BitMaskSize =3D PcdGetSize (PcdCpuFeaturesSetting); Data1 =3D SupportedFeatureMask; Data2 =3D OrFeatureBitMask; for (Index =3D 0; Index < BitMaskSize; Index++) { @@ -384,12 +385,14 @@ CollectProcessorData ( // SupportedMaskOr ( CpuFeaturesData->InitOrder[ProcessorNumber].FeaturesSupportedMask, - CpuFeature->FeatureMask + CpuFeature->FeatureMask, + CpuFeaturesData->BitMaskSize ); } else if (CpuFeature->SupportFunc (ProcessorNumber, CpuInfo, CpuFeatu= re->ConfigData)) { SupportedMaskOr ( CpuFeaturesData->InitOrder[ProcessorNumber].FeaturesSupportedMask, - CpuFeature->FeatureMask + CpuFeature->FeatureMask, + CpuFeaturesData->BitMaskSize ); } Entry =3D Entry->ForwardLink; diff --git a/UefiCpuPkg/Library/RegisterCpuFeaturesLib/RegisterCpuFeaturesL= ib.c b/UefiCpuPkg/Library/RegisterCpuFeaturesLib/RegisterCpuFeaturesLib.c index fa0f0b41e2..36aabd7267 100644 --- a/UefiCpuPkg/Library/RegisterCpuFeaturesLib/RegisterCpuFeaturesLib.c +++ b/UefiCpuPkg/Library/RegisterCpuFeaturesLib/RegisterCpuFeaturesLib.c @@ -658,6 +658,11 @@ RegisterCpuFeatureWorker ( InitializeListHead (&CpuFeaturesData->FeatureList); InitializeSpinLock (&CpuFeaturesData->CpuFlags.MemoryMappedLock); InitializeSpinLock (&CpuFeaturesData->CpuFlags.ConsoleLogLock); + // + // Driver has assumption that these three PCD should has same buffer s= ize. + // + ASSERT (PcdGetSize (PcdCpuFeaturesSetting) =3D=3D PcdGetSize (PcdCpuFe= aturesCapability)); + ASSERT (PcdGetSize (PcdCpuFeaturesSetting) =3D=3D PcdGetSize (PcdCpuFe= aturesSupport)); CpuFeaturesData->BitMaskSize =3D (UINT32) BitMaskSize; } ASSERT (CpuFeaturesData->BitMaskSize =3D=3D BitMaskSize); --=20 2.21.0.windows.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#43622): https://edk2.groups.io/g/devel/message/43622 Mute This Topic: https://groups.io/mt/32437607/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- From nobody Fri Apr 19 13:57:10 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+43623+1787277+3901457@groups.io; helo=web01.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+43623+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=intel.com ARC-Seal: i=1; a=rsa-sha256; t=1562896408; cv=none; d=zoho.com; s=zohoarc; b=c9YSJza8T+olT4TXU8jn6WWhEyHlyL471UQO6kofwcdRF4PsZQMxozKlYtNupwFp0jJlfgZAWWKuFuhwt3AO99IcdIXgRINYWPSUVu5lDOlqW92S2mFR4oIeWMRIcPJFvGr2Ze8sXY2DqUj+mxnzSWb617N1Qgw2d7oZN+GRErQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1562896408; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Id:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To:ARC-Authentication-Results; bh=XbTFOumCvR45HRYIzngzXPsN2a86iKH+tC7sydxeyVI=; b=Q3Sy6LNYr6GcNi1acpsaE6HMLZuaCEN4yR7rP2gJwN+SbBfxJ7g/A9RR495Y+YswGg+31rIZZhYaImJQziTui+FxnDi3bHI/qSOukgafJVcqsVID2Fq94juM4onuKWN0gFSrlzCPsRBCdkkHM+mKGHFPW9K7E+EMm27U6vQuSAs= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=pass; spf=pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+43623+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) header.from= Received: from web01.groups.io (web01.groups.io [66.175.222.12]) by mx.zohomail.com with SMTPS id 1562896408287675.8414227436285; Thu, 11 Jul 2019 18:53:28 -0700 (PDT) Return-Path: X-Received: from mga01.intel.com (mga01.intel.com []) by groups.io with SMTP; Thu, 11 Jul 2019 18:53:27 -0700 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False X-Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmsmga101.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 11 Jul 2019 18:53:27 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.63,480,1557212400"; d="scan'208";a="249985078" X-Received: from ydong10-win10.ccr.corp.intel.com ([10.239.158.133]) by orsmga001.jf.intel.com with ESMTP; 11 Jul 2019 18:53:24 -0700 From: "Dong, Eric" To: devel@edk2.groups.io Cc: Ray Ni , Laszlo Ersek , Chandana Kumar , Star Zeng Subject: [edk2-devel] [Patch 2/2] UefiCpuPkg/Library/RegisterCpuFeaturesLib: avoid use dynamic PCD. Date: Fri, 12 Jul 2019 09:53:08 +0800 Message-Id: <20190712015308.26492-3-eric.dong@intel.com> In-Reply-To: <20190712015308.26492-1-eric.dong@intel.com> References: <20190712015308.26492-1-eric.dong@intel.com> MIME-Version: 1.0 Precedence: Bulk List-Unsubscribe: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,eric.dong@intel.com Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1562896407; bh=1gDAn3Fl9WYLo21FGK8i/p9OyGQMXJIK67ehUsdtImg=; h=Cc:Date:From:Reply-To:Subject:To; b=ECgqMDzz2wdtP6GcYCiz6dLCGZoTh1Rf/dKkFB9OqXLa2/16iEUoMdEULga5JTSE06o rDnR6UYZP0B+auWQdPIq8F+2jWcWYDvJWGUsyb0bQCqpdvhCQLY2BQu9Id5L9iXEIJGnD TbDMoK7RFKEig68Q+yvWpO4nI/UKzdhxZVs= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Type: text/plain; charset="utf-8" REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3D1972 Function in this library may be used by APs. Assert will be trig if AP uses dynamic pcd. This patch enhance the current code, remove the unnecessary usage of dynamic PCD. This change try to avoid report this issue again later. Cc: Ray Ni Cc: Laszlo Ersek Cc: Chandana Kumar Cc: Star Zeng Signed-off-by: Eric Dong --- .../CpuFeaturesInitialize.c | 64 +++++----- .../RegisterCpuFeatures.h | 10 +- .../RegisterCpuFeaturesLib.c | 114 ++++++------------ 3 files changed, 77 insertions(+), 111 deletions(-) diff --git a/UefiCpuPkg/Library/RegisterCpuFeaturesLib/CpuFeaturesInitializ= e.c b/UefiCpuPkg/Library/RegisterCpuFeaturesLib/CpuFeaturesInitialize.c index 87bfc64250..16b99c0c27 100644 --- a/UefiCpuPkg/Library/RegisterCpuFeaturesLib/CpuFeaturesInitialize.c +++ b/UefiCpuPkg/Library/RegisterCpuFeaturesLib/CpuFeaturesInitialize.c @@ -21,16 +21,12 @@ CHAR16 *mRegisterTypeStr[] =3D {L"MSR", L"CR", L"MMIO",= L"CACHE", L"SEMAP", L"INVA VOID SetCapabilityPcd ( IN UINT8 *SupportedFeatureMask, - IN UINT32 FeatureMaskSize + IN UINTN FeatureMaskSize ) { EFI_STATUS Status; - UINTN BitMaskSize; =20 - BitMaskSize =3D PcdGetSize (PcdCpuFeaturesCapability); - ASSERT (FeatureMaskSize =3D=3D BitMaskSize); - - Status =3D PcdSetPtrS (PcdCpuFeaturesCapability, &BitMaskSize, Supported= FeatureMask); + Status =3D PcdSetPtrS (PcdCpuFeaturesCapability, &FeatureMaskSize, Suppo= rtedFeatureMask); ASSERT_EFI_ERROR (Status); } =20 @@ -38,16 +34,16 @@ SetCapabilityPcd ( Worker function to save PcdCpuFeaturesSetting. =20 @param[in] SupportedFeatureMask The pointer to CPU feature bits mask b= uffer + @param[in] FeatureMaskSize CPU feature bits mask buffer size. **/ VOID SetSettingPcd ( - IN UINT8 *SupportedFeatureMask + IN UINT8 *SupportedFeatureMask, + IN UINTN BitMaskSize ) { EFI_STATUS Status; - UINTN BitMaskSize; =20 - BitMaskSize =3D PcdGetSize (PcdCpuFeaturesSetting); Status =3D PcdSetPtrS (PcdCpuFeaturesSetting, &BitMaskSize, SupportedFea= tureMask); ASSERT_EFI_ERROR (Status); } @@ -272,19 +268,20 @@ SupportedMaskOr ( =20 @param[in] SupportedFeatureMask The pointer to CPU feature bits mask b= uffer @param[in] AndFeatureBitMask The feature bit mask to do AND operati= on + @param[in] BitMaskSize CPU feature bits mask buffer size. + **/ VOID SupportedMaskAnd ( IN UINT8 *SupportedFeatureMask, - IN CONST UINT8 *AndFeatureBitMask + IN CONST UINT8 *AndFeatureBitMask, + IN UINT32 BitMaskSize ) { UINTN Index; - UINTN BitMaskSize; UINT8 *Data1; CONST UINT8 *Data2; =20 - BitMaskSize =3D PcdGetSize (PcdCpuFeaturesSetting); Data1 =3D SupportedFeatureMask; Data2 =3D AndFeatureBitMask; for (Index =3D 0; Index < BitMaskSize; Index++) { @@ -297,19 +294,19 @@ SupportedMaskAnd ( =20 @param[in] SupportedFeatureMask The pointer to CPU feature bits mask b= uffer @param[in] AndFeatureBitMask The feature bit mask to do XOR operati= on + @param[in] BitMaskSize CPU feature bits mask buffer size. **/ VOID SupportedMaskCleanBit ( IN UINT8 *SupportedFeatureMask, - IN UINT8 *AndFeatureBitMask + IN UINT8 *AndFeatureBitMask, + IN UINT32 BitMaskSize ) { UINTN Index; - UINTN BitMaskSize; UINT8 *Data1; UINT8 *Data2; =20 - BitMaskSize =3D PcdGetSize (PcdCpuFeaturesSetting); Data1 =3D SupportedFeatureMask; Data2 =3D AndFeatureBitMask; for (Index =3D 0; Index < BitMaskSize; Index++) { @@ -323,6 +320,7 @@ SupportedMaskCleanBit ( =20 @param[in] SupportedFeatureMask The pointer to CPU feature bits mask = buffer @param[in] ComparedFeatureBitMask The feature bit mask to be compared + @param[in] BitMaskSize CPU feature bits mask buffer size. =20 @retval TRUE The ComparedFeatureBitMask is set in CPU feature supporte= d bits mask buffer. @@ -332,16 +330,14 @@ SupportedMaskCleanBit ( BOOLEAN IsBitMaskMatch ( IN UINT8 *SupportedFeatureMask, - IN UINT8 *ComparedFeatureBitMask + IN UINT8 *ComparedFeatureBitMask, + IN UINT32 BitMaskSize ) { UINTN Index; - UINTN BitMaskSize; UINT8 *Data1; UINT8 *Data2; =20 - BitMaskSize =3D PcdGetSize (PcdCpuFeaturesSetting); - Data1 =3D SupportedFeatureMask; Data2 =3D ComparedFeatureBitMask; for (Index =3D 0; Index < BitMaskSize; Index++) { @@ -557,14 +553,14 @@ AnalysisProcessorFeatures ( // // Calculate the last capability on all processors // - SupportedMaskAnd (CpuFeaturesData->CapabilityPcd, CpuInitOrder->Featur= esSupportedMask); + SupportedMaskAnd (CpuFeaturesData->CapabilityPcd, CpuInitOrder->Featur= esSupportedMask, CpuFeaturesData->BitMaskSize); } // // Calculate the last setting // CpuFeaturesData->SettingPcd =3D AllocateCopyPool (CpuFeaturesData->BitMa= skSize, CpuFeaturesData->CapabilityPcd); ASSERT (CpuFeaturesData->SettingPcd !=3D NULL); - SupportedMaskAnd (CpuFeaturesData->SettingPcd, PcdGetPtr (PcdCpuFeatures= Setting)); + SupportedMaskAnd (CpuFeaturesData->SettingPcd, PcdGetPtr (PcdCpuFeatures= Setting), CpuFeaturesData->BitMaskSize); =20 // // Dump the last CPU feature list @@ -574,8 +570,8 @@ AnalysisProcessorFeatures ( Entry =3D GetFirstNode (&CpuFeaturesData->FeatureList); while (!IsNull (&CpuFeaturesData->FeatureList, Entry)) { CpuFeature =3D CPU_FEATURE_ENTRY_FROM_LINK (Entry); - if (IsBitMaskMatch (CpuFeature->FeatureMask, CpuFeaturesData->Capabi= lityPcd)) { - if (IsBitMaskMatch (CpuFeature->FeatureMask, CpuFeaturesData->Sett= ingPcd)) { + if (IsBitMaskMatch (CpuFeature->FeatureMask, CpuFeaturesData->Capabi= lityPcd, CpuFeaturesData->BitMaskSize)) { + if (IsBitMaskMatch (CpuFeature->FeatureMask, CpuFeaturesData->Sett= ingPcd, CpuFeaturesData->BitMaskSize)) { DEBUG ((DEBUG_INFO, "[Enable ] ")); } else { DEBUG ((DEBUG_INFO, "[Disable ] ")); @@ -583,22 +579,22 @@ AnalysisProcessorFeatures ( } else { DEBUG ((DEBUG_INFO, "[Unsupport] ")); } - DumpCpuFeature (CpuFeature); + DumpCpuFeature (CpuFeature, CpuFeaturesData->BitMaskSize); Entry =3D Entry->ForwardLink; } DEBUG ((DEBUG_INFO, "PcdCpuFeaturesCapability:\n")); - DumpCpuFeatureMask (CpuFeaturesData->CapabilityPcd); + DumpCpuFeatureMask (CpuFeaturesData->CapabilityPcd, CpuFeaturesData->B= itMaskSize); DEBUG ((DEBUG_INFO, "Origin PcdCpuFeaturesSetting:\n")); - DumpCpuFeatureMask (PcdGetPtr (PcdCpuFeaturesSetting)); + DumpCpuFeatureMask (PcdGetPtr (PcdCpuFeaturesSetting), CpuFeaturesData= ->BitMaskSize); DEBUG ((DEBUG_INFO, "Final PcdCpuFeaturesSetting:\n")); - DumpCpuFeatureMask (CpuFeaturesData->SettingPcd); + DumpCpuFeatureMask (CpuFeaturesData->SettingPcd, CpuFeaturesData->BitM= askSize); ); =20 // // Save PCDs and display CPU PCDs // SetCapabilityPcd (CpuFeaturesData->CapabilityPcd, CpuFeaturesData->BitMa= skSize); - SetSettingPcd (CpuFeaturesData->SettingPcd); + SetSettingPcd (CpuFeaturesData->SettingPcd, CpuFeaturesData->BitMaskSize= ); =20 for (ProcessorNumber =3D 0; ProcessorNumber < NumberOfCpus; ProcessorNum= ber++) { CpuInitOrder =3D &CpuFeaturesData->InitOrder[ProcessorNumber]; @@ -608,7 +604,7 @@ AnalysisProcessorFeatures ( // Insert each feature into processor's order list // CpuFeature =3D CPU_FEATURE_ENTRY_FROM_LINK (Entry); - if (IsBitMaskMatch (CpuFeature->FeatureMask, CpuFeaturesData->Capabi= lityPcd)) { + if (IsBitMaskMatch (CpuFeature->FeatureMask, CpuFeaturesData->Capabi= lityPcd, CpuFeaturesData->BitMaskSize)) { CpuFeatureInOrder =3D AllocateCopyPool (sizeof (CPU_FEATURES_ENTRY= ), CpuFeature); ASSERT (CpuFeatureInOrder !=3D NULL); InsertTailList (&CpuInitOrder->OrderList, &CpuFeatureInOrder->Link= ); @@ -624,18 +620,18 @@ AnalysisProcessorFeatures ( CpuFeatureInOrder =3D CPU_FEATURE_ENTRY_FROM_LINK (Entry); =20 Success =3D FALSE; - if (IsBitMaskMatch (CpuFeatureInOrder->FeatureMask, CpuFeaturesData-= >SettingPcd)) { + if (IsBitMaskMatch (CpuFeatureInOrder->FeatureMask, CpuFeaturesData-= >SettingPcd, CpuFeaturesData->BitMaskSize)) { Status =3D CpuFeatureInOrder->InitializeFunc (ProcessorNumber, Cpu= Info, CpuFeatureInOrder->ConfigData, TRUE); if (EFI_ERROR (Status)) { // // Clean the CpuFeatureInOrder->FeatureMask in setting PCD. // - SupportedMaskCleanBit (CpuFeaturesData->SettingPcd, CpuFeatureIn= Order->FeatureMask); + SupportedMaskCleanBit (CpuFeaturesData->SettingPcd, CpuFeatureIn= Order->FeatureMask, CpuFeaturesData->BitMaskSize); if (CpuFeatureInOrder->FeatureName !=3D NULL) { DEBUG ((DEBUG_WARN, "Warning :: Failed to enable Feature: Name= =3D %a.\n", CpuFeatureInOrder->FeatureName)); } else { DEBUG ((DEBUG_WARN, "Warning :: Failed to enable Feature: Mask= =3D ")); - DumpCpuFeatureMask (CpuFeatureInOrder->FeatureMask); + DumpCpuFeatureMask (CpuFeatureInOrder->FeatureMask, CpuFeature= sData->BitMaskSize); } } else { Success =3D TRUE; @@ -647,7 +643,7 @@ AnalysisProcessorFeatures ( DEBUG ((DEBUG_WARN, "Warning :: Failed to disable Feature: Nam= e =3D %a.\n", CpuFeatureInOrder->FeatureName)); } else { DEBUG ((DEBUG_WARN, "Warning :: Failed to disable Feature: Mas= k =3D ")); - DumpCpuFeatureMask (CpuFeatureInOrder->FeatureMask); + DumpCpuFeatureMask (CpuFeatureInOrder->FeatureMask, CpuFeature= sData->BitMaskSize); } } else { Success =3D TRUE; @@ -699,7 +695,7 @@ AnalysisProcessorFeatures ( // again during initialize the features. // DEBUG ((DEBUG_INFO, "Dump final value for PcdCpuFeaturesSetting:\n")); - DumpCpuFeatureMask (CpuFeaturesData->SettingPcd); + DumpCpuFeatureMask (CpuFeaturesData->SettingPcd, CpuFeaturesData->BitM= askSize); =20 // // Dump the RegisterTable diff --git a/UefiCpuPkg/Library/RegisterCpuFeaturesLib/RegisterCpuFeatures.= h b/UefiCpuPkg/Library/RegisterCpuFeaturesLib/RegisterCpuFeatures.h index 5c546ee153..a18f926641 100644 --- a/UefiCpuPkg/Library/RegisterCpuFeaturesLib/RegisterCpuFeatures.h +++ b/UefiCpuPkg/Library/RegisterCpuFeaturesLib/RegisterCpuFeatures.h @@ -180,20 +180,26 @@ SwitchNewBsp ( Function that uses DEBUG() macros to display the contents of a a CPU fea= ture bit mask. =20 @param[in] FeatureMask A pointer to the CPU feature bit mask. + @param[in] BitMaskSize CPU feature bits mask buffer size. + **/ VOID DumpCpuFeatureMask ( - IN UINT8 *FeatureMask + IN UINT8 *FeatureMask, + IN UINT32 BitMaskSize ); =20 /** Dump CPU feature name or CPU feature bit mask. =20 @param[in] CpuFeature Pointer to CPU_FEATURES_ENTRY + @param[in] BitMaskSize CPU feature bits mask buffer size. + **/ VOID DumpCpuFeature ( - IN CPU_FEATURES_ENTRY *CpuFeature + IN CPU_FEATURES_ENTRY *CpuFeature, + IN UINT32 BitMaskSize ); =20 /** diff --git a/UefiCpuPkg/Library/RegisterCpuFeaturesLib/RegisterCpuFeaturesL= ib.c b/UefiCpuPkg/Library/RegisterCpuFeaturesLib/RegisterCpuFeaturesLib.c index 36aabd7267..283e9d6539 100644 --- a/UefiCpuPkg/Library/RegisterCpuFeaturesLib/RegisterCpuFeaturesLib.c +++ b/UefiCpuPkg/Library/RegisterCpuFeaturesLib/RegisterCpuFeaturesLib.c @@ -18,36 +18,34 @@ @retval FALSE Two CPU feature bit masks are not equal. **/ BOOLEAN -IsCpuFeatureMatch ( +IsBitMaskMatchCheck ( IN UINT8 *FirstFeatureMask, IN UINT8 *SecondFeatureMask ) { - UINTN BitMaskSize; + CPU_FEATURES_DATA *CpuFeaturesData; =20 - BitMaskSize =3D PcdGetSize (PcdCpuFeaturesSetting); - if (CompareMem (FirstFeatureMask, SecondFeatureMask, BitMaskSize) =3D=3D= 0) { - return TRUE; - } else { - return FALSE; - } + CpuFeaturesData =3D GetCpuFeaturesData (); + + return (CompareMem (FirstFeatureMask, SecondFeatureMask, CpuFeaturesData= ->BitMaskSize) =3D=3D 0); } =20 /** Function that uses DEBUG() macros to display the contents of a a CPU fea= ture bit mask. =20 @param[in] FeatureMask A pointer to the CPU feature bit mask. + @param[in] BitMaskSize CPU feature bits mask buffer size. + **/ VOID DumpCpuFeatureMask ( - IN UINT8 *FeatureMask + IN UINT8 *FeatureMask, + IN UINT32 BitMaskSize ) { UINTN Index; UINT8 *Data8; - UINTN BitMaskSize; =20 - BitMaskSize =3D PcdGetSize (PcdCpuFeaturesSetting); Data8 =3D (UINT8 *) FeatureMask; for (Index =3D 0; Index < BitMaskSize; Index++) { DEBUG ((DEBUG_INFO, " %02x ", *Data8++)); @@ -59,10 +57,13 @@ DumpCpuFeatureMask ( Dump CPU feature name or CPU feature bit mask. =20 @param[in] CpuFeature Pointer to CPU_FEATURES_ENTRY + @param[in] BitMaskSize CPU feature bits mask buffer size. + **/ VOID DumpCpuFeature ( - IN CPU_FEATURES_ENTRY *CpuFeature + IN CPU_FEATURES_ENTRY *CpuFeature, + IN UINT32 BitMaskSize ) { =20 @@ -70,42 +71,10 @@ DumpCpuFeature ( DEBUG ((DEBUG_INFO, "FeatureName: %a\n", CpuFeature->FeatureName)); } else { DEBUG ((DEBUG_INFO, "FeatureMask =3D ")); - DumpCpuFeatureMask (CpuFeature->FeatureMask); + DumpCpuFeatureMask (CpuFeature->FeatureMask, BitMaskSize); } } =20 -/** - Determines if the feature bit mask is in dependent CPU feature bit mask = buffer. - - @param[in] FeatureMask Pointer to CPU feature bit mask - @param[in] DependentBitMask Pointer to dependent CPU feature bit mask= buffer - - @retval TRUE The feature bit mask is in dependent CPU feature bit mask = buffer. - @retval FALSE The feature bit mask is not in dependent CPU feature bit m= ask buffer. -**/ -BOOLEAN -IsBitMaskMatchCheck ( - IN UINT8 *FeatureMask, - IN UINT8 *DependentBitMask - ) -{ - UINTN Index; - UINTN BitMaskSize; - UINT8 *Data1; - UINT8 *Data2; - - BitMaskSize =3D PcdGetSize (PcdCpuFeaturesSetting); - - Data1 =3D FeatureMask; - Data2 =3D DependentBitMask; - for (Index =3D 0; Index < BitMaskSize; Index++) { - if (((*(Data1++)) & (*(Data2++))) !=3D 0) { - return TRUE; - } - } - return FALSE; -} - /** Try to find the specify cpu featuren in former/after feature list. =20 @@ -642,37 +611,21 @@ CheckCpuFeaturesDependency ( **/ RETURN_STATUS RegisterCpuFeatureWorker ( + IN CPU_FEATURES_DATA *CpuFeaturesData, IN CPU_FEATURES_ENTRY *CpuFeature ) { EFI_STATUS Status; - CPU_FEATURES_DATA *CpuFeaturesData; CPU_FEATURES_ENTRY *CpuFeatureEntry; LIST_ENTRY *Entry; - UINTN BitMaskSize; BOOLEAN FeatureExist; =20 - BitMaskSize =3D PcdGetSize (PcdCpuFeaturesSetting); - CpuFeaturesData =3D GetCpuFeaturesData (); - if (CpuFeaturesData->FeaturesCount =3D=3D 0) { - InitializeListHead (&CpuFeaturesData->FeatureList); - InitializeSpinLock (&CpuFeaturesData->CpuFlags.MemoryMappedLock); - InitializeSpinLock (&CpuFeaturesData->CpuFlags.ConsoleLogLock); - // - // Driver has assumption that these three PCD should has same buffer s= ize. - // - ASSERT (PcdGetSize (PcdCpuFeaturesSetting) =3D=3D PcdGetSize (PcdCpuFe= aturesCapability)); - ASSERT (PcdGetSize (PcdCpuFeaturesSetting) =3D=3D PcdGetSize (PcdCpuFe= aturesSupport)); - CpuFeaturesData->BitMaskSize =3D (UINT32) BitMaskSize; - } - ASSERT (CpuFeaturesData->BitMaskSize =3D=3D BitMaskSize); - FeatureExist =3D FALSE; CpuFeatureEntry =3D NULL; Entry =3D GetFirstNode (&CpuFeaturesData->FeatureList); while (!IsNull (&CpuFeaturesData->FeatureList, Entry)) { CpuFeatureEntry =3D CPU_FEATURE_ENTRY_FROM_LINK (Entry); - if (IsCpuFeatureMatch (CpuFeature->FeatureMask, CpuFeatureEntry->Featu= reMask)) { + if (IsBitMaskMatchCheck (CpuFeature->FeatureMask, CpuFeatureEntry->Fea= tureMask)) { // // If this feature already registered // @@ -684,12 +637,12 @@ RegisterCpuFeatureWorker ( =20 if (!FeatureExist) { DEBUG ((DEBUG_INFO, "[NEW] ")); - DumpCpuFeature (CpuFeature); + DumpCpuFeature (CpuFeature, CpuFeaturesData->BitMaskSize); InsertTailList (&CpuFeaturesData->FeatureList, &CpuFeature->Link); CpuFeaturesData->FeaturesCount++; } else { DEBUG ((DEBUG_INFO, "[OVERRIDE] ")); - DumpCpuFeature (CpuFeature); + DumpCpuFeature (CpuFeature, CpuFeaturesData->BitMaskSize); ASSERT (CpuFeatureEntry !=3D NULL); // // Overwrite original parameters of CPU feature @@ -849,7 +802,6 @@ RegisterCpuFeature ( EFI_STATUS Status; VA_LIST Marker; UINT32 Feature; - UINTN BitMaskSize; CPU_FEATURES_ENTRY *CpuFeature; UINT8 *FeatureMask; UINT8 *BeforeFeatureBitMask; @@ -860,6 +812,7 @@ RegisterCpuFeature ( UINT8 *PackageAfterFeatureBitMask; BOOLEAN BeforeAll; BOOLEAN AfterAll; + CPU_FEATURES_DATA *CpuFeaturesData; =20 FeatureMask =3D NULL; BeforeFeatureBitMask =3D NULL; @@ -871,7 +824,18 @@ RegisterCpuFeature ( BeforeAll =3D FALSE; AfterAll =3D FALSE; =20 - BitMaskSize =3D PcdGetSize (PcdCpuFeaturesSetting); + CpuFeaturesData =3D GetCpuFeaturesData (); + if (CpuFeaturesData->FeaturesCount =3D=3D 0) { + InitializeListHead (&CpuFeaturesData->FeatureList); + InitializeSpinLock (&CpuFeaturesData->CpuFlags.MemoryMappedLock); + InitializeSpinLock (&CpuFeaturesData->CpuFlags.ConsoleLogLock); + // + // Driver has assumption that below three PCDs should has same buffer = size. + // + ASSERT (PcdGetSize (PcdCpuFeaturesSetting) =3D=3D PcdGetSize (PcdCpuFe= aturesCapability)); + ASSERT (PcdGetSize (PcdCpuFeaturesSetting) =3D=3D PcdGetSize (PcdCpuFe= aturesSupport)); + CpuFeaturesData->BitMaskSize =3D (UINT32) PcdGetSize (PcdCpuFeaturesSe= tting); + } =20 VA_START (Marker, InitializeFunc); Feature =3D VA_ARG (Marker, UINT32); @@ -889,19 +853,19 @@ RegisterCpuFeature ( AfterAll =3D ((Feature & CPU_FEATURE_AFTER_ALL) !=3D 0) ? TRUE : FA= LSE; Feature &=3D ~(CPU_FEATURE_BEFORE_ALL | CPU_FEATURE_AFTER_ALL); ASSERT (FeatureMask =3D=3D NULL); - SetCpuFeaturesBitMask (&FeatureMask, Feature, BitMaskSize); + SetCpuFeaturesBitMask (&FeatureMask, Feature, CpuFeaturesData->BitMa= skSize); } else if ((Feature & CPU_FEATURE_BEFORE) !=3D 0) { - SetCpuFeaturesBitMask (&BeforeFeatureBitMask, Feature & ~CPU_FEATURE= _BEFORE, BitMaskSize); + SetCpuFeaturesBitMask (&BeforeFeatureBitMask, Feature & ~CPU_FEATURE= _BEFORE, CpuFeaturesData->BitMaskSize); } else if ((Feature & CPU_FEATURE_AFTER) !=3D 0) { - SetCpuFeaturesBitMask (&AfterFeatureBitMask, Feature & ~CPU_FEATURE_= AFTER, BitMaskSize); + SetCpuFeaturesBitMask (&AfterFeatureBitMask, Feature & ~CPU_FEATURE_= AFTER, CpuFeaturesData->BitMaskSize); } else if ((Feature & CPU_FEATURE_CORE_BEFORE) !=3D 0) { - SetCpuFeaturesBitMask (&CoreBeforeFeatureBitMask, Feature & ~CPU_FEA= TURE_CORE_BEFORE, BitMaskSize); + SetCpuFeaturesBitMask (&CoreBeforeFeatureBitMask, Feature & ~CPU_FEA= TURE_CORE_BEFORE, CpuFeaturesData->BitMaskSize); } else if ((Feature & CPU_FEATURE_CORE_AFTER) !=3D 0) { - SetCpuFeaturesBitMask (&CoreAfterFeatureBitMask, Feature & ~CPU_FEAT= URE_CORE_AFTER, BitMaskSize); + SetCpuFeaturesBitMask (&CoreAfterFeatureBitMask, Feature & ~CPU_FEAT= URE_CORE_AFTER, CpuFeaturesData->BitMaskSize); } else if ((Feature & CPU_FEATURE_PACKAGE_BEFORE) !=3D 0) { - SetCpuFeaturesBitMask (&PackageBeforeFeatureBitMask, Feature & ~CPU_= FEATURE_PACKAGE_BEFORE, BitMaskSize); + SetCpuFeaturesBitMask (&PackageBeforeFeatureBitMask, Feature & ~CPU_= FEATURE_PACKAGE_BEFORE, CpuFeaturesData->BitMaskSize); } else if ((Feature & CPU_FEATURE_PACKAGE_AFTER) !=3D 0) { - SetCpuFeaturesBitMask (&PackageAfterFeatureBitMask, Feature & ~CPU_F= EATURE_PACKAGE_AFTER, BitMaskSize); + SetCpuFeaturesBitMask (&PackageAfterFeatureBitMask, Feature & ~CPU_F= EATURE_PACKAGE_AFTER, CpuFeaturesData->BitMaskSize); } Feature =3D VA_ARG (Marker, UINT32); } @@ -929,7 +893,7 @@ RegisterCpuFeature ( ASSERT_EFI_ERROR (Status); } =20 - Status =3D RegisterCpuFeatureWorker (CpuFeature); + Status =3D RegisterCpuFeatureWorker (CpuFeaturesData, CpuFeature); ASSERT_EFI_ERROR (Status); =20 return RETURN_SUCCESS; --=20 2.21.0.windows.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#43623): https://edk2.groups.io/g/devel/message/43623 Mute This Topic: https://groups.io/mt/32437608/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-