DuetPkg-PciBusNoEnumerationDxe: Fix stack overflow

When a PCI bridge is not enabled, the secondary bus may still be zero.
This causes an infinite recursive call to enumerate bus 0 which results
in a stack overflow.  The easy fix is to skip the recursive bus
enumeration for bridges which do not have the secondary bus initialized.

TEST=Build and run CorebootPayloadPkg on Quark/Galileo Gen2

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Lee Leahy <leroy.p.leahy@intel.com>
Reviewed-by: Ruiyu Ni <ruiyu.ni@intel.com>
This commit is contained in:
Lee Leahy 2016-02-26 10:07:51 +08:00 committed by Ruiyu Ni
parent e89d672110
commit ba33c80fc5

View File

@ -1,6 +1,6 @@
/*++ /*++
Copyright (c) 2005 - 2014, Intel Corporation. All rights reserved.<BR> Copyright (c) 2005 - 2016, Intel Corporation. All rights reserved.<BR>
(C) Copyright 2015 Hewlett Packard Enterprise Development LP<BR> (C) Copyright 2015 Hewlett Packard Enterprise Development LP<BR>
This program and the accompanying materials This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License are licensed and made available under the terms and conditions of the BSD License
@ -257,13 +257,14 @@ Returns:
} }
// //
// Deep enumerate the next level bus // If the PCI bridge is initialized then enumerate the next level bus
// //
Status = PciPciDeviceInfoCollector ( if (SecBus != 0) {
PciIoDevice, Status = PciPciDeviceInfoCollector (
(UINT8) (SecBus) PciIoDevice,
); (UINT8) (SecBus)
);
}
} }
if (Func == 0 && !IS_PCI_MULTI_FUNC (&Pci)) { if (Func == 0 && !IS_PCI_MULTI_FUNC (&Pci)) {