Add a Processor Hierarchy Node of cluster level between core level and socket level to ARM PPTT table.
Reviewed-by: Andrew Jones <drjo...@redhat.com> Signed-off-by: Yanan Wang <wangyana...@huawei.com> --- hw/arm/virt-acpi-build.c | 45 ++++++++++++++++++++++++---------------- 1 file changed, 27 insertions(+), 18 deletions(-) diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c index b03d57745a..4d09b51bb0 100644 --- a/hw/arm/virt-acpi-build.c +++ b/hw/arm/virt-acpi-build.c @@ -447,34 +447,43 @@ static void build_pptt(GArray *table_data, BIOSLinker *linker, for (socket = 0; socket < ms->smp.sockets; socket++) { uint32_t socket_offset = table_data->len - pptt_start; - int core; + int cluster; build_processor_hierarchy_node( table_data, (1 << 0), /* ACPI 6.2 - Physical package */ 0, socket, NULL, 0); - for (core = 0; core < ms->smp.cores; core++) { - uint32_t core_offset = table_data->len - pptt_start; - int thread; - - if (ms->smp.threads <= 1) { - build_processor_hierarchy_node( - table_data, - (1 << 1) | /* ACPI 6.2 - ACPI Processor ID valid */ - (1 << 3), /* ACPI 6.3 - Node is a Leaf */ - socket_offset, uid++, NULL, 0); - } else { - build_processor_hierarchy_node(table_data, 0, socket_offset, - core, NULL, 0); - - for (thread = 0; thread < ms->smp.threads; thread++) { + for (cluster = 0; cluster < vms->smp_clusters; cluster++) { + uint32_t cluster_offset = table_data->len - pptt_start; + int core; + + build_processor_hierarchy_node(table_data, 0, socket_offset, + cluster, NULL, 0); + + for (core = 0; core < ms->smp.cores; core++) { + uint32_t core_offset = table_data->len - pptt_start; + int thread; + + if (ms->smp.threads <= 1) { build_processor_hierarchy_node( table_data, (1 << 1) | /* ACPI 6.2 - ACPI Processor ID valid */ - (1 << 2) | /* ACPI 6.3 - Processor is a Thread */ (1 << 3), /* ACPI 6.3 - Node is a Leaf */ - core_offset, uid++, NULL, 0); + cluster_offset, uid++, NULL, 0); + } else { + build_processor_hierarchy_node(table_data, 0, + cluster_offset, + core, NULL, 0); + + for (thread = 0; thread < ms->smp.threads; thread++) { + build_processor_hierarchy_node( + table_data, + (1 << 1) | /* ACPI 6.2 - ACPI Processor ID valid */ + (1 << 2) | /* ACPI 6.3 - Processor is a Thread */ + (1 << 3), /* ACPI 6.3 - Node is a Leaf */ + core_offset, uid++, NULL, 0); + } } } } -- 2.19.1