summaryrefslogtreecommitdiffstats
path: root/src/interface
diff options
context:
space:
mode:
authorMichael Brown2017-09-13 09:07:55 +0200
committerMichael Brown2017-09-13 09:07:55 +0200
commitd46c53cfc6fe98fbb51afc2560dac26703e3d178 (patch)
tree17e68c730556a5f319e1e7a191bba20cc89488b0 /src/interface
parent[exanic] Add PCI device ID for another X40 variant (diff)
downloadipxe-d46c53cfc6fe98fbb51afc2560dac26703e3d178.tar.gz
ipxe-d46c53cfc6fe98fbb51afc2560dac26703e3d178.tar.xz
ipxe-d46c53cfc6fe98fbb51afc2560dac26703e3d178.zip
[efi] Continue to connect remaining handles after connection errors
Some UEFI BIOSes will deliberately break the implementation of ConnectController() to return errors for devices that have been "disabled" via the BIOS setup screen. (As an added bonus, such BIOSes may return garbage EFI_STATUS values such as 0xff.) Work around these broken UEFI BIOSes by ignoring failures and continuing to attempt to connect any remaining handles. Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/interface')
-rw-r--r--src/interface/efi/efi_driver.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/src/interface/efi/efi_driver.c b/src/interface/efi/efi_driver.c
index 22aa3ee7..2cefed2f 100644
--- a/src/interface/efi/efi_driver.c
+++ b/src/interface/efi/efi_driver.c
@@ -497,14 +497,16 @@ static int efi_driver_handles ( int ( * method ) ( EFI_HANDLE handle ) ) {
/* Connect/disconnect driver from all handles */
for ( i = 0 ; i < num_handles ; i++ ) {
- if ( ( rc = method ( handles[i] ) ) != 0 )
- goto err_method;
+ if ( ( rc = method ( handles[i] ) ) != 0 ) {
+ /* Ignore errors and continue to process
+ * remaining handles.
+ */
+ }
}
/* Success */
rc = 0;
- err_method:
bs->FreePool ( handles );
err_locate:
return rc;