mirror of
https://github.com/tianocore/edk2
synced 2026-08-27 00:23:19 -04:00
Sync patch r13781 from main trunk.
The Driver Binding Protocol Stop() function for the UndiRuntimeDxe is performing actions in the incorrect order. The call to UninstallMultipleProtocolInterfaces() removes all the protocols from the child handle, which means ChildHandleBuffer[Index] is no longer valid. After the call to UninstallMultipleProtocolInterfaces(), ChildHandleBuffer[Index] is used again in a call to CloseProtocol(). The handle is not valid, so CloseProtocol() returns an error and generates an ASSERT(). This patch changes the order to call CloseProtocol() before calling UninstallMultipleProtocolInterfaces(). git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/branches/UDK2010.SR1@14119 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
a854a26693
commit
942538f2c2
1 changed files with 27 additions and 27 deletions
|
|
@ -1,7 +1,7 @@
|
|||
/** @file
|
||||
Initialization functions for EFI UNDI32 driver.
|
||||
|
||||
Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>
|
||||
Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR>
|
||||
This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
which accompanies this distribution. The full text of the license may be found at
|
||||
|
|
@ -616,38 +616,38 @@ UndiDriverStop (
|
|||
|
||||
UNDI32Device = UNDI_DEV_FROM_THIS (NIIProtocol);
|
||||
|
||||
Status = gBS->UninstallMultipleProtocolInterfaces (
|
||||
ChildHandleBuffer[Index],
|
||||
&gEfiDevicePathProtocolGuid,
|
||||
UNDI32Device->Undi32DevPath,
|
||||
&gEfiNetworkInterfaceIdentifierProtocolGuid_31,
|
||||
&UNDI32Device->NIIProtocol_31,
|
||||
NULL
|
||||
Status = gBS->CloseProtocol (
|
||||
Controller,
|
||||
&gEfiPciIoProtocolGuid,
|
||||
This->DriverBindingHandle,
|
||||
ChildHandleBuffer[Index]
|
||||
);
|
||||
if (!EFI_ERROR (Status)) {
|
||||
//
|
||||
// Restore original PCI attributes
|
||||
//
|
||||
Status = UNDI32Device->NicInfo.Io_Function->Attributes (
|
||||
UNDI32Device->NicInfo.Io_Function,
|
||||
EfiPciIoAttributeOperationSet,
|
||||
UNDI32Device->NicInfo.OriginalPciAttributes,
|
||||
NULL
|
||||
);
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
|
||||
Status = gBS->CloseProtocol (
|
||||
Controller,
|
||||
&gEfiPciIoProtocolGuid,
|
||||
This->DriverBindingHandle,
|
||||
ChildHandleBuffer[Index]
|
||||
Status = gBS->UninstallMultipleProtocolInterfaces (
|
||||
ChildHandleBuffer[Index],
|
||||
&gEfiDevicePathProtocolGuid,
|
||||
UNDI32Device->Undi32DevPath,
|
||||
&gEfiNetworkInterfaceIdentifierProtocolGuid_31,
|
||||
&UNDI32Device->NIIProtocol_31,
|
||||
NULL
|
||||
);
|
||||
if (!EFI_ERROR (Status)) {
|
||||
//
|
||||
// Restore original PCI attributes
|
||||
//
|
||||
Status = UNDI32Device->NicInfo.Io_Function->Attributes (
|
||||
UNDI32Device->NicInfo.Io_Function,
|
||||
EfiPciIoAttributeOperationSet,
|
||||
UNDI32Device->NicInfo.OriginalPciAttributes,
|
||||
NULL
|
||||
);
|
||||
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
|
||||
gBS->FreePool (UNDI32Device->Undi32DevPath);
|
||||
gBS->FreePool (UNDI32Device);
|
||||
gBS->FreePool (UNDI32Device->Undi32DevPath);
|
||||
gBS->FreePool (UNDI32Device);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue