Eric,
The whole patch series are very clean and easy to understand.

Reviewed-by: Ray Ni <ray...@intel.com>


> -----Original Message-----
> From: Dong, Eric
> Sent: Thursday, August 15, 2019 8:57 PM
> To: devel@edk2.groups.io
> Cc: Ni, Ray <ray...@intel.com>; Laszlo Ersek <ler...@redhat.com>
> Subject: [Patch v4 0/6] Add "test then write" mechanism
> 
> v4 changes:
> 1. Split Reserved field and use one byte as TestThenWrite field.
> 
> v3 changes:
> 1. Avoid changing exist API CpuRegisterTableWrite, add new API 
> CpuRegisterTableTestThenWrite which align new adds macros.
> Only 1/6 patch been changed in v3.
> 
> V2 changes:
> 1. Split CR read/write action in to one discrete patch 2. Keep the old logic 
> which continue the process if error found.
> 
> Below code is current implementation:
>   if (MsrRegister[ProcessorNumber].Bits.Lock == 0) {
>     CPU_REGISTER_TABLE_WRITE_FIELD (
>       ProcessorNumber,
>       Msr,
>       MSR_IA32_FEATURE_CONTROL,
>       MSR_IA32_FEATURE_CONTROL_REGISTER,
>       Bits.Lock,
>       1
>     );
>   }
> 
> With below steps, the Bits.Lock bit will lose its value:
> 1. Trig normal boot, the Bits.Lock is 0. 1 will be added
>    into the register table and then will set to the MSR.
> 2. Trig warm reboot, MSR value preserves. After normal boot phase,
>    the Bits.Lock is 1, so it will not be added into the register
>    table during the warm reboot phase.
> 3. Trig S3 then resume, the Bits.Lock change to 0 and Bits.Lock is
>    not added in register table during normal boot phase. so it's
>    still 0 after resume.
> This is not an expect behavior. The expect result is the value should always 
> 1 after booting or resuming from S3.
> 
> The root cause for this issue is
> 1. driver bases on current value to insert the "set value action" to
>    the register table.
> 2. Some MSRs may reserve their value during warm reboot. So the insert
>    action may be skip after warm reboot.
> 
> The solution for this issue is:
> 1. Always add "Test then Set" action for above referred MSRs.
> 2. Detect current value before set new value. Only set new value when
>    current value not same as new value.
> 
> Cc: Ray Ni <ray...@intel.com>
> Cc: Laszlo Ersek <ler...@redhat.com>
> 
> 
> Eric Dong (6):
>   UefiCpuPkg/RegisterCpuFeaturesLib: Add "Test Then Write" Macros.
>   UefiCpuPkg/PiSmmCpuDxeSmm: Combine CR read/write action.
>   UefiCpuPkg/PiSmmCpuDxeSmm: Supports test then write new value logic.
>   UefiCpuPkg/RegisterCpuFeaturesLib: Combine CR read/write action.
>   UefiCpuPkg/RegisterCpuFeaturesLib: Supports test then write new value
>     logic.
>   UefiCpuPkg/CpuCommonFeaturesLib: Use new macros.
> 
>  UefiCpuPkg/Include/AcpiCpuData.h              |   1 +
>  .../Include/Library/RegisterCpuFeaturesLib.h  |  91 +++++++++++
>  .../CpuCommonFeaturesLib/CpuCommonFeatures.h  |  15 --
>  .../CpuCommonFeaturesLib.c                    |   8 +-
>  .../CpuCommonFeaturesLib/FeatureControl.c     | 141 ++++++------------
>  .../CpuCommonFeaturesLib/MachineCheck.c       |  23 ++-
>  .../CpuFeaturesInitialize.c                   | 139 +++++++++++------
>  .../RegisterCpuFeaturesLib.c                  |  45 +++++-
>  UefiCpuPkg/PiSmmCpuDxeSmm/CpuS3.c             | 133 +++++++++++------
>  9 files changed, 375 insertions(+), 221 deletions(-)
> 
> --
> 2.21.0.windows.1


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#46057): https://edk2.groups.io/g/devel/message/46057
Mute This Topic: https://groups.io/mt/32894957/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to