mirror of https://github.com/xemu-project/xemu.git
acpi: arm/x86: build_srat: use acpi_table_begin()/acpi_table_end() instead of build_header()
it replaces error-prone pointer arithmetic for build_header() API, with 2 calls to start and finish table creation, which hides offsets magic from API user. While at it switch to build_append_int_noprefix() to build table entries (which also removes some manual offset calculations) Signed-off-by: Igor Mammedov <imammedo@redhat.com> Reviewed-by: Eric Auger <eric.auger@redhat.com> Message-Id: <20210924122802.1455362-17-imammedo@redhat.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
57cb8cfbf2
commit
255bf20f2e
|
@ -477,18 +477,19 @@ build_spcr(GArray *table_data, BIOSLinker *linker, VirtMachineState *vms)
|
|||
static void
|
||||
build_srat(GArray *table_data, BIOSLinker *linker, VirtMachineState *vms)
|
||||
{
|
||||
AcpiSystemResourceAffinityTable *srat;
|
||||
AcpiSratProcessorGiccAffinity *core;
|
||||
AcpiSratMemoryAffinity *numamem;
|
||||
int i, srat_start;
|
||||
int i;
|
||||
uint64_t mem_base;
|
||||
MachineClass *mc = MACHINE_GET_CLASS(vms);
|
||||
MachineState *ms = MACHINE(vms);
|
||||
const CPUArchIdList *cpu_list = mc->possible_cpu_arch_ids(ms);
|
||||
AcpiTable table = { .sig = "SRAT", .rev = 3, .oem_id = vms->oem_id,
|
||||
.oem_table_id = vms->oem_table_id };
|
||||
|
||||
srat_start = table_data->len;
|
||||
srat = acpi_data_push(table_data, sizeof(*srat));
|
||||
srat->reserved1 = cpu_to_le32(1);
|
||||
acpi_table_begin(&table, table_data);
|
||||
build_append_int_noprefix(table_data, 1, 4); /* Reserved */
|
||||
build_append_int_noprefix(table_data, 0, 8); /* Reserved */
|
||||
|
||||
for (i = 0; i < cpu_list->len; ++i) {
|
||||
core = acpi_data_push(table_data, sizeof(*core));
|
||||
|
@ -522,9 +523,7 @@ build_srat(GArray *table_data, BIOSLinker *linker, VirtMachineState *vms)
|
|||
MEM_AFFINITY_HOTPLUGGABLE | MEM_AFFINITY_ENABLED);
|
||||
}
|
||||
|
||||
build_header(linker, table_data, (void *)(table_data->data + srat_start),
|
||||
"SRAT", table_data->len - srat_start, 3, vms->oem_id,
|
||||
vms->oem_table_id);
|
||||
acpi_table_end(linker, &table);
|
||||
}
|
||||
|
||||
/* GTDT */
|
||||
|
|
|
@ -1942,11 +1942,10 @@ build_tpm_tcpa(GArray *table_data, BIOSLinker *linker, GArray *tcpalog,
|
|||
static void
|
||||
build_srat(GArray *table_data, BIOSLinker *linker, MachineState *machine)
|
||||
{
|
||||
AcpiSystemResourceAffinityTable *srat;
|
||||
AcpiSratMemoryAffinity *numamem;
|
||||
|
||||
int i;
|
||||
int srat_start, numa_start, slots;
|
||||
int numa_start, slots;
|
||||
uint64_t mem_len, mem_base, next_base;
|
||||
MachineClass *mc = MACHINE_GET_CLASS(machine);
|
||||
X86MachineState *x86ms = X86_MACHINE(machine);
|
||||
|
@ -1957,11 +1956,12 @@ build_srat(GArray *table_data, BIOSLinker *linker, MachineState *machine)
|
|||
ram_addr_t hotpluggable_address_space_size =
|
||||
object_property_get_int(OBJECT(pcms), PC_MACHINE_DEVMEM_REGION_SIZE,
|
||||
NULL);
|
||||
AcpiTable table = { .sig = "SRAT", .rev = 1, .oem_id = x86ms->oem_id,
|
||||
.oem_table_id = x86ms->oem_table_id };
|
||||
|
||||
srat_start = table_data->len;
|
||||
|
||||
srat = acpi_data_push(table_data, sizeof *srat);
|
||||
srat->reserved1 = cpu_to_le32(1);
|
||||
acpi_table_begin(&table, table_data);
|
||||
build_append_int_noprefix(table_data, 1, 4); /* Reserved */
|
||||
build_append_int_noprefix(table_data, 0, 8); /* Reserved */
|
||||
|
||||
for (i = 0; i < apic_ids->len; i++) {
|
||||
int node_id = apic_ids->cpus[i].props.node_id;
|
||||
|
@ -2067,11 +2067,7 @@ build_srat(GArray *table_data, BIOSLinker *linker, MachineState *machine)
|
|||
MEM_AFFINITY_HOTPLUGGABLE | MEM_AFFINITY_ENABLED);
|
||||
}
|
||||
|
||||
build_header(linker, table_data,
|
||||
(void *)(table_data->data + srat_start),
|
||||
"SRAT",
|
||||
table_data->len - srat_start, 1, x86ms->oem_id,
|
||||
x86ms->oem_table_id);
|
||||
acpi_table_end(linker, &table);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -358,17 +358,6 @@ struct AcpiGenericTimerTable {
|
|||
} QEMU_PACKED;
|
||||
typedef struct AcpiGenericTimerTable AcpiGenericTimerTable;
|
||||
|
||||
/*
|
||||
* SRAT (NUMA topology description) table
|
||||
*/
|
||||
|
||||
struct AcpiSystemResourceAffinityTable {
|
||||
ACPI_TABLE_HEADER_DEF
|
||||
uint32_t reserved1;
|
||||
uint32_t reserved2[2];
|
||||
} QEMU_PACKED;
|
||||
typedef struct AcpiSystemResourceAffinityTable AcpiSystemResourceAffinityTable;
|
||||
|
||||
#define ACPI_SRAT_PROCESSOR_APIC 0
|
||||
#define ACPI_SRAT_MEMORY 1
|
||||
#define ACPI_SRAT_PROCESSOR_x2APIC 2
|
||||
|
|
Loading…
Reference in New Issue