Commit 5eff33a2 authored by Igor Mammedov's avatar Igor Mammedov Committed by Eduardo Habkost
Browse files

pc: acpi: x2APIC support for SRAT table

parent e2c95939
Loading
Loading
Loading
Loading
+24 −10
Original line number Diff line number Diff line
@@ -2421,7 +2421,6 @@ static void
build_srat(GArray *table_data, BIOSLinker *linker, MachineState *machine)
{
    AcpiSystemResourceAffinityTable *srat;
    AcpiSratProcessorAffinity *core;
    AcpiSratMemoryAffinity *numamem;

    int i;
@@ -2441,7 +2440,10 @@ build_srat(GArray *table_data, BIOSLinker *linker, MachineState *machine)

    for (i = 0; i < apic_ids->len; i++) {
        int j = numa_get_node_for_cpu(i);
        int apic_id = apic_ids->cpus[i].arch_id;
        uint32_t apic_id = apic_ids->cpus[i].arch_id;

        if (apic_id < 255) {
            AcpiSratProcessorAffinity *core;

            core = acpi_data_push(table_data, sizeof *core);
            core->type = ACPI_SRAT_PROCESSOR_APIC;
@@ -2453,6 +2455,18 @@ build_srat(GArray *table_data, BIOSLinker *linker, MachineState *machine)
            memset(core->proximity_hi, 0, 3);
            core->local_sapic_eid = 0;
            core->flags = cpu_to_le32(1);
        } else {
            AcpiSratProcessorX2ApicAffinity *core;

            core = acpi_data_push(table_data, sizeof *core);
            core->type = ACPI_SRAT_PROCESSOR_x2APIC;
            core->length = sizeof(*core);
            core->x2apic_id = cpu_to_le32(apic_id);
            if (j < nb_numa_nodes) {
                core->proximity_domain = cpu_to_le32(j);
            }
            core->flags = cpu_to_le32(1);
        }
    }


+11 −0
Original line number Diff line number Diff line
@@ -503,6 +503,17 @@ struct AcpiSratProcessorAffinity
} QEMU_PACKED;
typedef struct AcpiSratProcessorAffinity AcpiSratProcessorAffinity;

struct AcpiSratProcessorX2ApicAffinity {
    ACPI_SUB_HEADER_DEF
    uint16_t    reserved;
    uint32_t    proximity_domain;
    uint32_t    x2apic_id;
    uint32_t    flags;
    uint32_t    clk_domain;
    uint32_t    reserved2;
} QEMU_PACKED;
typedef struct AcpiSratProcessorX2ApicAffinity AcpiSratProcessorX2ApicAffinity;

struct AcpiSratMemoryAffinity
{
    ACPI_SUB_HEADER_DEF