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
1 changed files with 8 additions and 7 deletions

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>
This program and the accompanying materials
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 (
PciIoDevice,
(UINT8) (SecBus)
);
if (SecBus != 0) {
Status = PciPciDeviceInfoCollector (
PciIoDevice,
(UINT8) (SecBus)
);
}
}
if (Func == 0 && !IS_PCI_MULTI_FUNC (&Pci)) {