From 9f840a9ea33cd2ce533a3fa923ab5be73c40bed7 Mon Sep 17 00:00:00 2001 From: Hao Wu Date: Tue, 22 Dec 2015 13:55:34 +0000 Subject: [PATCH] MdeModulePkg ScsiBusDxe: Only signal caller event when PassThru() succeeds In ScsiExecuteSCSICommand(), when SCSI devices do not support non-blocking I/O but an event is passed from caller (UefiScsiLib), the function will execute the SCSI I/O command in a blocking manner and signal the caller event when the command completes. Originally, caller event from UefiScsiLib will be signaled if the SCSI command fails. UefiScsiLib will continue to signal its caller (BlockIO2 request from ScsiDiskDxe driver), which is not aligned with the UEFI spec that event will not be signaled when BlockIO2 request returns with error. This commit will signal ScsiExecuteSCSICommand()'s caller event only when the SCSI command succeeds. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Hao Wu Reviewed-by: Feng Tian git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@19447 6f19259b-4bc3-4df7-8a09-765794883524 --- MdeModulePkg/Bus/Scsi/ScsiBusDxe/ScsiBus.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/MdeModulePkg/Bus/Scsi/ScsiBusDxe/ScsiBus.c b/MdeModulePkg/Bus/Scsi/ScsiBusDxe/ScsiBus.c index 8eb73e7673..b10e25a38e 100644 --- a/MdeModulePkg/Bus/Scsi/ScsiBusDxe/ScsiBus.c +++ b/MdeModulePkg/Bus/Scsi/ScsiBusDxe/ScsiBus.c @@ -1007,9 +1007,10 @@ ScsiExecuteSCSICommand ( ExtRequestPacket, NULL ); - if (Event != NULL) { + if ((!EFI_ERROR(Status)) && (Event != NULL)) { // - // Signal Event to tell caller to pick up the SCSI IO Packet. + // Signal Event to tell caller to pick up the SCSI IO packet if the + // PassThru() succeeds. // gBS->SignalEvent (Event); }