mirror of
https://gitlab.com/qemu-project/qemu
synced 2024-11-02 21:32:52 +00:00
pc: ACPI BIOS: use enum for defining memory affinity flags
replace magic numbers with enum describing Flags field of memory affinity in SRAT table. MemoryAffinityFlags enum will define flags decribed by: ACPI spec 5.0, "5.2.16.2 Memory Affinity Structure", "Table 5-69 Flags - Memory Affinity Structure" Signed-off-by: Igor Mammedov <imammedo@redhat.com> Acked-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
d5747cace7
commit
04ed3ea892
1 changed files with 16 additions and 7 deletions
|
@ -1132,15 +1132,22 @@ build_hpet(GArray *table_data, GArray *linker)
|
|||
(void *)hpet, "HPET", sizeof(*hpet), 1);
|
||||
}
|
||||
|
||||
typedef enum {
|
||||
MEM_AFFINITY_NOFLAGS = 0,
|
||||
MEM_AFFINITY_ENABLED = (1 << 0),
|
||||
MEM_AFFINITY_HOTPLUGGABLE = (1 << 1),
|
||||
MEM_AFFINITY_NON_VOLATILE = (1 << 2),
|
||||
} MemoryAffinityFlags;
|
||||
|
||||
static void
|
||||
acpi_build_srat_memory(AcpiSratMemoryAffinity *numamem,
|
||||
uint64_t base, uint64_t len, int node, int enabled)
|
||||
acpi_build_srat_memory(AcpiSratMemoryAffinity *numamem, uint64_t base,
|
||||
uint64_t len, int node, MemoryAffinityFlags flags)
|
||||
{
|
||||
numamem->type = ACPI_SRAT_MEMORY;
|
||||
numamem->length = sizeof(*numamem);
|
||||
memset(numamem->proximity, 0, 4);
|
||||
numamem->proximity[0] = node;
|
||||
numamem->flags = cpu_to_le32(!!enabled);
|
||||
numamem->flags = cpu_to_le32(flags);
|
||||
numamem->base_addr = cpu_to_le64(base);
|
||||
numamem->range_length = cpu_to_le64(len);
|
||||
}
|
||||
|
@ -1188,7 +1195,7 @@ build_srat(GArray *table_data, GArray *linker,
|
|||
numa_start = table_data->len;
|
||||
|
||||
numamem = acpi_data_push(table_data, sizeof *numamem);
|
||||
acpi_build_srat_memory(numamem, 0, 640*1024, 0, 1);
|
||||
acpi_build_srat_memory(numamem, 0, 640*1024, 0, MEM_AFFINITY_ENABLED);
|
||||
next_base = 1024 * 1024;
|
||||
for (i = 1; i < guest_info->numa_nodes + 1; ++i) {
|
||||
mem_base = next_base;
|
||||
|
@ -1204,19 +1211,21 @@ build_srat(GArray *table_data, GArray *linker,
|
|||
mem_len -= next_base - guest_info->ram_size_below_4g;
|
||||
if (mem_len > 0) {
|
||||
numamem = acpi_data_push(table_data, sizeof *numamem);
|
||||
acpi_build_srat_memory(numamem, mem_base, mem_len, i-1, 1);
|
||||
acpi_build_srat_memory(numamem, mem_base, mem_len, i - 1,
|
||||
MEM_AFFINITY_ENABLED);
|
||||
}
|
||||
mem_base = 1ULL << 32;
|
||||
mem_len = next_base - guest_info->ram_size_below_4g;
|
||||
next_base += (1ULL << 32) - guest_info->ram_size_below_4g;
|
||||
}
|
||||
numamem = acpi_data_push(table_data, sizeof *numamem);
|
||||
acpi_build_srat_memory(numamem, mem_base, mem_len, i - 1, 1);
|
||||
acpi_build_srat_memory(numamem, mem_base, mem_len, i - 1,
|
||||
MEM_AFFINITY_ENABLED);
|
||||
}
|
||||
slots = (table_data->len - numa_start) / sizeof *numamem;
|
||||
for (; slots < guest_info->numa_nodes + 2; slots++) {
|
||||
numamem = acpi_data_push(table_data, sizeof *numamem);
|
||||
acpi_build_srat_memory(numamem, 0, 0, 0, 0);
|
||||
acpi_build_srat_memory(numamem, 0, 0, 0, MEM_AFFINITY_NOFLAGS);
|
||||
}
|
||||
|
||||
build_header(linker, table_data,
|
||||
|
|
Loading…
Reference in a new issue