[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