[edk2-devel] [PATCH] DynamicTablesPkg: Correct cluster index

Ard Biesheuvel ardb at kernel.org
Wed Aug 17 07:01:21 UTC 2022


On Tue, 16 Aug 2022 at 22:46, Jeff Brasen <jbrasen at nvidia.com> wrote:
>
> Current code will generate duplicate UID if there are nested clusters
> in the topology.
>

What is a nested cluster?

> Signed-off-by: Jeff Brasen <jbrasen at nvidia.com>
> ---
>  .../SsdtCpuTopologyGenerator.c                | 22 ++++++++++++-------
>  1 file changed, 14 insertions(+), 8 deletions(-)
>
> diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/SsdtCpuTopologyGenerator.c b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/SsdtCpuTopologyGenerator.c
> index 3266d8dd98..9295117f1f 100644
> --- a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/SsdtCpuTopologyGenerator.c
> +++ b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/SsdtCpuTopologyGenerator.c
> @@ -706,6 +706,8 @@ CreateAmlCluster (
>                                   Cannot be CM_NULL_TOKEN.
>    @param [in] ParentNode         Parent node to attach the created
>                                   node to.
> +  @param [in,out] ClusterIndex   Pointer to the current cluster index
> +                                 to be used as UID.
>
>    @retval EFI_SUCCESS             Success.
>    @retval EFI_INVALID_PARAMETER   Invalid parameter.
> @@ -718,13 +720,13 @@ CreateAmlCpuTopologyTree (
>    IN        ACPI_CPU_TOPOLOGY_GENERATOR                   *Generator,
>    IN  CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL  *CONST  CfgMgrProtocol,
>    IN        CM_OBJECT_TOKEN                               NodeToken,
> -  IN        AML_NODE_HANDLE                               ParentNode
> +  IN        AML_NODE_HANDLE                               ParentNode,
> +  IN OUT    UINT32                                        *ClusterIndex
>    )
>  {
>    EFI_STATUS              Status;
>    UINT32                  Index;
>    UINT32                  CpuIndex;
> -  UINT32                  ClusterIndex;
>    AML_OBJECT_NODE_HANDLE  ClusterNode;
>
>    ASSERT (Generator != NULL);
> @@ -733,9 +735,9 @@ CreateAmlCpuTopologyTree (
>    ASSERT (CfgMgrProtocol != NULL);
>    ASSERT (NodeToken != CM_NULL_TOKEN);
>    ASSERT (ParentNode != NULL);
> +  ASSERT (ClusterIndex != NULL);
>
> -  CpuIndex     = 0;
> -  ClusterIndex = 0;
> +  CpuIndex = 0;
>
>    for (Index = 0; Index < Generator->ProcNodeCount; Index++) {
>      // Find the children of the CM_ARM_PROC_HIERARCHY_INFO
> @@ -790,7 +792,7 @@ CreateAmlCpuTopologyTree (
>                     CfgMgrProtocol,
>                     ParentNode,
>                     &Generator->ProcNodeList[Index],
> -                   ClusterIndex,
> +                   *ClusterIndex,
>                     &ClusterNode
>                     );
>          if (EFI_ERROR (Status)) {
> @@ -800,7 +802,7 @@ CreateAmlCpuTopologyTree (
>
>          // Nodes must have a unique name in the ASL namespace.
>          // Reset the Cpu index whenever we create a new Cluster.
> -        ClusterIndex++;
> +        (*ClusterIndex)++;
>          CpuIndex = 0;
>
>          // Recursively continue creating an AML tree.
> @@ -808,7 +810,8 @@ CreateAmlCpuTopologyTree (
>                     Generator,
>                     CfgMgrProtocol,
>                     Generator->ProcNodeList[Index].Token,
> -                   ClusterNode
> +                   ClusterNode,
> +                   ClusterIndex
>                     );
>          if (EFI_ERROR (Status)) {
>            ASSERT (0);
> @@ -845,6 +848,7 @@ CreateTopologyFromProcHierarchy (
>    EFI_STATUS  Status;
>    UINT32      Index;
>    UINT32      TopLevelProcNodeIndex;
> +  UINT32      ClusterIndex;
>
>    ASSERT (Generator != NULL);
>    ASSERT (Generator->ProcNodeCount != 0);
> @@ -853,6 +857,7 @@ CreateTopologyFromProcHierarchy (
>    ASSERT (ScopeNode != NULL);
>
>    TopLevelProcNodeIndex = MAX_UINT32;
> +  ClusterIndex          = 0;
>
>    Status = TokenTableInitialize (Generator, Generator->ProcNodeCount);
>    if (EFI_ERROR (Status)) {
> @@ -887,7 +892,8 @@ CreateTopologyFromProcHierarchy (
>               Generator,
>               CfgMgrProtocol,
>               Generator->ProcNodeList[TopLevelProcNodeIndex].Token,
> -             ScopeNode
> +             ScopeNode,
> +             &ClusterIndex
>               );
>    if (EFI_ERROR (Status)) {
>      ASSERT (0);
> --
> 2.25.1
>


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#92502): https://edk2.groups.io/g/devel/message/92502
Mute This Topic: https://groups.io/mt/93067950/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-




More information about the edk2-devel-archive mailing list