mirror of https://github.com/acidanthera/audk.git
MdeModulePkg/UsbMass: Not retry if usb bot transfer execution fail
The retry mechanism will bring issue if the usb device is unplugged from XHCI HC but s/w is trying to access it through BlockIo. The current cmd will get device error return status, but the sequential cmds will be timeout. This behavior will cause system unresponsive for a long while and bring bad user experience. So we break the retry loop if found device error. Cc: Star Zeng <star.zeng@intel.com> Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Feng Tian <feng.tian@intel.com>
This commit is contained in:
parent
fda951df68
commit
17f3e942bc
|
@ -2,7 +2,7 @@
|
||||||
Implementation of the command set of USB Mass Storage Specification
|
Implementation of the command set of USB Mass Storage Specification
|
||||||
for Bootability, Revision 1.0.
|
for Bootability, Revision 1.0.
|
||||||
|
|
||||||
Copyright (c) 2007 - 2014, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2007 - 2016, Intel Corporation. All rights reserved.<BR>
|
||||||
This program and the accompanying materials
|
This program and the accompanying materials
|
||||||
are licensed and made available under the terms and conditions of the BSD License
|
are licensed and made available under the terms and conditions of the BSD License
|
||||||
which accompanies this distribution. The full text of the license may be found at
|
which accompanies this distribution. The full text of the license may be found at
|
||||||
|
@ -189,6 +189,11 @@ UsbBootExecCmd (
|
||||||
return EFI_TIMEOUT;
|
return EFI_TIMEOUT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (Status == EFI_DEVICE_ERROR) {
|
||||||
|
DEBUG ((EFI_D_ERROR, "UsbBootExecCmd: Device Error to Exec 0x%x Cmd\n", *(UINT8 *)Cmd));
|
||||||
|
return EFI_DEVICE_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// If ExecCommand() returns no error and CmdResult is success,
|
// If ExecCommand() returns no error and CmdResult is success,
|
||||||
// then the commnad transfer is successful.
|
// then the commnad transfer is successful.
|
||||||
|
@ -271,7 +276,7 @@ UsbBootExecCmdWithRetry (
|
||||||
DataLen,
|
DataLen,
|
||||||
Timeout
|
Timeout
|
||||||
);
|
);
|
||||||
if (Status == EFI_SUCCESS || Status == EFI_MEDIA_CHANGED || Status == EFI_NO_MEDIA) {
|
if (Status == EFI_SUCCESS || Status == EFI_MEDIA_CHANGED || Status == EFI_NO_MEDIA || Status == EFI_DEVICE_ERROR) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
Implementation of the USB mass storage Bulk-Only Transport protocol,
|
Implementation of the USB mass storage Bulk-Only Transport protocol,
|
||||||
according to USB Mass Storage Class Bulk-Only Transport, Revision 1.0.
|
according to USB Mass Storage Class Bulk-Only Transport, Revision 1.0.
|
||||||
|
|
||||||
Copyright (c) 2007 - 2011, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2007 - 2016, Intel Corporation. All rights reserved.<BR>
|
||||||
This program and the accompanying materials
|
This program and the accompanying materials
|
||||||
are licensed and made available under the terms and conditions of the BSD License
|
are licensed and made available under the terms and conditions of the BSD License
|
||||||
which accompanies this distribution. The full text of the license may be found at
|
which accompanies this distribution. The full text of the license may be found at
|
||||||
|
@ -432,7 +432,11 @@ UsbBotExecCommand (
|
||||||
// whether it succeeds or fails.
|
// whether it succeeds or fails.
|
||||||
//
|
//
|
||||||
TransLen = (UINTN) DataLen;
|
TransLen = (UINTN) DataLen;
|
||||||
UsbBotDataTransfer (UsbBot, DataDir, Data, &TransLen, Timeout);
|
Status = UsbBotDataTransfer (UsbBot, DataDir, Data, &TransLen, Timeout);
|
||||||
|
if (Status == EFI_DEVICE_ERROR) {
|
||||||
|
DEBUG ((EFI_D_ERROR, "UsbBotExecCommand: UsbBotDataTransfer (%r)\n", Status));
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Get the status, if that succeeds, interpret the result
|
// Get the status, if that succeeds, interpret the result
|
||||||
|
|
Loading…
Reference in New Issue