Acidanthera UEFI Development Kit based on EDK II edk2-stable202311
Go to file
Eric Dong 9bae7811d9 UefiCpuPkg/PiSmmCpuDxeSmm: Separate semaphore container.
In current implementation, core and package level sync uses same semaphores.
Sharing the semaphore may cause wrong execution order.
For example:
1. Feature A has CPU_FEATURE_CORE_BEFORE dependency with Feature B.
2. Feature C has CPU_FEATURE_PACKAGE_AFTER dependency with Feature B.
The expected feature initialization order is A B C:
A ---- (Core Depends) ----> B ---- (Package Depends) ----> C

For a CPU has 1 package, 2 cores and 4 threads. The feature initialization
order may like below:

   Thread#1             Thread#2       Thread#3         Thread#4
   [A.Init]             [A.Init]                        [A.Init]
Release(S1, S2)        Release(S1, S2)                Release(S3, S4)
Wait(S1) * 2           Wait(S2) * 2  <------------------------------- Core sync

   [B.Init]             [B.Init]
Release (S1,S2,S3,S4)
Wait (S1) * 4  <----------------------------------------------------- Package sync
                                                      Wait(S4 * 2) <- Core sync
                                                        [B.Init]

In above case, for thread#4, when it syncs in core level, Wait(S4) * 2 isn't
blocked and [B.Init] runs. But [A.Init] hasn't run in thread#3. It's wrong!
Thread#4 should execute [B.Init] after thread#3 executes [A.Init] because B
core level depends on A.

The reason of the wrong execution order is that S4 is released in thread#1
by calling Release (S1, S2, S3, S4) and in thread #4 by calling
Release (S3, S4).

To fix this issue, core level sync and package level sync should use separate
semaphores.

In above example, the S4 released in Release (S1, S2, S3, S4) should not be the
same semaphore as that in Release (S3, S4).

Related BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=1311

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>
Reviewed-by: Ruiyu Ni <ruiyu.ni@intel.com>
Acked-by: Laszlo Ersek <lersek@redhat.com>
2018-11-11 10:02:47 +08:00
AppPkg AppPkg: Removing ipf which is no longer supported from edk2. 2018-06-29 16:19:35 +08:00
ArmPkg ArmPkg/ArmGicDxe: Fix GICv3 interrupt routing mode bug 2018-11-07 16:19:22 +01:00
ArmPlatformPkg ArmPlatformPkg: Removing ipf which is no longer supported from edk2. 2018-06-29 16:19:36 +08:00
ArmVirtPkg ArmVirtPkg/PlatformBDS: Implement PlatformBootManagerUnableToBoot 2018-07-27 15:47:55 +08:00
BaseTools BaseTools: Use common cc flag for building PcdValueInit. 2018-11-05 11:02:46 +08:00
BeagleBoardPkg BeagleBoardPkg: Removing ipf which is no longer supported from edk2. 2018-06-29 16:19:37 +08:00
Conf
CorebootModulePkg CorebootModulePkg: Removing ipf from edk2. 2018-08-14 08:58:28 +08:00
CorebootPayloadPkg CorebootPayloadPkg: Remove EdkShellBinPkg in FDF 2018-11-05 13:58:24 +08:00
CryptoPkg CryptoPkg/BaseCryptLib: Fix potential integer overflow issue. 2018-10-31 11:07:53 +08:00
DuetPkg DuetPkg: Removing ipf which is no longer supported from edk2. 2018-06-29 16:19:38 +08:00
EdkCompatibilityPkg EdkCompatibilityPkg: Removing ipf from edk2. 2018-09-25 23:43:46 +08:00
EdkShellBinPkg EdkShellBinPkg: Removing ipf which is no longer supported from edk2. 2018-06-29 16:19:38 +08:00
EdkShellPkg EdkShellPkg: Removing ipf which is no longer supported from edk2. 2018-06-29 16:19:42 +08:00
EmbeddedPkg EmbeddedPkg/VirtualKeyboard: Avoid notification called more than once 2018-09-14 10:18:31 +08:00
EmulatorPkg EmulatorPkg: Replace obsoleted network drivers from platform DSC/FDF. 2018-11-05 16:02:24 +08:00
FatPkg FatPkg: Correct the line ending to CRLF 2018-10-24 15:22:31 +08:00
FmpDevicePkg FmpDevicePkg DSC: Add NOOPT target to verify NOOPT target 2018-10-31 22:08:10 +08:00
IntelFrameworkModulePkg IntelFrameworkModulePkg: Add more checker in UefiTianoDecompressLib (CVE FIX) 2018-10-24 08:24:14 +08:00
IntelFrameworkPkg IntelFrameworkPkg FrameworkUefiLib: Add new EfiLocateXXXAcpiTable APIs 2018-09-27 14:25:32 +08:00
IntelFsp2Pkg IntelFsp2Pkg: Fixed potentially NULL pointer accessing 2018-10-29 11:24:58 +08:00
IntelFsp2WrapperPkg IntelFsp2WrapperPkg/BaseFspWrapperPlatformLibSample: Remove PCDs 2018-09-28 10:55:10 +08:00
IntelFspPkg edk2: Move License.txt file to root 2017-08-03 11:02:17 -07:00
IntelFspWrapperPkg edk2: Move License.txt file to root 2017-08-03 11:02:17 -07:00
IntelSiliconPkg IntelSiliconPkg VTdDxe: Report status code for VTd error 2018-10-25 11:50:49 +08:00
MdeModulePkg MdeModulePkg/DisplayEngine: Remove useless NULL ptr check for NewPos 2018-11-08 13:40:08 +08:00
MdePkg MdePkg/BaseSynchronizationLib: Fix InternalSync[De|In]crement 2018-11-08 10:00:05 +08:00
NetworkPkg NetworkPkg/TlsDxe: Fix failure to process multiple TLS records. 2018-11-01 09:37:41 +08:00
Nt32Pkg Nt32Pkg: Replace obsoleted network drivers from NT32 platform DSC/FDF. 2018-11-05 16:01:54 +08:00
Omap35xxPkg Omap35xxPkg: Removing ipf which is no longer supported from edk2. 2018-06-29 16:19:46 +08:00
OptionRomPkg OptionRomPkg: Removing ipf which is no longer supported from edk2. 2018-09-06 14:44:30 +08:00
OvmfPkg Revert "OvmfPkg: VMWare SVGA display device register definitions" 2018-11-06 12:56:22 +01:00
PcAtChipsetPkg PcAtChipsetPkg PcRtc: Use new EfiLocateFirstAcpiTable() 2018-09-27 14:25:35 +08:00
QuarkPlatformPkg QuarkPlatformPkg: Removing ipf which is no longer supported from edk2. 2018-08-14 08:58:30 +08:00
QuarkSocPkg QuarkSocPkg: Removing ipf which is no longer supported from edk2. 2018-08-14 08:58:32 +08:00
SecurityPkg SecurityPkg/Include/Library/TcgStorageOpalLib.h: Update Pyrite spec revision. 2018-10-26 09:44:47 +08:00
ShellBinPkg ShellBinPkg: Clean up source files 2018-06-28 11:19:51 +08:00
ShellPkg ShellPkg/ShellLib: Fix potential NULL deference issue 2018-11-08 10:25:53 +08:00
SignedCapsulePkg SignedCapsulePkg: Remove PalLib in dsc which was missed at 52664c5 2018-09-25 23:40:40 +08:00
SourceLevelDebugPkg SourceLevelDebugPkg/Readme.txt: Update UDK Debugger Tool & manual URL 2018-11-08 12:00:34 +08:00
StandaloneMmPkg StandaloneMmPkg: Describe the declaration and definition files. 2018-07-20 10:59:56 +08:00
StdLib StdLib: Removing ipf which is no longer supported from edk2. 2018-06-29 16:19:51 +08:00
StdLibPrivateInternalFiles StdLibPrivateInternalFiles: Removing ipf from edk2. 2018-06-29 16:19:51 +08:00
UefiCpuPkg UefiCpuPkg/PiSmmCpuDxeSmm: Separate semaphore container. 2018-11-11 10:02:47 +08:00
UnixPkg
Vlv2DeviceRefCodePkg edk2: Move License.txt file to root 2017-08-03 11:02:17 -07:00
Vlv2TbltDevicePkg Vlv2TbltDevicePkg: Replace obsoleted drivers from platform DSC/FDF. 2018-11-06 09:06:12 +08:00
.gitignore edk2: Add .DS_Store to .gitignore for macOS 2017-05-19 15:14:34 -07:00
.gitmodules CryptoPkg: Adding OpenSSL as one submodule of EDKII repo 2018-01-18 14:06:15 +08:00
BuildNotes2.txt
Contributions.txt edk2: Fix typo in Contributions.txt 2017-08-16 17:50:44 +08:00
License.txt edk2: Move License.txt file to root 2017-08-03 11:02:17 -07:00
Maintainers.txt Maintainer.txt: Add Chao to be co-maintainer of SignedCapsulePkg 2018-11-05 23:07:15 +08:00
Readme.md edk2: Add Readme.md to root of edk2 repository 2017-08-03 11:02:25 -07:00
edksetup.bat BaseTools: Fix incorrect %EDK_TOOLS_PATH% 2018-08-08 08:44:22 +08:00
edksetup.sh Revert BaseTools: PYTHON3 migration 2018-10-15 08:29:14 +08:00

Readme.md

EDK II Project

A modern, feature-rich, cross-platform firmware development environment for the UEFI and PI specifications from www.uefi.org.

Contributions to the EDK II open source project are covered by the TianoCore Contribution Agreement 1.1

The majority of the content in the EDK II open source project uses a BSD 2-Clause License. The EDK II open source project contains the following components that are covered by additional licenses:

The EDK II Project is composed of packages. The maintainers for each package are listed in Maintainers.txt.

Resources