mirror of https://github.com/acidanthera/audk.git
OvmfPkg: QemuVideoDxe: disentangle UEFI driver model use in Stop()
A bus driver needs to pay attention whether its Stop() function is being called on the "main" controller handle (NumberOfChildren == 0) or on the child handles (NumberOfChildren > 0). In QemuVideoDxe, all our resources are associated with the one child handle (and the Private data structure) *except* the top-level PciIo protocol reference. Be conscious of which mode Stop() is being called for. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Laszlo Ersek <lersek@redhat.com> Reviewed-by: Jordan Justen <jordan.l.justen@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@15284 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
42d0cad751
commit
99a6dce3c2
|
@ -454,8 +454,26 @@ QemuVideoControllerDriverStop (
|
|||
EFI_STATUS Status;
|
||||
QEMU_VIDEO_PRIVATE_DATA *Private;
|
||||
|
||||
if (NumberOfChildren == 0) {
|
||||
//
|
||||
// Close the PCI I/O Protocol
|
||||
//
|
||||
gBS->CloseProtocol (
|
||||
Controller,
|
||||
&gEfiPciIoProtocolGuid,
|
||||
This->DriverBindingHandle,
|
||||
Controller
|
||||
);
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
//
|
||||
// free all resources for whose access we need the child handle, because the
|
||||
// child handle is going away
|
||||
//
|
||||
ASSERT (NumberOfChildren == 1);
|
||||
Status = gBS->OpenProtocol (
|
||||
Controller,
|
||||
ChildHandleBuffer[0],
|
||||
&gEfiGraphicsOutputProtocolGuid,
|
||||
(VOID **) &GraphicsOutput,
|
||||
This->DriverBindingHandle,
|
||||
|
@ -470,6 +488,7 @@ QemuVideoControllerDriverStop (
|
|||
// Get our private context information
|
||||
//
|
||||
Private = QEMU_VIDEO_PRIVATE_DATA_FROM_GRAPHICS_OUTPUT_THIS (GraphicsOutput);
|
||||
ASSERT (Private->Handle == ChildHandleBuffer[0]);
|
||||
|
||||
QemuVideoGraphicsOutputDestructor (Private);
|
||||
//
|
||||
|
@ -496,16 +515,6 @@ QemuVideoControllerDriverStop (
|
|||
NULL
|
||||
);
|
||||
|
||||
//
|
||||
// Close the PCI I/O Protocol
|
||||
//
|
||||
gBS->CloseProtocol (
|
||||
Controller,
|
||||
&gEfiPciIoProtocolGuid,
|
||||
This->DriverBindingHandle,
|
||||
Controller
|
||||
);
|
||||
|
||||
gBS->CloseProtocol (
|
||||
Controller,
|
||||
&gEfiPciIoProtocolGuid,
|
||||
|
|
Loading…
Reference in New Issue