[efi] Allow vetoing of drivers that cannot be unloaded

Some UEFI drivers (observed with the "Usb Xhci Driver" on an HP
EliteBook) are particularly badly behaved: they cannot be unloaded and
will leave handles opened with BY_DRIVER attributes even after
disconnecting the driver, thereby preventing a replacement iPXE driver
from opening the handle.

Allow such drivers to be vetoed by falling back to a brute-force
mechanism that will disconnect the driver from all handles, uninstall
the driver binding protocol (to prevent it from attaching to any new
handles), and finally close any stray handles that the vetoed driver
has left open.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
Michael Brown
2020-11-30 17:08:58 +00:00
parent 354c252ee1
commit 63625b43e9
3 changed files with 312 additions and 9 deletions

View File

@@ -79,8 +79,8 @@ EFI_STATUS EFIAPI _efi_start ( EFI_HANDLE image_handle,
*/
static int efi_probe ( struct root_device *rootdev __unused ) {
/* Unloaded any vetoed drivers */
efi_veto_unload();
/* Remove any vetoed drivers */
efi_veto();
/* Connect our drivers */
return efi_driver_connect_all();