Reviewed-by: Eric Dong <eric.d...@intel.com> And pushed: SHA-1: f4c898f2b2db2819c519cdce05403d4ba0234979
Thanks, Eric > -----Original Message----- > From: devel@edk2.groups.io [mailto:devel@edk2.groups.io] On Behalf Of John > E Lofgren > Sent: Wednesday, September 18, 2019 11:43 PM > To: devel@edk2.groups.io > Subject: [edk2-devel] [Patch V3] UefiCpuPkg/CpuExceptionHandlerLib: Fix split > lock > > REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2150 > V3 changes: > change to mov instruction (non locking instuction) instead > of xchg to simplify design. > > V2 changes: > Add xchg 16 bit instructions to handle sgdt and sidt base > 63:48 bits and 47:32 bits. > Add comment to explain why xchg 64bit isnt being used > > Split lock happens when a locking instruction is used on mis-aligned data > that crosses two cachelines. If close source platform enables Alignment Check > Exception(#AC), They can hit a double fault due to split lock being in > CpuExceptionHandlerLib. > > sigt and sgdt saves 10 bytes to memory, 8 bytes is base and 2 bytes is limit. > The data is mis-aligned, can cross two cacheline, and a xchg > instruction(locking instuction) is being utilize. > > Signed-off-by: John E Lofgren <john.e.lofg...@intel.com> > --- > UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/ExceptionHandlerAsm.nasm > | 14 ++++++++------ > 1 file changed, 8 insertions(+), 6 deletions(-) > > diff --git > a/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/ExceptionHandlerAsm.nas > m > b/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/ExceptionHandlerAsm.nas > m > index 4db1a09f28..19198f2731 100644 > --- > a/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/ExceptionHandlerAsm.nas > m > +++ > b/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/ExceptionHandlerAsm.nas > m > @@ -184,17 +184,19 @@ HasErrorCode: > push rax > push rax > sidt [rsp] > - xchg rax, [rsp + 2] > - xchg rax, [rsp] > - xchg rax, [rsp + 8] > + mov bx, word [rsp] > + mov rax, qword [rsp + 2] > + mov qword [rsp], rax > + mov word [rsp + 8], bx > > xor rax, rax > push rax > push rax > sgdt [rsp] > - xchg rax, [rsp + 2] > - xchg rax, [rsp] > - xchg rax, [rsp + 8] > + mov bx, word [rsp] > + mov rax, qword [rsp + 2] > + mov qword [rsp], rax > + mov word [rsp + 8], bx > > ;; UINT64 Ldtr, Tr; > xor rax, rax > -- > 2.16.2.windows.1 > > > -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#47708): https://edk2.groups.io/g/devel/message/47708 Mute This Topic: https://groups.io/mt/34181976/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-