]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/Network/MnpDxe/MnpDriver.c
Sync the latest version from R8.
[mirror_edk2.git] / MdeModulePkg / Universal / Network / MnpDxe / MnpDriver.c
index 814566ec56c647213fec7e7494d66b0d4f7b1f49..946ace1f66a25178cdccb0913adf31d8007970fc 100644 (file)
@@ -219,64 +219,54 @@ MnpDriverBindingStop (
       ("MnpDriverBindingStop: Locate MNP Service Binding Protocol failed, %r.\n",\r
       Status)\r
       );\r
-    goto EXIT;\r
+    return EFI_DEVICE_ERROR;\r
   }\r
 \r
   MnpServiceData = MNP_SERVICE_DATA_FROM_THIS (ServiceBinding);\r
 \r
-  while (!NetListIsEmpty (&MnpServiceData->ChildrenList)) {\r
+  if (NumberOfChildren == 0) {\r
     //\r
-    // Don't use NetListRemoveHead here, the remove opreration will be done\r
-    // in ServiceBindingDestroyChild.\r
+    // Uninstall the MNP Service Binding Protocol.\r
     //\r
-    Instance = NET_LIST_HEAD (\r
-                &MnpServiceData->ChildrenList,\r
-                MNP_INSTANCE_DATA,\r
-                InstEntry\r
-                );\r
-\r
-    ServiceBinding->DestroyChild (ServiceBinding, Instance->Handle);\r
-  }\r
+    gBS->UninstallMultipleProtocolInterfaces (\r
+           ControllerHandle,\r
+           &gEfiManagedNetworkServiceBindingProtocolGuid,\r
+           ServiceBinding,\r
+           NULL\r
+           );\r
 \r
-  //\r
-  // Uninstall the MNP Service Binding Protocol.\r
-  //\r
-  Status = gBS->UninstallMultipleProtocolInterfaces (\r
-                  ControllerHandle,\r
-                  &gEfiManagedNetworkServiceBindingProtocolGuid,\r
-                  ServiceBinding,\r
-                  NULL\r
-                  );\r
-  if (EFI_ERROR (Status)) {\r
+    //\r
+    // Close the openned Snp protocol.\r
+    //\r
+    gBS->CloseProtocol (\r
+           ControllerHandle,\r
+           &gEfiSimpleNetworkProtocolGuid,\r
+           This->DriverBindingHandle,\r
+           ControllerHandle\r
+           );\r
 \r
-    MNP_DEBUG_ERROR (("MnpDriverBindingStop: Uninstall MNP Service Binding Protocol failed, %r.\n"));\r
-    goto EXIT;\r
-  }\r
+    //\r
+    // Flush the Mnp service data.\r
+    //\r
+    MnpFlushServiceData (MnpServiceData);\r
 \r
-  //\r
-  // Close the openned Snp protocol.\r
-  //\r
-  Status = gBS->CloseProtocol (\r
-                  ControllerHandle,\r
-                  &gEfiSimpleNetworkProtocolGuid,\r
-                  This->DriverBindingHandle,\r
-                  ControllerHandle\r
-                  );\r
-  if (EFI_ERROR (Status)) {\r
+    NetFreePool (MnpServiceData);\r
+  } else {\r
+    while (!NetListIsEmpty (&MnpServiceData->ChildrenList)) {\r
+      //\r
+      // Don't use NetListRemoveHead here, the remove opreration will be done\r
+      // in ServiceBindingDestroyChild.\r
+      //\r
+      Instance = NET_LIST_HEAD (\r
+                   &MnpServiceData->ChildrenList,\r
+                   MNP_INSTANCE_DATA,\r
+                   InstEntry\r
+                   );\r
 \r
-    MNP_DEBUG_ERROR (("MnpDriverBindingStop: Close SNP Protocol failed, %r.\n", Status));\r
-    goto EXIT;\r
+      ServiceBinding->DestroyChild (ServiceBinding, Instance->Handle);\r
+    }\r
   }\r
 \r
-  //\r
-  // Flush the Mnp service data.\r
-  //\r
-  MnpFlushServiceData (MnpServiceData);\r
-\r
-  NetFreePool (MnpServiceData);\r
-\r
-EXIT:\r
-\r
   return Status;\r
 }\r
 \r