public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Pedro Falcato" <pedro.falcato@gmail.com>
To: devel@edk2.groups.io
Cc: Pedro Falcato <pedro.falcato@gmail.com>,
	Jian J Wang <jian.j.wang@intel.com>,
	Liming Gao <gaoliming@byosoft.com.cn>,
	Hao A Wu <hao.a.wu@intel.com>, Ray Ni <ray.ni@intel.com>,
	Laszlo Ersek <lersek@redhat.com>
Subject: [PATCH v3 01/12] MdeModulePkg/SataControllerDxe: Clean up error handling in Start()
Date: Thu,  1 Jun 2023 18:27:29 +0100	[thread overview]
Message-ID: <20230601172740.9165-2-pedro.falcato@gmail.com> (raw)
In-Reply-To: <20230601172740.9165-1-pedro.falcato@gmail.com>

Clean up error handling using cascading labels + goto.

(port of commit 379b179 + bcab714)

Cc: Jian J Wang <jian.j.wang@intel.com>
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Hao A Wu <hao.a.wu@intel.com>
Cc: Ray Ni <ray.ni@intel.com>
Cc: Laszlo Ersek <lersek@redhat.com>
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>
---
 .../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 f661efaec7e9..d67a3e69f649 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;
 }
 
 /**
-- 
2.40.1


  reply	other threads:[~2023-06-01 17:28 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-06-01 17:27 [PATCH v3 00/12] OvmfPkg: Replace the OVMF-specific SataControllerDxe with the generic one Pedro Falcato
2023-06-01 17:27 ` Pedro Falcato [this message]
2023-06-01 17:27 ` [PATCH v3 02/12] MdeModulePkg/SataControllerDxe: Log expected errors at DEBUG_INFO level Pedro Falcato
2023-06-01 17:27 ` [PATCH v3 03/12] MdeModulePkg/SataControllerDxe: Remove useless null check Pedro Falcato
2023-06-01 17:27 ` [PATCH v3 04/12] MdeModulePkg/SataControllerDxe: Fix up ASSERTS (Private != NULL) Pedro Falcato
2023-06-01 17:27 ` [PATCH v3 05/12] OvmfPkg: Replace the OVMF-specific SataControllerDxe Pedro Falcato
2023-06-01 17:27 ` [PATCH v3 06/12] OvmfPkg/Microvm: " Pedro Falcato
2023-06-01 17:27 ` [PATCH v3 07/12] OvmfPkg/Bhyve: " Pedro Falcato
2023-06-01 17:27 ` [PATCH v3 08/12] OvmfPkg/CloudHv: " Pedro Falcato
2023-06-01 17:27 ` [PATCH v3 09/12] OvmfPkg/IntelTdx: " Pedro Falcato
2023-06-01 17:27 ` [PATCH v3 10/12] OvmfPkg/AmdSev: " Pedro Falcato
2023-06-01 17:27 ` [PATCH v3 11/12] OvmfPkg/Xen: " Pedro Falcato
2023-06-01 17:27 ` [PATCH v3 12/12] OvmfPkg: Remove SataControllerDxe Pedro Falcato
2023-06-01 18:09 ` [PATCH v3 00/12] OvmfPkg: Replace the OVMF-specific SataControllerDxe with the generic one Ard Biesheuvel

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230601172740.9165-2-pedro.falcato@gmail.com \
    --to=devel@edk2.groups.io \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox