Reviewed-by: Liming Gao <[email protected]>
>-----Original Message----- >From: edk2-devel [mailto:[email protected]] On Behalf Of >Laszlo Ersek >Sent: Monday, September 04, 2017 11:57 PM >To: edk2-devel-01 <[email protected]> >Cc: Kinney, Michael D <[email protected]>; Justen, Jordan L ><[email protected]>; Gao, Liming <[email protected]> >Subject: [edk2] [PATCH 1/2] MdePkg/BaseIoLibIntrinsic: fix SEV (=unrolled) >variants of IoWriteFifoXX() > >In commit b6d11d7c4678 ("MdePkg: BaseIoLibIntrinsic (IoLib class) >library", 2017-04-12), the MOV instructions in the write loops were >probably copied from the read loops. However, the operand order was not >adjusted. > >As a result, the IoWriteFifoXX() routines, when invoked in SEV guests, now >overwrite the source buffer with value 0x01 / 0x0001 / 0x00000001 -- the >SevNoRepIo() function returns value 1 in EAX, in SEV guests --, and write >the same value to the target IO port. > >Fix this by putting the target operand (AL / AX / EAX) first, and the >source operand (BYTE / WORD / DWORD [ESI/RSI]) second. > >Cc: Brijesh Singh <[email protected]> >Cc: Jordan Justen <[email protected]> >Cc: Liming Gao <[email protected]> >Cc: Michael D Kinney <[email protected]> >Fixes: b6d11d7c467810ea7f2e2eda46ef0bdc57bf1475 >Contributed-under: TianoCore Contribution Agreement 1.1 >Signed-off-by: Laszlo Ersek <[email protected]> >--- > MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifoSev.nasm | 6 +++--- > MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifoSev.nasm | 6 +++--- > 2 files changed, 6 insertions(+), 6 deletions(-) > >diff --git a/MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifoSev.nasm >b/MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifoSev.nasm >index 3e80c17d04a3..4b2af807cff8 100644 >--- a/MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifoSev.nasm >+++ b/MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifoSev.nasm >@@ -212,7 +212,7 @@ ASM_PFX(IoWriteFifo8): > jecxz @IoWriteFifo8_Done > > @IoWriteFifo8_Loop: >- mov byte [esi], al >+ mov al, byte [esi] > out dx, al > inc esi > loop @IoWriteFifo8_Loop >@@ -250,7 +250,7 @@ ASM_PFX(IoWriteFifo16): > jecxz @IoWriteFifo16_Done > > @IoWriteFifo16_Loop: >- mov word [esi], ax >+ mov ax, word [esi] > out dx, ax > add esi, 2 > loop @IoWriteFifo16_Loop >@@ -288,7 +288,7 @@ ASM_PFX(IoWriteFifo32): > jecxz @IoWriteFifo32_Done > > @IoWriteFifo32_Loop: >- mov dword [esi], eax >+ mov eax, dword [esi] > out dx, eax > add esi, 4 > loop @IoWriteFifo32_Loop >diff --git a/MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifoSev.nasm >b/MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifoSev.nasm >index 26e016625b72..4d86a6cd5330 100644 >--- a/MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifoSev.nasm >+++ b/MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifoSev.nasm >@@ -205,7 +205,7 @@ ASM_PFX(IoWriteFifo8): > jrcxz @IoWriteFifo8_Done > > @IoWriteFifo8_Loop: >- mov byte [rsi], al >+ mov al, byte [rsi] > out dx, al > inc rsi > loop @IoWriteFifo8_Loop >@@ -241,7 +241,7 @@ ASM_PFX(IoWriteFifo16): > jrcxz @IoWriteFifo16_Done > > @IoWriteFifo16_Loop: >- mov word [rsi], ax >+ mov ax, word [rsi] > out dx, ax > add rsi, 2 > loop @IoWriteFifo16_Loop >@@ -277,7 +277,7 @@ ASM_PFX(IoWriteFifo32): > jrcxz @IoWriteFifo32_Done > > @IoWriteFifo32_Loop: >- mov dword [rsi], eax >+ mov eax, dword [rsi] > out dx, eax > add rsi, 4 > loop @IoWriteFifo32_Loop >-- >2.14.1.3.gb7cf6e02401b > > >_______________________________________________ >edk2-devel mailing list >[email protected] >https://lists.01.org/mailman/listinfo/edk2-devel _______________________________________________ edk2-devel mailing list [email protected] https://lists.01.org/mailman/listinfo/edk2-devel

