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 <pedro.falcato@gmail.com>
Reviewed-by: Laszlo Ersek <lersek@redhat.com>
Reviewed-by: Hao A Wu <hao.a.wu@intel.com>
This commit is contained in:
Pedro Falcato 2023-06-01 18:27:29 +01:00 committed by mergify[bot]
parent ded1d5414b
commit 5e8958472c

View File

@ -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;
}
/**