Ref:https://bugzilla.tianocore.org/show_bug.cgi?id=4000
Change flow to bus scan all root bridge instances even when any one root bridge meet bus resource OUT_OF_RESOURCE case. thus platform handler of "EfiPciHostBridgeEndBusAllocation" has an chance to do relative pci bus rebalance to handle this case. Signed-off-by: Foster Nong <foster.n...@intel.com> --- MdeModulePkg/Bus/Pci/PciBusDxe/PciLib.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/MdeModulePkg/Bus/Pci/PciBusDxe/PciLib.c b/MdeModulePkg/Bus/Pci/PciBusDxe/PciLib.c index 63d149b3b8c0..a89f912de85b 100644 --- a/MdeModulePkg/Bus/Pci/PciBusDxe/PciLib.c +++ b/MdeModulePkg/Bus/Pci/PciBusDxe/PciLib.c @@ -1528,6 +1528,7 @@ PciHostBridgeEnumerator ( UINT8 StartBusNumber; LIST_ENTRY RootBridgeList; LIST_ENTRY *Link; + EFI_STATUS RootBridgeEnumerationStatus; if (FeaturePcdGet (PcdPciBusHotplugDeviceSupport)) { InitializeHotPlugSupport (); @@ -1546,6 +1547,7 @@ PciHostBridgeEnumerator ( DEBUG ((DEBUG_INFO, "PCI Bus First Scanning\n")); RootBridgeHandle = NULL; + RootBridgeEnumerationStatus = EFI_SUCCESS; while (PciResAlloc->GetNextRootBridge (PciResAlloc, &RootBridgeHandle) == EFI_SUCCESS) { // // if a root bridge instance is found, create root bridge device for it @@ -1572,7 +1574,7 @@ PciHostBridgeEnumerator ( } if (EFI_ERROR (Status)) { - return Status; + RootBridgeEnumerationStatus = Status; } } @@ -1581,6 +1583,10 @@ PciHostBridgeEnumerator ( // NotifyPhase (PciResAlloc, EfiPciHostBridgeEndBusAllocation); + if (EFI_ERROR (RootBridgeEnumerationStatus)) { + return RootBridgeEnumerationStatus; + } + if ((gPciHotPlugInit != NULL) && FeaturePcdGet (PcdPciBusHotplugDeviceSupport)) { // // Reset all assigned PCI bus number in all PPB @@ -1659,7 +1665,7 @@ PciHostBridgeEnumerator ( DestroyRootBridge (RootBridgeDev); if (EFI_ERROR (Status)) { - return Status; + RootBridgeEnumerationStatus = Status; } } @@ -1667,6 +1673,10 @@ PciHostBridgeEnumerator ( // Notify the bus allocation phase is to end for the 2nd time // NotifyPhase (PciResAlloc, EfiPciHostBridgeEndBusAllocation); + + if (EFI_ERROR (RootBridgeEnumerationStatus)) { + return RootBridgeEnumerationStatus; + } } // -- 2.26.2.windows.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#91749): https://edk2.groups.io/g/devel/message/91749 Mute This Topic: https://groups.io/mt/92558124/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-