summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorHeinrich Schuchardt <xypron.glpk@gmx.de>2020-01-10 01:26:43 +0300
committerHeinrich Schuchardt <xypron.glpk@gmx.de>2020-01-15 02:51:51 +0300
commitd7431042465cae9314d299022427ed15386a2fed (patch)
treec8d37e5910c58c16b26ec2283a6272328d5b5597 /lib
parent1064f2ef03c7fbed15119403c65f1de0de7f7b6d (diff)
downloadu-boot-d7431042465cae9314d299022427ed15386a2fed.tar.xz
efi_driver: fix efi_uc_stop()
Use the correct protocol in efi_uc_stop() when detaching the driver from the controller. Change the block IO unit test for the block device driver to throw an error instead of a todo if teardown fails. Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Diffstat (limited to 'lib')
-rw-r--r--lib/efi_driver/efi_uclass.c7
-rw-r--r--lib/efi_selftest/efi_selftest_block_device.c4
2 files changed, 6 insertions, 5 deletions
diff --git a/lib/efi_driver/efi_uclass.c b/lib/efi_driver/efi_uclass.c
index b14746e6b1..40269b00dc 100644
--- a/lib/efi_driver/efi_uclass.c
+++ b/lib/efi_driver/efi_uclass.c
@@ -197,7 +197,8 @@ static efi_status_t EFIAPI efi_uc_stop(
efi_status_t ret;
efi_uintn_t count;
struct efi_open_protocol_info_entry *entry_buffer;
- efi_guid_t *guid_controller = NULL;
+ struct efi_driver_binding_extended_protocol *bp =
+ (struct efi_driver_binding_extended_protocol *)this;
EFI_ENTRY("%p, %pUl, %zu, %p", this, controller_handle,
number_of_children, child_handle_buffer);
@@ -217,7 +218,7 @@ static efi_status_t EFIAPI efi_uc_stop(
/* Destroy all children */
ret = EFI_CALL(systab.boottime->open_protocol_information(
- controller_handle, guid_controller,
+ controller_handle, bp->ops->protocol,
&entry_buffer, &count));
if (ret != EFI_SUCCESS)
goto out;
@@ -237,7 +238,7 @@ static efi_status_t EFIAPI efi_uc_stop(
/* Detach driver from controller */
ret = EFI_CALL(systab.boottime->close_protocol(
- controller_handle, guid_controller,
+ controller_handle, bp->ops->protocol,
this->driver_binding_handle, controller_handle));
out:
return EFI_EXIT(ret);
diff --git a/lib/efi_selftest/efi_selftest_block_device.c b/lib/efi_selftest/efi_selftest_block_device.c
index 644c5ade21..d98a854e6d 100644
--- a/lib/efi_selftest/efi_selftest_block_device.c
+++ b/lib/efi_selftest/efi_selftest_block_device.c
@@ -257,9 +257,9 @@ static int teardown(void)
disk_handle, &block_io_protocol_guid,
&block_io);
if (r != EFI_SUCCESS) {
- efi_st_todo(
+ efi_st_error(
"Failed to uninstall block I/O protocol\n");
- return EFI_ST_SUCCESS;
+ return EFI_ST_FAILURE;
}
}