From 5e8958472c45bb31bfa249cf8e4c5a94c9f81839 Mon Sep 17 00:00:00 2001 From: Pedro Falcato Date: Thu, 1 Jun 2023 18:27:29 +0100 Subject: MdeModulePkg/SataControllerDxe: Clean up error handling in Start() Clean up error handling using cascading labels + goto. (port of commit 379b179 + bcab714) Signed-off-by: Pedro Falcato Reviewed-by: Laszlo Ersek Reviewed-by: Hao A Wu --- .../Bus/Pci/SataControllerDxe/SataController.c | 80 ++++++++++------------ 1 file changed, 35 insertions(+), 45 deletions(-) diff --git a/MdeModulePkg/Bus/Pci/SataControllerDxe/SataController.c b/MdeModulePkg/Bus/Pci/SataControllerDxe/SataController.c index f661efaec7..d67a3e69f6 100644 --- a/MdeModulePkg/Bus/Pci/SataControllerDxe/SataController.c +++ b/MdeModulePkg/Bus/Pci/SataControllerDxe/SataController.c @@ -375,8 +375,7 @@ SataControllerStart ( EFI_OPEN_PROTOCOL_BY_DRIVER ); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "SataControllerStart error. return status = %r\n", Status)); - return Status; + goto Bail; } // @@ -385,7 +384,7 @@ SataControllerStart ( Private = AllocateZeroPool (sizeof (EFI_SATA_CONTROLLER_PRIVATE_DATA)); if (Private == NULL) { Status = EFI_OUT_OF_RESOURCES; - goto Done; + goto ClosePciIo; } // @@ -412,7 +411,7 @@ SataControllerStart ( &Private->OriginalPciAttributes ); if (EFI_ERROR (Status)) { - goto Done; + goto FreeSataPrivate; } DEBUG (( @@ -428,7 +427,7 @@ SataControllerStart ( &Supports ); if (EFI_ERROR (Status)) { - goto Done; + goto FreeSataPrivate; } DEBUG ((DEBUG_INFO, "Supported PCI Attributes = 0x%llx\n", Supports)); @@ -441,7 +440,7 @@ SataControllerStart ( NULL ); if (EFI_ERROR (Status)) { - goto Done; + goto FreeSataPrivate; } DEBUG ((DEBUG_INFO, "Enabled PCI Attributes = 0x%llx\n", Supports)); @@ -456,7 +455,7 @@ SataControllerStart ( ); if (EFI_ERROR (Status)) { ASSERT (FALSE); - goto Done; + goto RestorePciAttributes; } if (IS_PCI_IDE (&PciData)) { @@ -470,7 +469,7 @@ SataControllerStart ( DEBUG ((DEBUG_INFO, "Ports Implemented(PI) = 0x%x\n", Data32)); if (Data32 == 0) { Status = EFI_UNSUPPORTED; - goto Done; + goto RestorePciAttributes; } MaxPortNumber = 31; @@ -502,19 +501,19 @@ SataControllerStart ( Private->DisqualifiedModes = AllocateZeroPool ((sizeof (EFI_ATA_COLLECTIVE_MODE)) * TotalCount); if (Private->DisqualifiedModes == NULL) { Status = EFI_OUT_OF_RESOURCES; - goto Done; + goto RestorePciAttributes; } Private->IdentifyData = AllocateZeroPool ((sizeof (EFI_IDENTIFY_DATA)) * TotalCount); if (Private->IdentifyData == NULL) { Status = EFI_OUT_OF_RESOURCES; - goto Done; + goto FreeDisqualifiedModes; } Private->IdentifyValid = AllocateZeroPool ((sizeof (BOOLEAN)) * TotalCount); if (Private->IdentifyValid == NULL) { Status = EFI_OUT_OF_RESOURCES; - goto Done; + goto FreeIdentifyData; } // @@ -527,46 +526,37 @@ SataControllerStart ( NULL ); -Done: if (EFI_ERROR (Status)) { - gBS->CloseProtocol ( - Controller, - &gEfiPciIoProtocolGuid, - This->DriverBindingHandle, - Controller - ); - if (Private != NULL) { - if (Private->DisqualifiedModes != NULL) { - FreePool (Private->DisqualifiedModes); - } - - if (Private->IdentifyData != NULL) { - FreePool (Private->IdentifyData); - } - - if (Private->IdentifyValid != NULL) { - FreePool (Private->IdentifyValid); - } - - if (Private->PciAttributesChanged) { - // - // Restore original PCI attributes - // - PciIo->Attributes ( - PciIo, - EfiPciIoAttributeOperationSet, - Private->OriginalPciAttributes, - NULL - ); - } - - FreePool (Private); - } + goto FreeIdentifyValid; } DEBUG ((DEBUG_INFO, "SataControllerStart end with %r\n", Status)); return Status; + +FreeIdentifyValid: + FreePool (Private->IdentifyValid); +FreeIdentifyData: + FreePool (Private->IdentifyData); +FreeDisqualifiedModes: + FreePool (Private->DisqualifiedModes); +RestorePciAttributes: + // + // Restore original PCI attributes + // + Private->PciIo->Attributes ( + Private->PciIo, + EfiPciIoAttributeOperationSet, + Private->OriginalPciAttributes, + NULL + ); +FreeSataPrivate: + FreePool (Private); +ClosePciIo: + gBS->CloseProtocol (Controller, &gEfiPciIoProtocolGuid, This->DriverBindingHandle, Controller); +Bail: + DEBUG ((DEBUG_ERROR, "SataControllerStart error return status = %r\n", Status)); + return Status; } /** -- cgit