goto FreeVgpuDev;\r
}\r
\r
+ Status = VirtioGpuInit (VgpuDev);\r
+ if (EFI_ERROR (Status)) {\r
+ goto FreeVgpuDevBusName;\r
+ }\r
+\r
+ Status = gBS->CreateEvent (EVT_SIGNAL_EXIT_BOOT_SERVICES, TPL_CALLBACK,\r
+ VirtioGpuExitBoot, VgpuDev /* NotifyContext */,\r
+ &VgpuDev->ExitBoot);\r
+ if (EFI_ERROR (Status)) {\r
+ goto UninitGpu;\r
+ }\r
+\r
//\r
// Install the VGPU_DEV "protocol interface" on ControllerHandle.\r
//\r
Status = gBS->InstallProtocolInterface (&ControllerHandle,\r
&gEfiCallerIdGuid, EFI_NATIVE_INTERFACE, VgpuDev);\r
if (EFI_ERROR (Status)) {\r
- goto FreeVgpuDevBusName;\r
+ goto CloseExitBoot;\r
}\r
\r
if (RemainingDevicePath != NULL && IsDevicePathEnd (RemainingDevicePath)) {\r
VgpuDev);\r
}\r
\r
+CloseExitBoot:\r
+ if (VirtIoBoundJustNow) {\r
+ gBS->CloseEvent (VgpuDev->ExitBoot);\r
+ }\r
+\r
+UninitGpu:\r
+ if (VirtIoBoundJustNow) {\r
+ VirtioGpuUninit (VgpuDev);\r
+ }\r
+\r
FreeVgpuDevBusName:\r
if (VirtIoBoundJustNow) {\r
FreeUnicodeStringTable (VgpuDev->BusName);\r
&gEfiCallerIdGuid, VgpuDev);\r
ASSERT_EFI_ERROR (Status);\r
\r
+ Status = gBS->CloseEvent (VgpuDev->ExitBoot);\r
+ ASSERT_EFI_ERROR (Status);\r
+\r
+ VirtioGpuUninit (VgpuDev);\r
FreeUnicodeStringTable (VgpuDev->BusName);\r
FreePool (VgpuDev);\r
\r