public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
* [Patch 0/2] Separate semaphore container.
@ 2018-11-08  2:57 Eric Dong
  2018-11-08  2:57 ` [Patch 1/2] UefiCpuPkg/RegisterCpuFeaturesLib: " Eric Dong
                   ` (2 more replies)
  0 siblings, 3 replies; 10+ messages in thread
From: Eric Dong @ 2018-11-08  2:57 UTC (permalink / raw)
  To: edk2-devel; +Cc: Laszlo Ersek, Ruiyu Ni

In current implementation, core level semaphore use same container
with package level semaphore. This design will let the core level
semaphore not works as expected in below case:
1. Feature A has CPU_FEATURE_CORE_BEFORE dependence with Feature B.
2. Feature C has CPU_FEATURE_PACKAGE_AFTER dependence with Feature B.
in this case an core level semaphore will be add between A and B, and
an package level semaphore will be add between B and C.

For a CPU has one package, two cores and 4 threads. Execute like below:

  Thread 1          Thread 2    .....     Thread 4
ReleaseSemaph(1,2)  -|
WaitForSemaph(1(2)) -|<-----------------------These two are Core Semaph
                  ReleaseSemaph(1,2) -|
                  WaitForSemaph(2)   -| <---  Core Semaph

ReleaseSemaph (1,2,3,4) -|
WaitForSemaph (1(4))    -| <----------------  Package Semaph

                                      ReleaseSemaph(3,4)
                                      WaitForSemaph(4(2)) <- Core Semaph

In above case, for thread 4, when it executes a core semaphore, i will
found WaitForSemaph(4(2)) is met because Thread 1 has execute a package
semaphore and ReleaseSemaph(4) for it before. This is not an expect
behavior. Thread 4 should wait for thread 3 to do this.

Fix this issue by separate the semaphore container for core level and
package level.

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>

Eric Dong (2):
  UefiCpuPkg/RegisterCpuFeaturesLib: Separate semaphore container.
  UefiCpuPkg/PiSmmCpuDxeSmm: Separate semaphore container.

 .../RegisterCpuFeaturesLib/CpuFeaturesInitialize.c  |  9 ++++++---
 .../RegisterCpuFeaturesLib/RegisterCpuFeatures.h    |  7 ++++---
 UefiCpuPkg/PiSmmCpuDxeSmm/CpuS3.c                   | 21 ++++++++++++++-------
 3 files changed, 24 insertions(+), 13 deletions(-)

-- 
2.15.0.windows.1



^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2018-11-12 10:30 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-11-08  2:57 [Patch 0/2] Separate semaphore container Eric Dong
2018-11-08  2:57 ` [Patch 1/2] UefiCpuPkg/RegisterCpuFeaturesLib: " Eric Dong
2018-11-09  8:40   ` Ni, Ruiyu
2018-11-08  2:58 ` [Patch 2/2] UefiCpuPkg/PiSmmCpuDxeSmm: " Eric Dong
2018-11-08 13:33   ` Laszlo Ersek
2018-11-08 17:51     ` Laszlo Ersek
2018-11-09  5:33       ` Dong, Eric
2018-11-09  8:41   ` Ni, Ruiyu
2018-11-10  3:19 ` [Patch 0/2] " Dong, Eric
2018-11-12 10:30   ` Laszlo Ersek

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox