From patchwork Fri Feb 5 18:07:01 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Mammedov X-Patchwork-Id: 8237881 Return-Path: X-Original-To: patchwork-qemu-devel@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id D3E84BEEE5 for ; Fri, 5 Feb 2016 18:09:19 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 3C04B20389 for ; Fri, 5 Feb 2016 18:09:19 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 7B24720395 for ; Fri, 5 Feb 2016 18:09:18 +0000 (UTC) Received: from localhost ([::1]:49786 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aRkon-0002hj-Og for patchwork-qemu-devel@patchwork.kernel.org; Fri, 05 Feb 2016 13:09:17 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:38006) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aRkms-0007my-Mf for qemu-devel@nongnu.org; Fri, 05 Feb 2016 13:07:19 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1aRkmr-0008HP-NX for qemu-devel@nongnu.org; Fri, 05 Feb 2016 13:07:18 -0500 Received: from mx1.redhat.com ([209.132.183.28]:39634) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aRkmr-0008HL-IA for qemu-devel@nongnu.org; Fri, 05 Feb 2016 13:07:17 -0500 Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (Postfix) with ESMTPS id 3757CC0C05AC; Fri, 5 Feb 2016 18:07:17 +0000 (UTC) Received: from dell-r430-03.lab.eng.brq.redhat.com (dell-r430-03.lab.eng.brq.redhat.com [10.34.112.60]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id u15I762Q026672; Fri, 5 Feb 2016 13:07:15 -0500 From: Igor Mammedov To: qemu-devel@nongnu.org Date: Fri, 5 Feb 2016 19:07:01 +0100 Message-Id: <1454695626-70225-6-git-send-email-imammedo@redhat.com> In-Reply-To: <1454695626-70225-1-git-send-email-imammedo@redhat.com> References: <1454695626-70225-1-git-send-email-imammedo@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.22 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 209.132.183.28 Cc: pbonzini@redhat.com, marcel.apfelbaum@gmail.com, ehabkost@redhat.com, afaerber@suse.de, mst@redhat.com Subject: [Qemu-devel] [PATCH v2 05/10] pc: acpi: SRAT: create only valid processor lapic entries X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org X-Spam-Status: No, score=-6.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP When APIC IDs are sparse*, in addition to valid LAPIC antries the SRAT is also filled invalid ones for non posiible APIC IDs. Fix it by asking machine for all possible APIC IDs instead of wrongly assuming that all APIC IDs in range 0..apic_id_limit are possible. * sparse lapic topology CLI: -smp x,sockets=2,cores=3,maxcpus=6 Signed-off-by: Igor Mammedov Reviewed-by: Eduardo Habkost --- hw/i386/acpi-build.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c index 4756924..de265aa 100644 --- a/hw/i386/acpi-build.c +++ b/hw/i386/acpi-build.c @@ -2410,6 +2410,8 @@ build_srat(GArray *table_data, GArray *linker, MachineState *machine) uint64_t curnode; int srat_start, numa_start, slots; uint64_t mem_len, mem_base, next_base; + MachineClass *mc = MACHINE_GET_CLASS(machine); + GArray *apic_id_list = mc->possible_cpu_arch_ids(); PCMachineState *pcms = PC_MACHINE(machine); ram_addr_t hotplugabble_address_space_size = object_property_get_int(OBJECT(pcms), PC_MACHINE_MEMHP_REGION_SIZE, @@ -2421,12 +2423,15 @@ build_srat(GArray *table_data, GArray *linker, MachineState *machine) srat->reserved1 = cpu_to_le32(1); core = (void *)(srat + 1); - for (i = 0; i < pcms->apic_id_limit; ++i) { + for (i = 0; i < apic_id_list->len; i++) { + CPUArchId id = FETCH_CPU_ARCH_ID(apic_id_list, i); + int apic_id = id.arch_id; + core = acpi_data_push(table_data, sizeof *core); core->type = ACPI_SRAT_PROCESSOR; core->length = sizeof(*core); - core->local_apic_id = i; - curnode = pcms->node_cpu[i]; + core->local_apic_id = apic_id; + curnode = pcms->node_cpu[apic_id]; core->proximity_lo = curnode; memset(core->proximity_hi, 0, 3); core->local_sapic_eid = 0; @@ -2491,6 +2496,7 @@ build_srat(GArray *table_data, GArray *linker, MachineState *machine) (void *)(table_data->data + srat_start), "SRAT", table_data->len - srat_start, 1, NULL, NULL); + g_array_free(apic_id_list, true); } static void