Revision: 17513
http://sourceforge.net/p/edk2/code/17513
Author: niruiyu
Date: 2015-05-27 01:22:13 +0000 (Wed, 27 May 2015)
Log Message:
-----------
MdeModulePkg: Fix PciBus hang issue
LocatePciExpressCapabilityRegBlock () doesn't check the return status of
Pci.Read().
Certain platform's PciRootBridge.Pci.Read() doesn't support PCIE access causing
the CapabilityEntry not updated.
If the uninitialized CapabilityEntry equals to a big enough initial value, the
while-loop will never end.
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ruiyu Ni <[email protected]>
Reviewed-by: Maurice Ma <[email protected]>
Modified Paths:
--------------
trunk/edk2/MdeModulePkg/Bus/Pci/PciBusDxe/PciCommand.c
Modified: trunk/edk2/MdeModulePkg/Bus/Pci/PciBusDxe/PciCommand.c
===================================================================
--- trunk/edk2/MdeModulePkg/Bus/Pci/PciBusDxe/PciCommand.c 2015-05-26
11:43:18 UTC (rev 17512)
+++ trunk/edk2/MdeModulePkg/Bus/Pci/PciBusDxe/PciCommand.c 2015-05-27
01:22:13 UTC (rev 17513)
@@ -1,7 +1,7 @@
/** @file
PCI command register operations supporting functions implementation for PCI
Bus module.
-Copyright (c) 2006 - 2009, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2006 - 2015, 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
@@ -200,9 +200,10 @@
OUT UINT32 *NextRegBlock OPTIONAL
)
{
- UINT32 CapabilityPtr;
- UINT32 CapabilityEntry;
- UINT16 CapabilityID;
+ EFI_STATUS Status;
+ UINT32 CapabilityPtr;
+ UINT32 CapabilityEntry;
+ UINT16 CapabilityID;
//
// To check the capability of this device supports
@@ -222,13 +223,16 @@
// Mask it to DWORD alignment per PCI spec
//
CapabilityPtr &= 0xFFC;
- PciIoDevice->PciIo.Pci.Read (
- &PciIoDevice->PciIo,
- EfiPciIoWidthUint32,
- CapabilityPtr,
- 1,
- &CapabilityEntry
- );
+ Status = PciIoDevice->PciIo.Pci.Read (
+ &PciIoDevice->PciIo,
+ EfiPciIoWidthUint32,
+ CapabilityPtr,
+ 1,
+ &CapabilityEntry
+ );
+ if (EFI_ERROR (Status)) {
+ break;
+ }
CapabilityID = (UINT16) CapabilityEntry;
------------------------------------------------------------------------------
_______________________________________________
edk2-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-commits