[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v5 10/14] hw/acpi/aml-build: Improve scalability of PPTT generati
From: |
Yanan Wang |
Subject: |
[PATCH v5 10/14] hw/acpi/aml-build: Improve scalability of PPTT generation |
Date: |
Tue, 28 Dec 2021 17:22:17 +0800 |
Currently we generate a PPTT table of n-level processor hierarchy
with n-level loops in build_pptt(). It works fine as now there are
only three CPU topology parameters. But the code may become less
scalable with the processor hierarchy levels increasing.
This patch only improves the scalability of build_pptt by reducing
the loops, and intends to make no functional change.
Signed-off-by: Yanan Wang <wangyanan55@huawei.com>
---
hw/acpi/aml-build.c | 50 +++++++++++++++++++++++++++++----------------
1 file changed, 32 insertions(+), 18 deletions(-)
diff --git a/hw/acpi/aml-build.c b/hw/acpi/aml-build.c
index b3b3310df3..be3851be36 100644
--- a/hw/acpi/aml-build.c
+++ b/hw/acpi/aml-build.c
@@ -2001,7 +2001,10 @@ static void build_processor_hierarchy_node(GArray *tbl,
uint32_t flags,
void build_pptt(GArray *table_data, BIOSLinker *linker, MachineState *ms,
const char *oem_id, const char *oem_table_id)
{
- int pptt_start = table_data->len;
+ GQueue *list = g_queue_new();
+ guint pptt_start = table_data->len;
+ guint father_offset;
+ guint length, i;
int uid = 0;
int socket;
AcpiTable table = { .sig = "PPTT", .rev = 2,
@@ -2010,9 +2013,8 @@ void build_pptt(GArray *table_data, BIOSLinker *linker,
MachineState *ms,
acpi_table_begin(&table, table_data);
for (socket = 0; socket < ms->smp.sockets; socket++) {
- uint32_t socket_offset = table_data->len - pptt_start;
- int core;
-
+ g_queue_push_tail(list,
+ GUINT_TO_POINTER(table_data->len - pptt_start));
build_processor_hierarchy_node(
table_data,
/*
@@ -2021,35 +2023,47 @@ void build_pptt(GArray *table_data, BIOSLinker *linker,
MachineState *ms,
*/
(1 << 0),
0, socket, NULL, 0);
+ }
- for (core = 0; core < ms->smp.cores; core++) {
- uint32_t core_offset = table_data->len - pptt_start;
- int thread;
+ length = g_queue_get_length(list);
+ for (i = 0; i < length; i++) {
+ int core;
+ father_offset = GPOINTER_TO_UINT(g_queue_pop_head(list));
+ for (core = 0; core < ms->smp.cores; core++) {
if (ms->smp.threads > 1) {
+ g_queue_push_tail(list,
+ GUINT_TO_POINTER(table_data->len - pptt_start));
build_processor_hierarchy_node(
table_data,
(0 << 0), /* not a physical package */
- socket_offset, core, NULL, 0);
-
- for (thread = 0; thread < ms->smp.threads; thread++) {
- build_processor_hierarchy_node(
- table_data,
- (1 << 1) | /* ACPI Processor ID valid */
- (1 << 2) | /* Processor is a Thread */
- (1 << 3), /* Node is a Leaf */
- core_offset, uid++, NULL, 0);
- }
+ father_offset, core, NULL, 0);
} else {
build_processor_hierarchy_node(
table_data,
(1 << 1) | /* ACPI Processor ID valid */
(1 << 3), /* Node is a Leaf */
- socket_offset, uid++, NULL, 0);
+ father_offset, uid++, NULL, 0);
}
}
}
+ length = g_queue_get_length(list);
+ for (i = 0; i < length; i++) {
+ int thread;
+
+ father_offset = GPOINTER_TO_UINT(g_queue_pop_head(list));
+ for (thread = 0; thread < ms->smp.threads; thread++) {
+ build_processor_hierarchy_node(
+ table_data,
+ (1 << 1) | /* ACPI Processor ID valid */
+ (1 << 2) | /* Processor is a Thread */
+ (1 << 3), /* Node is a Leaf */
+ father_offset, uid++, NULL, 0);
+ }
+ }
+
+ g_queue_free(list);
acpi_table_end(linker, &table);
}
--
2.27.0
- Re: [PATCH v5 02/14] hw/core/machine: Introduce CPU cluster topology support, (continued)
[PATCH v5 06/14] tests/unit/test-smp-parse: Keep default MIN/MAX CPUs in machine_base_class_init, Yanan Wang, 2021/12/28
[PATCH v5 05/14] tests/unit/test-smp-parse: No need to explicitly zero MachineClass members, Yanan Wang, 2021/12/28
[PATCH v5 08/14] hw/arm/virt: Support clusters on ARM virt machines, Yanan Wang, 2021/12/28
[PATCH v5 07/14] MAINTAINERS: Self-recommended as reviewer of "Machine core", Yanan Wang, 2021/12/28
[PATCH v5 09/14] hw/arm/virt: Support cluster level in DT cpu-map, Yanan Wang, 2021/12/28
[PATCH v5 10/14] hw/acpi/aml-build: Improve scalability of PPTT generation,
Yanan Wang <=
[PATCH v5 11/14] hw/arm/virt-acpi-build: Make an ARM specific PPTT generator, Yanan Wang, 2021/12/28
[PATCH v5 12/14] tests/acpi/bios-tables-test: Allow changes to virt/PPTT file, Yanan Wang, 2021/12/28
[PATCH v5 13/14] hw/arm/virt-acpi-build: Support cluster level in PPTT generation, Yanan Wang, 2021/12/28
[PATCH v5 14/14] tests/acpi/bios-table-test: Update expected virt/PPTT file, Yanan Wang, 2021/12/28
Re: [PATCH v5 00/14] ARM virt: Introduce CPU clusters topology support, Philippe Mathieu-Daudé, 2021/12/31