On 10/11/2014 17:20, Igor Mammedov wrote: > If QEMU is started with -numa ... Windows only notices that > CPU has been hot-added but it will not online such CPUs. > > It's caused by the fact that possible CPUs are flagged as > not enabled in SRAT and Windows honoring that information > doesn't use corresponding CPU. > > ACPI 5.0 Spec regarding to flag says: > " > Table 5-47 Local APIC Flags > ... > Enabled: if zero, this processor is unusable, and the operating system > support will not attempt to use it. > " > > Fix QEMU to adhere to spec and mark possible CPUs as enabled > in SRAT. > > With that Windows onlines hot-added CPUs as expected. > > Signed-off-by: Igor Mammedov <imamm...@redhat.com>
Does this need to be specific to pc-2.2? Paolo > --- > hw/i386/acpi-build.c | 11 +++-------- > 1 file changed, 3 insertions(+), 8 deletions(-) > > diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c > index 4003b6b..06499da 100644 > --- a/hw/i386/acpi-build.c > +++ b/hw/i386/acpi-build.c > @@ -1269,8 +1269,7 @@ acpi_build_srat_memory(AcpiSratMemoryAffinity *numamem, > uint64_t base, > } > > static void > -build_srat(GArray *table_data, GArray *linker, > - AcpiCpuInfo *cpu, PcGuestInfo *guest_info) > +build_srat(GArray *table_data, GArray *linker, PcGuestInfo *guest_info) > { > AcpiSystemResourceAffinityTable *srat; > AcpiSratProcessorAffinity *core; > @@ -1300,11 +1299,7 @@ build_srat(GArray *table_data, GArray *linker, > core->proximity_lo = curnode; > memset(core->proximity_hi, 0, 3); > core->local_sapic_eid = 0; > - if (test_bit(i, cpu->found_cpus)) { > - core->flags = cpu_to_le32(1); > - } else { > - core->flags = cpu_to_le32(0); > - } > + core->flags = cpu_to_le32(1); > } > > > @@ -1622,7 +1617,7 @@ void acpi_build(PcGuestInfo *guest_info, > AcpiBuildTables *tables) > } > if (guest_info->numa_nodes) { > acpi_add_table(table_offsets, tables->table_data); > - build_srat(tables->table_data, tables->linker, &cpu, guest_info); > + build_srat(tables->table_data, tables->linker, guest_info); > } > if (acpi_get_mcfg(&mcfg)) { > acpi_add_table(table_offsets, tables->table_data); >