From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:35493) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Xnril-0007ib-Tn for qemu-devel@nongnu.org; Mon, 10 Nov 2014 11:21:46 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Xnrif-0002ve-Nk for qemu-devel@nongnu.org; Mon, 10 Nov 2014 11:21:39 -0500 Received: from mx1.redhat.com ([209.132.183.28]:33264) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Xnrif-0002vO-Fl for qemu-devel@nongnu.org; Mon, 10 Nov 2014 11:21:33 -0500 Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id sAAGLWMk015069 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL) for ; Mon, 10 Nov 2014 11:21:32 -0500 From: Igor Mammedov Date: Mon, 10 Nov 2014 16:20:50 +0000 Message-Id: <1415636450-18674-1-git-send-email-imammedo@redhat.com> Subject: [Qemu-devel] [PATCH for-2.2] pc: acpi: mark all possible CPUs as enabled in SRAT List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: pbonzini@redhat.com, mst@redhat.com 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 --- 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); -- 1.8.3.1