From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:42328) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XszMZ-0003Aq-Lj for qemu-devel@nongnu.org; Mon, 24 Nov 2014 14:32:01 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XszMT-0001XP-I0 for qemu-devel@nongnu.org; Mon, 24 Nov 2014 14:31:55 -0500 Received: from mx1.redhat.com ([209.132.183.28]:35326) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XszMT-0001XF-7i for qemu-devel@nongnu.org; Mon, 24 Nov 2014 14:31:49 -0500 Date: Mon, 24 Nov 2014 21:31:40 +0200 From: "Michael S. Tsirkin" Message-ID: <1416855830-31740-16-git-send-email-mst@redhat.com> References: <1416855830-31740-1-git-send-email-mst@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1416855830-31740-1-git-send-email-mst@redhat.com> Subject: [Qemu-devel] [PULL v2 15/15] 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: Peter Maydell , Richard Henderson , Paolo Bonzini , Anthony Liguori , Igor Mammedov From: Igor Mammedov 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 Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin --- 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 92a36e3..b37a397 100644 --- a/hw/i386/acpi-build.c +++ b/hw/i386/acpi-build.c @@ -1270,8 +1270,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; @@ -1301,11 +1300,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); } @@ -1623,7 +1618,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); -- MST