Current code will generate duplicate UID if there are nested clusters

in the topology.



Signed-off-by: Jeff Brasen <jbra...@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 (#92487): https://edk2.groups.io/g/devel/message/92487
Mute This Topic: https://groups.io/mt/93067950/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to