> On Nov 2, 2015, at 6:38 PM, Ni, Ruiyu <[email protected]> wrote:
> 
> Leif suggested to split the patch.
> 

It would be good to capture that in the commit message.

Thanks,

Andrew Fish

> -----Original Message-----
> From: Andrew Fish [mailto:[email protected]] 
> Sent: Tuesday, November 3, 2015 10:35 AM
> To: [email protected]
> Cc: [email protected]
> Subject: Re: edk2[18717] Revert "MdeModulePkg: Fix a PciBusDxe hot plug bug"
> 
> 
>> On Nov 2, 2015, at 6:33 PM, [email protected] wrote:
>> 
>> Revision: 18717
>>         http://sourceforge.net/p/edk2/code/18717
>> Author:   niruiyu
>> Date:     2015-11-03 02:33:05 +0000 (Tue, 03 Nov 2015)
>> Log Message:
>> -----------
>> Revert "MdeModulePkg: Fix a PciBusDxe hot plug bug"
>> 
>> This reverts commit 73b7f115c653c807b9d0be97bf516871d8aff7ba.
>> 
> 
> Why was it reverted?
> 
> Thanks,
> 
> Andrew Fish
> 
>> Contributed-under: TianoCore Contribution Agreement 1.0
>> Signed-off-by: Ruiyu Ni <[email protected]>
>> Reviewed-by: Feng Tian <[email protected]>
>> 
>> Modified Paths:
>> --------------
>>   trunk/edk2/MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.c
>>   trunk/edk2/MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.h
>>   trunk/edk2/MdeModulePkg/Bus/Pci/PciBusDxe/PciLib.c
>>   trunk/edk2/MdeModulePkg/Bus/Pci/PciBusDxe/PciResourceSupport.c
>> 
>> Modified: trunk/edk2/MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.c
>> ===================================================================
>> --- trunk/edk2/MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.c 
>> 2015-11-03 02:06:57 UTC (rev 18716)
>> +++ trunk/edk2/MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.c 
>> 2015-11-03 02:33:05 UTC (rev 18717)
>> @@ -325,81 +325,6 @@
>> }
>> 
>> /**
>> -  Dump the PPB padding resource information.
>> -
>> -  @param PciIoDevice     PCI IO instance.
>> -  @param ResourceType    The desired resource type to dump.
>> -                         PciBarTypeUnknown means to dump all types of 
>> resources.
>> -**/
>> -VOID
>> -DumpPpbPaddingResource (
>> -  IN PCI_IO_DEVICE                    *PciIoDevice,
>> -  IN PCI_BAR_TYPE                     ResourceType
>> -  )
>> -{
>> -  EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *Descriptor;
>> -  PCI_BAR_TYPE                      Type;
>> -
>> -  if (PciIoDevice->ResourcePaddingDescriptors == NULL) {
>> -    return;
>> -  }
>> -
>> -  if (ResourceType == PciBarTypeIo16 || ResourceType == PciBarTypeIo32) {
>> -    ResourceType = PciBarTypeIo;
>> -  }
>> -
>> -  for (Descriptor = PciIoDevice->ResourcePaddingDescriptors; 
>> Descriptor->Desc != ACPI_END_TAG_DESCRIPTOR; Descriptor++) {
>> -
>> -    Type = PciBarTypeUnknown;
>> -    if (Descriptor->Desc == ACPI_ADDRESS_SPACE_DESCRIPTOR && 
>> Descriptor->ResType == ACPI_ADDRESS_SPACE_TYPE_IO) {
>> -      Type = PciBarTypeIo;
>> -    } else if (Descriptor->Desc == ACPI_ADDRESS_SPACE_DESCRIPTOR && 
>> Descriptor->ResType == ACPI_ADDRESS_SPACE_TYPE_MEM) {
>> -
>> -      if (Descriptor->AddrSpaceGranularity == 32) {
>> -        //
>> -        // prefechable
>> -        //
>> -        if (Descriptor->SpecificFlag == 
>> EFI_ACPI_MEMORY_RESOURCE_SPECIFIC_FLAG_CACHEABLE_PREFETCHABLE) {
>> -          Type = PciBarTypePMem32;
>> -        }
>> -
>> -        //
>> -        // Non-prefechable
>> -        //
>> -        if (Descriptor->SpecificFlag == 0) {
>> -          Type = PciBarTypeMem32;
>> -        }
>> -      }
>> -
>> -      if (Descriptor->AddrSpaceGranularity == 64) {
>> -        //
>> -        // prefechable
>> -        //
>> -        if (Descriptor->SpecificFlag == 
>> EFI_ACPI_MEMORY_RESOURCE_SPECIFIC_FLAG_CACHEABLE_PREFETCHABLE) {
>> -          Type = PciBarTypePMem64;
>> -        }
>> -
>> -        //
>> -        // Non-prefechable
>> -        //
>> -        if (Descriptor->SpecificFlag == 0) {
>> -          Type = PciBarTypeMem64;
>> -        }
>> -      }
>> -    }
>> -
>> -    if ((Type != PciBarTypeUnknown) && ((ResourceType == PciBarTypeUnknown) 
>> || (ResourceType == Type))) {
>> -      DEBUG ((
>> -        EFI_D_INFO,
>> -        "   Padding: Type = %s; Alignment = 0x%lx;\tLength = 0x%lx\n",
>> -        mBarTypeStr[Type], Descriptor->AddrRangeMax, Descriptor->AddrLen
>> -        ));
>> -    }
>> -  }
>> -
>> -}
>> -
>> -/**
>>  Dump the PCI BAR information.
>> 
>>  @param PciIoDevice     PCI IO instance.
>> @@ -661,10 +586,7 @@
>> 
>>  GetResourcePaddingPpb (PciIoDevice);
>> 
>> -  DEBUG_CODE (
>> -    DumpPpbPaddingResource (PciIoDevice, PciBarTypeUnknown);
>> -    DumpPciBars (PciIoDevice);
>> -  );
>> +  DEBUG_CODE (DumpPciBars (PciIoDevice););
>> 
>>  return PciIoDevice;
>> }
>> 
>> Modified: trunk/edk2/MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.h
>> ===================================================================
>> --- trunk/edk2/MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.h 
>> 2015-11-03 02:06:57 UTC (rev 18716)
>> +++ trunk/edk2/MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.h 
>> 2015-11-03 02:33:05 UTC (rev 18717)
>> @@ -460,17 +460,4 @@
>>  IN UINT8                              StartBusNumber
>>  );
>> 
>> -/**
>> -  Dump the PPB padding resource information.
>> -
>> -  @param PciIoDevice     PCI IO instance.
>> -  @param ResourceType    The desired resource type to dump.
>> -                         PciBarTypeUnknown means to dump all types of 
>> resources.
>> -**/
>> -VOID
>> -DumpPpbPaddingResource (
>> -  IN PCI_IO_DEVICE                    *PciIoDevice,
>> -  IN PCI_BAR_TYPE                     ResourceType
>> -  );
>> -
>> #endif
>> 
>> Modified: trunk/edk2/MdeModulePkg/Bus/Pci/PciBusDxe/PciLib.c
>> ===================================================================
>> --- trunk/edk2/MdeModulePkg/Bus/Pci/PciBusDxe/PciLib.c       2015-11-03 
>> 02:06:57 UTC (rev 18716)
>> +++ trunk/edk2/MdeModulePkg/Bus/Pci/PciBusDxe/PciLib.c       2015-11-03 
>> 02:33:05 UTC (rev 18717)
>> @@ -188,21 +188,19 @@
>>      BridgeResource->PciDev->PciBar[BridgeResource->Bar].BaseAddress,
>>      BridgeResource->Length, BridgeResource->Alignment
>>      ));
>> -    for ( Link = GetFirstNode (&BridgeResource->ChildList)
>> -        ; !IsNull (&BridgeResource->ChildList, Link)
>> -        ; Link = GetNextNode (&BridgeResource->ChildList, Link)
>> +    for ( Link = BridgeResource->ChildList.ForwardLink
>> +        ; Link != &BridgeResource->ChildList
>> +        ; Link = Link->ForwardLink
>>        ) {
>>      Resource = RESOURCE_NODE_FROM_LINK (Link);
>>      if (Resource->ResourceUsage == PciResUsageTypical) {
>>        Bar = Resource->Virtual ? Resource->PciDev->VfPciBar : 
>> Resource->PciDev->PciBar;
>>        DEBUG ((
>> -          EFI_D_INFO, "   Base = 0x%lx;\tLength = 0x%lx;\tAlignment = 
>> 0x%lx;\tOwner = %s [%02x|%02x|%02x:",
>> +          EFI_D_INFO, " Base = 0x%lx;\tLength = 0x%lx;\tAlignment = 
>> 0x%lx;\tOwner = %s ",
>>          Bar[Resource->Bar].BaseAddress, Resource->Length, 
>> Resource->Alignment,
>>          IS_PCI_BRIDGE (&Resource->PciDev->Pci)     ? L"PPB" :
>>          IS_CARDBUS_BRIDGE (&Resource->PciDev->Pci) ? L"P2C" :
>> -                                                       L"PCI",
>> -          Resource->PciDev->BusNumber, Resource->PciDev->DeviceNumber,
>> -          Resource->PciDev->FunctionNumber
>> +                                                       L"PCI"
>>          ));
>> 
>>        if ((!IS_PCI_BRIDGE (&Resource->PciDev->Pci) && !IS_CARDBUS_BRIDGE 
>> (&Resource->PciDev->Pci)) ||
>> @@ -212,20 +210,24 @@
>>          //
>>          // The resource requirement comes from the device itself.
>>          //
>> -          DEBUG ((EFI_D_INFO, "%02x]", Bar[Resource->Bar].Offset));
>> +          DEBUG ((
>> +            EFI_D_INFO, " [%02x|%02x|%02x:%02x]\n",
>> +            Resource->PciDev->BusNumber, Resource->PciDev->DeviceNumber,
>> +            Resource->PciDev->FunctionNumber, Bar[Resource->Bar].Offset
>> +            ));
>>        } else {
>>          //
>>          // The resource requirement comes from the subordinate devices.
>>          //
>> -          DEBUG ((EFI_D_INFO, "**]"));
>> +          DEBUG ((
>> +            EFI_D_INFO, " [%02x|%02x|%02x:**]\n",
>> +            Resource->PciDev->BusNumber, Resource->PciDev->DeviceNumber,
>> +            Resource->PciDev->FunctionNumber
>> +            ));
>>        }
>>      } else {
>> -        DEBUG ((EFI_D_INFO, "   Base = Padding;\tLength = 0x%lx;\tAlignment 
>> = 0x%lx", Resource->Length, Resource->Alignment));
>> +        DEBUG ((EFI_D_INFO, " Padding:Length = 0x%lx;\tAlignment = 
>> 0x%lx\n", Resource->Length, Resource->Alignment));
>>      }
>> -      if (BridgeResource->ResType != Resource->ResType) {
>> -        DEBUG ((EFI_D_INFO, "; Type = %s", mBarTypeStr[MIN 
>> (Resource->ResType, PciBarTypeMaxType)]));
>> -      }
>> -      DEBUG ((EFI_D_INFO, "\n"));
>>    }
>>  }
>> }
>> @@ -233,61 +235,63 @@
>> /**
>>  Find the corresponding resource node for the Device in child list of 
>> BridgeResource.
>> 
>> -  @param[in]  Device          Pointer to PCI_IO_DEVICE.
>> -  @param[in]  BridgeResource  Pointer to PCI_RESOURCE_NODE.
>> -  @param[out] DeviceResources Pointer to a buffer to receive resources for 
>> the Device.
>> +  @param[in] Device         Pointer to PCI_IO_DEVICE.
>> +  @param[in] BridgeResource Pointer to PCI_RESOURCE_NODE.
>> 
>> -  @return Count of the resource descriptors returned.
>> +  @return !NULL  The corresponding resource node for the Device.
>> +  @return NULL   No corresponding resource node for the Device.
>> **/
>> -UINTN
>> +PCI_RESOURCE_NODE *
>> FindResourceNode (
>> -  IN  PCI_IO_DEVICE     *Device,
>> -  IN  PCI_RESOURCE_NODE *BridgeResource,
>> -  OUT PCI_RESOURCE_NODE **DeviceResources OPTIONAL
>> +  IN PCI_IO_DEVICE     *Device,
>> +  IN PCI_RESOURCE_NODE *BridgeResource
>>  )
>> {
>>  LIST_ENTRY               *Link;
>>  PCI_RESOURCE_NODE        *Resource;
>> -  UINTN                    Count;
>> 
>> -  Count = 0;
>>  for ( Link = BridgeResource->ChildList.ForwardLink
>>      ; Link != &BridgeResource->ChildList
>>      ; Link = Link->ForwardLink
>>      ) {
>>    Resource = RESOURCE_NODE_FROM_LINK (Link);
>>    if (Resource->PciDev == Device) {
>> -      if (DeviceResources != NULL) {
>> -        DeviceResources[Count] = Resource;
>> -      }
>> -      Count++;
>> +      return Resource;
>>    }
>>  }
>> 
>> -  return Count;
>> +  return NULL;
>> }
>> 
>> /**
>>  Dump the resource map of all the devices under Bridge.
>> 
>> -  @param[in] Bridge        Bridge device instance.
>> -  @param[in] Resources     Resource descriptors for the bridge device.
>> -  @param[in] ResourceCount Count of resource descriptors.
>> +  @param[in] Bridge     Bridge device instance.
>> +  @param[in] IoNode     IO resource descriptor for the bridge device.
>> +  @param[in] Mem32Node  Mem32 resource descriptor for the bridge device.
>> +  @param[in] PMem32Node PMem32 resource descriptor for the bridge device.
>> +  @param[in] Mem64Node  Mem64 resource descriptor for the bridge device.
>> +  @param[in] PMem64Node PMem64 resource descriptor for the bridge device.
>> **/
>> VOID
>> DumpResourceMap (
>>  IN PCI_IO_DEVICE     *Bridge,
>> -  IN PCI_RESOURCE_NODE **Resources,
>> -  IN UINTN             ResourceCount
>> +  IN PCI_RESOURCE_NODE *IoNode,
>> +  IN PCI_RESOURCE_NODE *Mem32Node,
>> +  IN PCI_RESOURCE_NODE *PMem32Node,
>> +  IN PCI_RESOURCE_NODE *Mem64Node,
>> +  IN PCI_RESOURCE_NODE *PMem64Node
>>  )
>> {
>> -  EFI_STATUS           Status;
>> -  LIST_ENTRY           *Link;
>> -  PCI_IO_DEVICE        *Device;
>> -  UINTN                Index;
>> -  CHAR16               *Str;
>> -  PCI_RESOURCE_NODE    **ChildResources;
>> -  UINTN                ChildResourceCount;
>> +  EFI_STATUS                       Status;
>> +  LIST_ENTRY                       *Link;
>> +  PCI_IO_DEVICE                    *Device;
>> +  PCI_RESOURCE_NODE                *ChildIoNode;
>> +  PCI_RESOURCE_NODE                *ChildMem32Node;
>> +  PCI_RESOURCE_NODE                *ChildPMem32Node;
>> +  PCI_RESOURCE_NODE                *ChildMem64Node;
>> +  PCI_RESOURCE_NODE                *ChildPMem64Node;
>> +  CHAR16                           *Str;
>> 
>>  DEBUG ((EFI_D_INFO, "PciBus: Resource Map for "));
>> 
>> @@ -316,9 +320,11 @@
>>    }
>>  }
>> 
>> -  for (Index = 0; Index < ResourceCount; Index++) {
>> -    DumpBridgeResource (Resources[Index]);
>> -  }
>> +  DumpBridgeResource (IoNode);
>> +  DumpBridgeResource (Mem32Node);
>> +  DumpBridgeResource (PMem32Node);
>> +  DumpBridgeResource (Mem64Node);
>> +  DumpBridgeResource (PMem64Node);
>>  DEBUG ((EFI_D_INFO, "\n"));
>> 
>>  for ( Link = Bridge->ChildList.ForwardLink
>> @@ -328,19 +334,20 @@
>>    Device = PCI_IO_DEVICE_FROM_LINK (Link);
>>    if (IS_PCI_BRIDGE (&Device->Pci)) {
>> 
>> -      ChildResourceCount = 0;
>> -      for (Index = 0; Index < ResourceCount; Index++) {
>> -        ChildResourceCount += FindResourceNode (Device, Resources[Index], 
>> NULL);
>> -      }
>> -      ChildResources = AllocatePool (sizeof (PCI_RESOURCE_NODE *) * 
>> ChildResourceCount);
>> -      ASSERT (ChildResources != NULL);
>> -      ChildResourceCount = 0;
>> -      for (Index = 0; Index < ResourceCount; Index++) {
>> -        ChildResourceCount += FindResourceNode (Device, Resources[Index], 
>> &ChildResources[ChildResourceCount]);
>> -      }
>> +      ChildIoNode     = (IoNode     == NULL ? NULL : FindResourceNode 
>> (Device, IoNode));
>> +      ChildMem32Node  = (Mem32Node  == NULL ? NULL : FindResourceNode 
>> (Device, Mem32Node));
>> +      ChildPMem32Node = (PMem32Node == NULL ? NULL : FindResourceNode 
>> (Device, PMem32Node));
>> +      ChildMem64Node  = (Mem64Node  == NULL ? NULL : FindResourceNode 
>> (Device, Mem64Node));
>> +      ChildPMem64Node = (PMem64Node == NULL ? NULL : FindResourceNode 
>> (Device, PMem64Node));
>> 
>> -      DumpResourceMap (Device, ChildResources, ChildResourceCount);
>> -      FreePool (ChildResources);
>> +      DumpResourceMap (
>> +        Device,
>> +        ChildIoNode,
>> +        ChildMem32Node,
>> +        ChildPMem32Node,
>> +        ChildMem64Node,
>> +        ChildPMem64Node
>> +        );
>>    }
>>  }
>> }
>> @@ -800,11 +807,11 @@
>>    // Create the entire system resource map from the information collected by
>>    // enumerator. Several resource tree was created
>>    //
>> -    FindResourceNode (RootBridgeDev, &IoPool, &IoBridge);
>> -    FindResourceNode (RootBridgeDev, &Mem32Pool, &Mem32Bridge);
>> -    FindResourceNode (RootBridgeDev, &PMem32Pool, &PMem32Bridge);
>> -    FindResourceNode (RootBridgeDev, &Mem64Pool, &Mem64Bridge);
>> -    FindResourceNode (RootBridgeDev, &PMem64Pool, &PMem64Bridge);
>> +    IoBridge     = FindResourceNode (RootBridgeDev, &IoPool);
>> +    Mem32Bridge  = FindResourceNode (RootBridgeDev, &Mem32Pool);
>> +    PMem32Bridge = FindResourceNode (RootBridgeDev, &PMem32Pool);
>> +    Mem64Bridge  = FindResourceNode (RootBridgeDev, &Mem64Pool);
>> +    PMem64Bridge = FindResourceNode (RootBridgeDev, &PMem64Pool);
>> 
>>    ASSERT (IoBridge     != NULL);
>>    ASSERT (Mem32Bridge  != NULL);
>> @@ -862,13 +869,14 @@
>>    // Dump the resource map for current root bridge
>>    //
>>    DEBUG_CODE (
>> -      PCI_RESOURCE_NODE *Resources[5];
>> -      Resources[0] = IoBridge;
>> -      Resources[1] = Mem32Bridge;
>> -      Resources[2] = PMem32Bridge;
>> -      Resources[3] = Mem64Bridge;
>> -      Resources[4] = PMem64Bridge;
>> -      DumpResourceMap (RootBridgeDev, Resources, sizeof (Resources) / 
>> sizeof (Resources[0]));
>> +      DumpResourceMap (
>> +        RootBridgeDev,
>> +        IoBridge,
>> +        Mem32Bridge,
>> +        PMem32Bridge,
>> +        Mem64Bridge,
>> +        PMem64Bridge
>> +        );
>>    );
>> 
>>    FreePool (AcpiConfig);
>> @@ -976,8 +984,7 @@
>>  UINT8                             Device;
>>  UINT8                             Func;
>>  UINT64                            Address;
>> -  UINT8                             SecondBus;
>> -  UINT8                             PaddedSubBus;
>> +  UINTN                             SecondBus;
>>  UINT16                            Register;
>>  UINTN                             HpIndex;
>>  PCI_IO_DEVICE                     *PciDevice;
>> @@ -1211,7 +1218,7 @@
>> 
>>          Status = PciScanBus (
>>                    PciDevice,
>> -                    SecondBus,
>> +                    (UINT8) (SecondBus),
>>                    SubBusNumber,
>>                    PaddedBusRange
>>                    );
>> @@ -1227,16 +1234,12 @@
>>          if ((Attributes == EfiPaddingPciRootBridge) &&
>>              (State & EFI_HPC_STATE_ENABLED) != 0    &&
>>              (State & EFI_HPC_STATE_INITIALIZED) != 0) {
>> -            *PaddedBusRange = (UINT8) ((UINT8) (BusRange) + 
>> *PaddedBusRange);
>> +            *PaddedBusRange = (UINT8) ((UINT8) (BusRange) +*PaddedBusRange);
>>          } else {
>> -            //
>> -            // Reserve the larger one between the actual occupied bus 
>> number and padded bus number
>> -            //
>> -            Status = PciAllocateBusNumber (PciDevice, StartBusNumber, 
>> (UINT8) (BusRange), &PaddedSubBus);
>> +            Status = PciAllocateBusNumber (PciDevice, *SubBusNumber, 
>> (UINT8) (BusRange), SubBusNumber);
>>            if (EFI_ERROR (Status)) {
>>              return Status;
>>            }
>> -            *SubBusNumber = MAX (PaddedSubBus, *SubBusNumber);
>>          }
>>        }
>> 
>> 
>> Modified: trunk/edk2/MdeModulePkg/Bus/Pci/PciBusDxe/PciResourceSupport.c
>> ===================================================================
>> --- trunk/edk2/MdeModulePkg/Bus/Pci/PciBusDxe/PciResourceSupport.c   
>> 2015-11-03 02:06:57 UTC (rev 18716)
>> +++ trunk/edk2/MdeModulePkg/Bus/Pci/PciBusDxe/PciResourceSupport.c   
>> 2015-11-03 02:33:05 UTC (rev 18717)
>> @@ -196,7 +196,6 @@
>>  PCI_RESOURCE_NODE       *Node;
>>  UINT64                  Offset;
>>  EFI_PCI_PLATFORM_POLICY PciPolicy;
>> -  UINT64                  PaddingAperture;
>> 
>>  if (!mPolicyDetermined) {
>>    //
>> @@ -229,27 +228,21 @@
>>    mPolicyDetermined = TRUE;
>>  }
>> 
>> -  Aperture        = 0;
>> -  PaddingAperture = 0;
>> +  Aperture = 0;
>> 
>>  if (Bridge == NULL) {
>>    return ;
>>  }
>> 
>> +  CurrentLink = Bridge->ChildList.ForwardLink;
>> +
>>  //
>>  // Assume the bridge is aligned
>>  //
>> -  for ( CurrentLink = GetFirstNode (&Bridge->ChildList)
>> -      ; !IsNull (&Bridge->ChildList, CurrentLink)
>> -      ; CurrentLink = GetNextNode (&Bridge->ChildList, CurrentLink)
>> -      ) {
>> +  while (CurrentLink != &Bridge->ChildList) {
>> 
>>    Node = RESOURCE_NODE_FROM_LINK (CurrentLink);
>> -    if (Node->ResourceUsage == PciResUsagePadding) {
>> -      ASSERT (PaddingAperture == 0);
>> -      PaddingAperture = Node->Length;
>> -      continue;
>> -    }
>> +
>>    //
>>    // Consider the aperture alignment
>>    //
>> @@ -300,10 +293,13 @@
>>    // Increment aperture by the length of node
>>    //
>>    Aperture += Node->Length;
>> +
>> +    CurrentLink = CurrentLink->ForwardLink;
>>  }
>> 
>>  //
>> -  // Adjust the aperture with the bridge's alignment
>> +  // At last, adjust the aperture with the bridge's
>> +  // alignment
>>  //
>>  Offset = Aperture & (Bridge->Alignment);
>> 
>> @@ -323,12 +319,6 @@
>>      Bridge->Alignment = Node->Alignment;
>>    }
>>  }
>> -
>> -  //
>> -  // Hotplug controller needs padding resources.
>> -  // Use the larger one between the padding resource and actual occupied 
>> resource.
>> -  //
>> -  Bridge->Length = MAX (Bridge->Length, PaddingAperture);
>> }
>> 
>> /**
>> @@ -346,11 +336,10 @@
>>  UINT64            Aperture;
>>  LIST_ENTRY        *CurrentLink;
>>  PCI_RESOURCE_NODE *Node;
>> -  UINT64            PaddingAperture;
>> +
>>  UINT64            Offset;
>> 
>> -  Aperture        = 0;
>> -  PaddingAperture = 0;
>> +  Aperture = 0;
>> 
>>  if (Bridge == NULL) {
>>    return ;
>> @@ -362,20 +351,14 @@
>>    return ;
>>  }
>> 
>> +  CurrentLink = Bridge->ChildList.ForwardLink;
>> +
>>  //
>>  // Assume the bridge is aligned
>>  //
>> -  for ( CurrentLink = GetFirstNode (&Bridge->ChildList)
>> -      ; !IsNull (&Bridge->ChildList, CurrentLink)
>> -      ; CurrentLink = GetNextNode (&Bridge->ChildList, CurrentLink)
>> -      ) {
>> +  while (CurrentLink != &Bridge->ChildList) {
>> 
>>    Node = RESOURCE_NODE_FROM_LINK (CurrentLink);
>> -    if (Node->ResourceUsage == PciResUsagePadding) {
>> -      ASSERT (PaddingAperture == 0);
>> -      PaddingAperture = Node->Length;
>> -      continue;
>> -    }
>> 
>>    //
>>    // Apply padding resource if available
>> @@ -398,6 +381,11 @@
>>    // Increment aperture by the length of node
>>    //
>>    Aperture += Node->Length;
>> +
>> +    //
>> +    // Consider the aperture alignment
>> +    //
>> +    CurrentLink = CurrentLink->ForwardLink;
>>  }
>> 
>>  //
>> @@ -419,7 +407,7 @@
>>  }
>> 
>>  //
>> -  // Adjust the bridge's alignment to the first child's alignment
>> +  // At last, adjust the bridge's alignment to the first child's alignment
>>  // if the bridge has at least one child
>>  //
>>  CurrentLink = Bridge->ChildList.ForwardLink;
>> @@ -429,12 +417,6 @@
>>      Bridge->Alignment = Node->Alignment;
>>    }
>>  }
>> -
>> -  //
>> -  // Hotplug controller needs padding resources.
>> -  // Use the larger one between the padding resource and actual occupied 
>> resource.
>> -  //
>> -  Bridge->Length = MAX (Bridge->Length, PaddingAperture);
>> }
>> 
>> /**
>> 
>> 
>> ------------------------------------------------------------------------------
>> _______________________________________________
>> edk2-commits mailing list
>> [email protected]
>> https://lists.sourceforge.net/lists/listinfo/edk2-commits
> 
> 
> ------------------------------------------------------------------------------
> _______________________________________________
> edk2-commits mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/edk2-commits


------------------------------------------------------------------------------
_______________________________________________
edk2-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-commits

Reply via email to