On Mon, 10 Nov 2014 18:40:12 +0100 Paolo Bonzini <pbonz...@redhat.com> wrote:
> > > 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? Why not, It's bug fix. But I don't care if it's merged later. > > 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); > >