From patchwork Thu Feb 13 18:16:30 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Babu Moger X-Patchwork-Id: 11380973 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 80CEB1395 for ; Thu, 13 Feb 2020 18:17:54 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 10A30206CC for ; Thu, 13 Feb 2020 18:17:54 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=amdcloud.onmicrosoft.com header.i=@amdcloud.onmicrosoft.com header.b="zbb/6A3r" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 10A30206CC Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=amd.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:57576 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j2J3h-0003Dx-4A for patchwork-qemu-devel@patchwork.kernel.org; Thu, 13 Feb 2020 13:17:53 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:39779) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j2J2V-0001F3-9b for qemu-devel@nongnu.org; Thu, 13 Feb 2020 13:16:41 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1j2J2R-0006J0-He for qemu-devel@nongnu.org; Thu, 13 Feb 2020 13:16:39 -0500 Received: from mail-bn8nam11on2046.outbound.protection.outlook.com ([40.107.236.46]:6216 helo=NAM11-BN8-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1j2J2R-00068Y-5A for qemu-devel@nongnu.org; Thu, 13 Feb 2020 13:16:35 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ez1Uid/PZuqxkVcREbshTjqM2zsDIFn7QkGHVG/pq5OBtO33IF/Xvro6qFgpr/Nvu3dmqC6fwT9aPIHopphyIxdUZgxVSN1kmeZDFw3FFSOskKlT/sxeCYjPpwM6KP9gBm37Qiiue41onLs7E86yA7zwej/xAM0BMY2RaSLUFEPQm59cc6gbW6O4CTehlpVy0hP4CPzSg+GOQK2QIJmtM0hLHVssxpUOdnokNh5rmSefBvidmasWGZxkZLUwLnMV7v8h5W49v+rftaGIrRoWn4ZoKr8vkZzsqLZMJHxo8vJjy7UONzVzleVNMG79L3ERxbVMT6BrdnEUfy4ttotPGQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=jzMci3Q5XJCGEeio/uBn0T3rZ7Gf2qCX06cUe+Ju96s=; b=lNc3J6ChcK1rlYrv+TxVezEUWOir+FQth+OE6TcCwypwRUIZTrkn135EHPnsLHCiCZ8vUZ201Kdipd48m1OYZe3Rg2KLOWUMAjBZKfRcQOnpHs0jPnzFXElPWUWDXyoSc3Euj3bCZ/80I+5vmMk1e2OUEptmalghF3Qn0GXs12BOuwxm/mrSaW//hBJKi/TudiRi8w0wWZnAU05PL/ZoBgpVfU3JudhGTLn9pr2fxiN//PZsdU/irw14gqM/yPtWjWP5eaj/rTVeozmcegN3jmpZalO6xpLkhfihi83HMFOPcAku9IM8lCq9ET9zMq5Llc7cVXTnyzUoOka267rCeA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amdcloud.onmicrosoft.com; s=selector2-amdcloud-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=jzMci3Q5XJCGEeio/uBn0T3rZ7Gf2qCX06cUe+Ju96s=; b=zbb/6A3rUx7AGjo4eoUFjUST3qHBrBzCRc9RmM1t6LxvubZvfGPPp3L/wpY7xPQxcBxhG9qKKCVPXmA4ZYkz0vMPu/f5I0P2tS2WQsKCwHid3vE6U6okuh4HpYvJMDyH+49f+yeF+DBhQavPJdPXaexdcFyawv2hY8HV3ODKDCU= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Babu.Moger@amd.com; Received: from CY4PR12MB1574.namprd12.prod.outlook.com (10.172.71.23) by CY4PR12MB1318.namprd12.prod.outlook.com (10.168.164.138) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2707.24; Thu, 13 Feb 2020 18:16:32 +0000 Received: from CY4PR12MB1574.namprd12.prod.outlook.com ([fe80::e0cc:653a:e9bc:aa8e]) by CY4PR12MB1574.namprd12.prod.outlook.com ([fe80::e0cc:653a:e9bc:aa8e%2]) with mapi id 15.20.2707.030; Thu, 13 Feb 2020 18:16:32 +0000 Subject: [PATCH v4 01/16] hw/i386: Rename X86CPUTopoInfo structure to X86CPUTopoIDs From: Babu Moger To: ehabkost@redhat.com, marcel.apfelbaum@gmail.com, pbonzini@redhat.com, rth@twiddle.net, mst@redhat.com, imammedo@redhat.com Date: Thu, 13 Feb 2020 12:16:30 -0600 Message-ID: <158161779073.48948.6547974317266276442.stgit@naples-babu.amd.com> In-Reply-To: <158161767653.48948.10578064482878399556.stgit@naples-babu.amd.com> References: <158161767653.48948.10578064482878399556.stgit@naples-babu.amd.com> User-Agent: StGit/unknown-version X-ClientProxiedBy: DM6PR07CA0059.namprd07.prod.outlook.com (2603:10b6:5:74::36) To CY4PR12MB1574.namprd12.prod.outlook.com (2603:10b6:910:e::23) MIME-Version: 1.0 Received: from naples-babu.amd.com (165.204.78.2) by DM6PR07CA0059.namprd07.prod.outlook.com (2603:10b6:5:74::36) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2729.23 via Frontend Transport; Thu, 13 Feb 2020 18:16:31 +0000 X-Originating-IP: [165.204.78.2] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: e29b569d-2e03-4bc9-b796-08d7b0b0da8b X-MS-TrafficTypeDiagnostic: CY4PR12MB1318:|CY4PR12MB1318: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:3513; X-Forefront-PRVS: 031257FE13 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4636009)(136003)(366004)(39860400002)(346002)(396003)(376002)(189003)(199004)(66476007)(66556008)(66946007)(81166006)(26005)(186003)(316002)(2906002)(52116002)(8936002)(8676002)(478600001)(103116003)(86362001)(7696005)(5660300002)(81156014)(4326008)(956004)(16526019)(44832011)(55016002); DIR:OUT; SFP:1101; SCL:1; SRVR:CY4PR12MB1318; H:CY4PR12MB1574.namprd12.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; Received-SPF: None (protection.outlook.com: amd.com does not designate permitted sender hosts) X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Hm8mXPTuet02JHj/1pvMnNJg8GRLzCMhsprgCZwB10RWjvC7yNnXtKYcNxHQhQnJxLjg2epnm7kR0uG8G7PNUTGHmZuozQfJkdRYNEMtmldt1F6Xn8zWKxJd+NRDvG36j2yiGGMaPa9ILG/oHMlRonL6c/1lxP04yz1t9JMGvopLx/yhYZ9d1GyMAwpruIWU48JzheZwqVSawQ3goTRXchGcwKbm56X5OoZuT8ISzm7KZ3FMFvspf7M5gDfHNyNoY/UTps/Pf2ByTCFmr9ITHL/iHOQddhBYgMyKmNYV2IMDI3xHJEdIQzmCVHt2V4ln0AEn8LepOxaS+GYdlJERtBVLtEk+OPRM0O4fRROYXLvHbspJePmi8UMDTzFDxuG2n3T3zZ17zmGnH/gdzbCW5luAuh1iCqI0sUZfpue8Bd36GRtovOMAcolu88v9hp0z X-MS-Exchange-AntiSpam-MessageData: uQU9KP3BEmzQfizIq0nh6EI05YgPQlEBlbUfRCkZ7KJAqXNEpqsGd/SDXQ1e0sIhna4Bym2UeYwq/tZewuUVJLuv9xfYdI2wMWpqOpQE2uI8l70eMRLmJeaJfEvBWlhbZq/VZkChhpuFlxyml5du7Q== X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: e29b569d-2e03-4bc9-b796-08d7b0b0da8b X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Feb 2020 18:16:32.4996 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: iK2ACGj2hwYQq1/1/ccvzaHzS+qv1ibSNqfJovBbtWZDpkXrqea/hrJLC3AicSsN X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR12MB1318 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 40.107.236.46 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Rename few data structures related to X86 topology. X86CPUTopoIDs will have individual arch ids. Next patch introduces X86CPUTopoInfo which will have all topology information(like cores, threads etc..). Signed-off-by: Babu Moger Reviewed-by: Eduardo Habkost --- hw/i386/pc.c | 42 +++++++++++++++++++++--------------------- hw/i386/x86.c | 18 +++++++++--------- include/hw/i386/topology.h | 40 ++++++++++++++++++++-------------------- 3 files changed, 50 insertions(+), 50 deletions(-) diff --git a/hw/i386/pc.c b/hw/i386/pc.c index 58867f987d..3a580f6a60 100644 --- a/hw/i386/pc.c +++ b/hw/i386/pc.c @@ -1733,7 +1733,7 @@ static void pc_cpu_pre_plug(HotplugHandler *hotplug_dev, int idx; CPUState *cs; CPUArchId *cpu_slot; - X86CPUTopoInfo topo; + X86CPUTopoIDs topo_ids; X86CPU *cpu = X86_CPU(dev); CPUX86State *env = &cpu->env; MachineState *ms = MACHINE(hotplug_dev); @@ -1799,12 +1799,12 @@ static void pc_cpu_pre_plug(HotplugHandler *hotplug_dev, return; } - topo.pkg_id = cpu->socket_id; - topo.die_id = cpu->die_id; - topo.core_id = cpu->core_id; - topo.smt_id = cpu->thread_id; + topo_ids.pkg_id = cpu->socket_id; + topo_ids.die_id = cpu->die_id; + topo_ids.core_id = cpu->core_id; + topo_ids.smt_id = cpu->thread_id; cpu->apic_id = apicid_from_topo_ids(x86ms->smp_dies, smp_cores, - smp_threads, &topo); + smp_threads, &topo_ids); } cpu_slot = pc_find_cpu_slot(MACHINE(pcms), cpu->apic_id, &idx); @@ -1812,11 +1812,11 @@ static void pc_cpu_pre_plug(HotplugHandler *hotplug_dev, MachineState *ms = MACHINE(pcms); x86_topo_ids_from_apicid(cpu->apic_id, x86ms->smp_dies, - smp_cores, smp_threads, &topo); + smp_cores, smp_threads, &topo_ids); error_setg(errp, "Invalid CPU [socket: %u, die: %u, core: %u, thread: %u] with" " APIC ID %" PRIu32 ", valid index range 0:%d", - topo.pkg_id, topo.die_id, topo.core_id, topo.smt_id, + topo_ids.pkg_id, topo_ids.die_id, topo_ids.core_id, topo_ids.smt_id, cpu->apic_id, ms->possible_cpus->len - 1); return; } @@ -1834,34 +1834,34 @@ static void pc_cpu_pre_plug(HotplugHandler *hotplug_dev, * once -smp refactoring is complete and there will be CPU private * CPUState::nr_cores and CPUState::nr_threads fields instead of globals */ x86_topo_ids_from_apicid(cpu->apic_id, x86ms->smp_dies, - smp_cores, smp_threads, &topo); - if (cpu->socket_id != -1 && cpu->socket_id != topo.pkg_id) { + smp_cores, smp_threads, &topo_ids); + if (cpu->socket_id != -1 && cpu->socket_id != topo_ids.pkg_id) { error_setg(errp, "property socket-id: %u doesn't match set apic-id:" - " 0x%x (socket-id: %u)", cpu->socket_id, cpu->apic_id, topo.pkg_id); + " 0x%x (socket-id: %u)", cpu->socket_id, cpu->apic_id, topo_ids.pkg_id); return; } - cpu->socket_id = topo.pkg_id; + cpu->socket_id = topo_ids.pkg_id; - if (cpu->die_id != -1 && cpu->die_id != topo.die_id) { + if (cpu->die_id != -1 && cpu->die_id != topo_ids.die_id) { error_setg(errp, "property die-id: %u doesn't match set apic-id:" - " 0x%x (die-id: %u)", cpu->die_id, cpu->apic_id, topo.die_id); + " 0x%x (die-id: %u)", cpu->die_id, cpu->apic_id, topo_ids.die_id); return; } - cpu->die_id = topo.die_id; + cpu->die_id = topo_ids.die_id; - if (cpu->core_id != -1 && cpu->core_id != topo.core_id) { + if (cpu->core_id != -1 && cpu->core_id != topo_ids.core_id) { error_setg(errp, "property core-id: %u doesn't match set apic-id:" - " 0x%x (core-id: %u)", cpu->core_id, cpu->apic_id, topo.core_id); + " 0x%x (core-id: %u)", cpu->core_id, cpu->apic_id, topo_ids.core_id); return; } - cpu->core_id = topo.core_id; + cpu->core_id = topo_ids.core_id; - if (cpu->thread_id != -1 && cpu->thread_id != topo.smt_id) { + if (cpu->thread_id != -1 && cpu->thread_id != topo_ids.smt_id) { error_setg(errp, "property thread-id: %u doesn't match set apic-id:" - " 0x%x (thread-id: %u)", cpu->thread_id, cpu->apic_id, topo.smt_id); + " 0x%x (thread-id: %u)", cpu->thread_id, cpu->apic_id, topo_ids.smt_id); return; } - cpu->thread_id = topo.smt_id; + cpu->thread_id = topo_ids.smt_id; if (hyperv_feat_enabled(cpu, HYPERV_FEAT_VPINDEX) && !kvm_hv_vpindex_settable()) { diff --git a/hw/i386/x86.c b/hw/i386/x86.c index 394edc2f72..4a112c8e30 100644 --- a/hw/i386/x86.c +++ b/hw/i386/x86.c @@ -138,14 +138,14 @@ x86_cpu_index_to_props(MachineState *ms, unsigned cpu_index) int64_t x86_get_default_cpu_node_id(const MachineState *ms, int idx) { - X86CPUTopoInfo topo; + X86CPUTopoIDs topo_ids; X86MachineState *x86ms = X86_MACHINE(ms); assert(idx < ms->possible_cpus->len); x86_topo_ids_from_apicid(ms->possible_cpus->cpus[idx].arch_id, x86ms->smp_dies, ms->smp.cores, - ms->smp.threads, &topo); - return topo.pkg_id % ms->numa_state->num_nodes; + ms->smp.threads, &topo_ids); + return topo_ids.pkg_id % ms->numa_state->num_nodes; } const CPUArchIdList *x86_possible_cpu_arch_ids(MachineState *ms) @@ -167,7 +167,7 @@ const CPUArchIdList *x86_possible_cpu_arch_ids(MachineState *ms) sizeof(CPUArchId) * max_cpus); ms->possible_cpus->len = max_cpus; for (i = 0; i < ms->possible_cpus->len; i++) { - X86CPUTopoInfo topo; + X86CPUTopoIDs topo_ids; ms->possible_cpus->cpus[i].type = ms->cpu_type; ms->possible_cpus->cpus[i].vcpus_count = 1; @@ -175,17 +175,17 @@ const CPUArchIdList *x86_possible_cpu_arch_ids(MachineState *ms) x86_cpu_apic_id_from_index(x86ms, i); x86_topo_ids_from_apicid(ms->possible_cpus->cpus[i].arch_id, x86ms->smp_dies, ms->smp.cores, - ms->smp.threads, &topo); + ms->smp.threads, &topo_ids); ms->possible_cpus->cpus[i].props.has_socket_id = true; - ms->possible_cpus->cpus[i].props.socket_id = topo.pkg_id; + ms->possible_cpus->cpus[i].props.socket_id = topo_ids.pkg_id; if (x86ms->smp_dies > 1) { ms->possible_cpus->cpus[i].props.has_die_id = true; - ms->possible_cpus->cpus[i].props.die_id = topo.die_id; + ms->possible_cpus->cpus[i].props.die_id = topo_ids.die_id; } ms->possible_cpus->cpus[i].props.has_core_id = true; - ms->possible_cpus->cpus[i].props.core_id = topo.core_id; + ms->possible_cpus->cpus[i].props.core_id = topo_ids.core_id; ms->possible_cpus->cpus[i].props.has_thread_id = true; - ms->possible_cpus->cpus[i].props.thread_id = topo.smt_id; + ms->possible_cpus->cpus[i].props.thread_id = topo_ids.smt_id; } return ms->possible_cpus; } diff --git a/include/hw/i386/topology.h b/include/hw/i386/topology.h index 4ff5b2da6c..6c184f3115 100644 --- a/include/hw/i386/topology.h +++ b/include/hw/i386/topology.h @@ -45,12 +45,12 @@ */ typedef uint32_t apic_id_t; -typedef struct X86CPUTopoInfo { +typedef struct X86CPUTopoIDs { unsigned pkg_id; unsigned die_id; unsigned core_id; unsigned smt_id; -} X86CPUTopoInfo; +} X86CPUTopoIDs; /* Return the bit width needed for 'count' IDs */ @@ -122,12 +122,12 @@ static inline unsigned apicid_pkg_offset(unsigned nr_dies, static inline apic_id_t apicid_from_topo_ids(unsigned nr_dies, unsigned nr_cores, unsigned nr_threads, - const X86CPUTopoInfo *topo) + const X86CPUTopoIDs *topo_ids) { - return (topo->pkg_id << apicid_pkg_offset(nr_dies, nr_cores, nr_threads)) | - (topo->die_id << apicid_die_offset(nr_dies, nr_cores, nr_threads)) | - (topo->core_id << apicid_core_offset(nr_dies, nr_cores, nr_threads)) | - topo->smt_id; + return (topo_ids->pkg_id << apicid_pkg_offset(nr_dies, nr_cores, nr_threads)) | + (topo_ids->die_id << apicid_die_offset(nr_dies, nr_cores, nr_threads)) | + (topo_ids->core_id << apicid_core_offset(nr_dies, nr_cores, nr_threads)) | + topo_ids->smt_id; } /* Calculate thread/core/package IDs for a specific topology, @@ -137,12 +137,12 @@ static inline void x86_topo_ids_from_idx(unsigned nr_dies, unsigned nr_cores, unsigned nr_threads, unsigned cpu_index, - X86CPUTopoInfo *topo) + X86CPUTopoIDs *topo_ids) { - topo->pkg_id = cpu_index / (nr_dies * nr_cores * nr_threads); - topo->die_id = cpu_index / (nr_cores * nr_threads) % nr_dies; - topo->core_id = cpu_index / nr_threads % nr_cores; - topo->smt_id = cpu_index % nr_threads; + topo_ids->pkg_id = cpu_index / (nr_dies * nr_cores * nr_threads); + topo_ids->die_id = cpu_index / (nr_cores * nr_threads) % nr_dies; + topo_ids->core_id = cpu_index / nr_threads % nr_cores; + topo_ids->smt_id = cpu_index % nr_threads; } /* Calculate thread/core/package IDs for a specific topology, @@ -152,17 +152,17 @@ static inline void x86_topo_ids_from_apicid(apic_id_t apicid, unsigned nr_dies, unsigned nr_cores, unsigned nr_threads, - X86CPUTopoInfo *topo) + X86CPUTopoIDs *topo_ids) { - topo->smt_id = apicid & + topo_ids->smt_id = apicid & ~(0xFFFFFFFFUL << apicid_smt_width(nr_dies, nr_cores, nr_threads)); - topo->core_id = + topo_ids->core_id = (apicid >> apicid_core_offset(nr_dies, nr_cores, nr_threads)) & ~(0xFFFFFFFFUL << apicid_core_width(nr_dies, nr_cores, nr_threads)); - topo->die_id = + topo_ids->die_id = (apicid >> apicid_die_offset(nr_dies, nr_cores, nr_threads)) & ~(0xFFFFFFFFUL << apicid_die_width(nr_dies, nr_cores, nr_threads)); - topo->pkg_id = apicid >> apicid_pkg_offset(nr_dies, nr_cores, nr_threads); + topo_ids->pkg_id = apicid >> apicid_pkg_offset(nr_dies, nr_cores, nr_threads); } /* Make APIC ID for the CPU 'cpu_index' @@ -174,9 +174,9 @@ static inline apic_id_t x86_apicid_from_cpu_idx(unsigned nr_dies, unsigned nr_threads, unsigned cpu_index) { - X86CPUTopoInfo topo; - x86_topo_ids_from_idx(nr_dies, nr_cores, nr_threads, cpu_index, &topo); - return apicid_from_topo_ids(nr_dies, nr_cores, nr_threads, &topo); + X86CPUTopoIDs topo_ids; + x86_topo_ids_from_idx(nr_dies, nr_cores, nr_threads, cpu_index, &topo_ids); + return apicid_from_topo_ids(nr_dies, nr_cores, nr_threads, &topo_ids); } #endif /* HW_I386_TOPOLOGY_H */ From patchwork Thu Feb 13 18:16:37 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Babu Moger X-Patchwork-Id: 11381001 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 13766139A for ; Thu, 13 Feb 2020 18:25:30 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id C9D6221734 for ; Thu, 13 Feb 2020 18:25:29 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=amdcloud.onmicrosoft.com header.i=@amdcloud.onmicrosoft.com header.b="B+C1T20x" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org C9D6221734 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=amd.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:57710 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j2JB2-0004K9-Vj for patchwork-qemu-devel@patchwork.kernel.org; Thu, 13 Feb 2020 13:25:29 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:40033) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j2J2b-0001M0-9K for qemu-devel@nongnu.org; Thu, 13 Feb 2020 13:16:46 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1j2J2Y-0006aK-J5 for qemu-devel@nongnu.org; Thu, 13 Feb 2020 13:16:44 -0500 Received: from mail-bn8nam11on2040.outbound.protection.outlook.com ([40.107.236.40]:6190 helo=NAM11-BN8-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1j2J2Y-0006V3-BP for qemu-devel@nongnu.org; Thu, 13 Feb 2020 13:16:42 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=TsapkurmnSXSarqb0BcoMfnctfulCf62DpW5pHZDpSicLDkDWGZBj2ihyf0oMWxHskTlZCMYlw7NEQ74b3y7jlqvlZCZbIwl2u1MrP/yWbg35ua8R6+6ILKjSCs2bc8cT2HI79uurZi3YA+uU9bR/urwHfqUkTc39D9qgxUFPgVV/NdTzOKsQJDMhSHScjnXlf6EGrbmIRhaeR3+VrB5+UTKogGSiXVF1ROg929v40o0zLwikYfWnUeNMnzwAJf5CR/j5Pv/f325SmAcmsEIpyYADo+ZQLpqkAzdl2NZaiqdj7skSrmUjITM/YKBaSVSp3bmlrKXWuLFFRFlot8feQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=9JBnXuL23nzX8rI859rHV1vReYZyd+7QMk+8MF/BJ5s=; b=RcnFIIu08am6ePr3Btkw8jsTVF1rLwnmk21HPMXBnLglE0nHBixraY8jAkyMlLjE7JEh8UJeTHZADewilVRCIWmxZYcHR8iqi5HPHy7XhkSthbSDzJvoEAPrz9Cyp2+25Gzh4t1aJxNw2obBwCaZrWmlsUY4o9hqcoF6k+nm98DqEadHQBhtUbPdbtRhpjnRihlh4UhxdLyWypusgwW596yfzmpYI09BUnmX/wit00BettjJ9WaD9q2lqrAKQquK+FsXzS2SouO7ARhyGjstf7SXQj/KYP2m6gR9wSwyGpneEVeEJDuogewS+R5+JuZO/Xlt0j27w2OSrzImDFmX3g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amdcloud.onmicrosoft.com; s=selector2-amdcloud-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=9JBnXuL23nzX8rI859rHV1vReYZyd+7QMk+8MF/BJ5s=; b=B+C1T20x0jrG3RYf0S/DLRwxPF/e5dUn0DWaN/6IdnV9NzCn2jCsNpruOJVv+BdPdXILAwaANJV+A/X43ryz5QVlgqUlUfUmpSJor6LEmZqEng39qP1CA7ux+gArHAI9Z6fdsTey0Xi45QIKF/6ozbKLrFrpiGWnMY324QHhems= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Babu.Moger@amd.com; Received: from CY4PR12MB1574.namprd12.prod.outlook.com (10.172.71.23) by CY4PR12MB1318.namprd12.prod.outlook.com (10.168.164.138) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2707.24; Thu, 13 Feb 2020 18:16:39 +0000 Received: from CY4PR12MB1574.namprd12.prod.outlook.com ([fe80::e0cc:653a:e9bc:aa8e]) by CY4PR12MB1574.namprd12.prod.outlook.com ([fe80::e0cc:653a:e9bc:aa8e%2]) with mapi id 15.20.2707.030; Thu, 13 Feb 2020 18:16:39 +0000 Subject: [PATCH v4 02/16] hw/i386: Introduce X86CPUTopoInfo to contain topology info From: Babu Moger To: ehabkost@redhat.com, marcel.apfelbaum@gmail.com, pbonzini@redhat.com, rth@twiddle.net, mst@redhat.com, imammedo@redhat.com Date: Thu, 13 Feb 2020 12:16:37 -0600 Message-ID: <158161779774.48948.3579168862801203963.stgit@naples-babu.amd.com> In-Reply-To: <158161767653.48948.10578064482878399556.stgit@naples-babu.amd.com> References: <158161767653.48948.10578064482878399556.stgit@naples-babu.amd.com> User-Agent: StGit/unknown-version X-ClientProxiedBy: SN6PR05CA0019.namprd05.prod.outlook.com (2603:10b6:805:de::32) To CY4PR12MB1574.namprd12.prod.outlook.com (2603:10b6:910:e::23) MIME-Version: 1.0 Received: from naples-babu.amd.com (165.204.78.2) by SN6PR05CA0019.namprd05.prod.outlook.com (2603:10b6:805:de::32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2729.18 via Frontend Transport; Thu, 13 Feb 2020 18:16:38 +0000 X-Originating-IP: [165.204.78.2] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 568460ee-748c-4286-41ec-08d7b0b0de96 X-MS-TrafficTypeDiagnostic: CY4PR12MB1318:|CY4PR12MB1318: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:2733; X-Forefront-PRVS: 031257FE13 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4636009)(136003)(366004)(39860400002)(346002)(396003)(376002)(189003)(199004)(66476007)(66556008)(66946007)(81166006)(26005)(186003)(316002)(2906002)(52116002)(8936002)(8676002)(478600001)(103116003)(86362001)(7696005)(5660300002)(81156014)(4326008)(956004)(16526019)(44832011)(55016002); DIR:OUT; SFP:1101; SCL:1; SRVR:CY4PR12MB1318; H:CY4PR12MB1574.namprd12.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; Received-SPF: None (protection.outlook.com: amd.com does not designate permitted sender hosts) X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: U2lFcjZVbGlpFxgFOd/7C70pNf/++QxjCRhVTKuGgiRRnph7+WapHtpXfFhPwGDJIDi7pSdZQd/V7gegBt4215ptJh7VG7ZLsebS/Wg/YFHADwhTqh29qxQbxIu5RaBkMTn1hIkMU8vrtmLyeOyr8Al5Nq3dXoZm4MtjTC6fnq7fT95KfCJOH+H91P6RY7COs/ePpDO3dICLVebOG+ypit8LjQh2/l0UIVXSzVaJ2xd2adkqmzXKBBpOJuc6t6cI67hzl/C5A7w0pZ8vpST9zsACH9NtMq+41pvjQjfaSHEBT1+8K3u6MX5xFn2uv4n//9I+F8Laa0JXWVossSm2b008Gx5zj6DJDF+n+I1IExaT3ratkvO2CHGU0ju+mY5Nho3q/u1XqeMJILFN3BA4o/HqIf9Qis9LEhTH0QCdp6cvZXj6JTirO3KyFcX4uuuM X-MS-Exchange-AntiSpam-MessageData: NiQGtoxtvEbfPWrAG8CpSFb1eh3EursYBP2o8TzHsEy5XDyWM0z5jqJ60e5AvGXO67LU+I/GnFlibHVaU4NGV5C4uaa2EMCHsSuEYPcrl+qEFJcAEm2708XBHuSQuC2y1gs67ihUAbVhx5LxKpYxgQ== X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 568460ee-748c-4286-41ec-08d7b0b0de96 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Feb 2020 18:16:39.2735 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: aqxuCnpWZzmouDYO5smAPkAfVItyFKNHe7xRx9gqfmlT5O+thAP2MzL48FhtUCoP X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR12MB1318 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 40.107.236.40 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" This is an effort to re-arrange few data structure for better readability. Add X86CPUTopoInfo which will have all the topology informations required to build the cpu topology. There is no functional changes. Signed-off-by: Babu Moger Reviewed-by: Igor Mammedov --- hw/i386/pc.c | 14 ++++++++------ hw/i386/x86.c | 28 +++++++++++++++++++++------- include/hw/i386/topology.h | 38 ++++++++++++++++++++++++-------------- 3 files changed, 53 insertions(+), 27 deletions(-) diff --git a/hw/i386/pc.c b/hw/i386/pc.c index 3a580f6a60..2adf7f6afa 100644 --- a/hw/i386/pc.c +++ b/hw/i386/pc.c @@ -1741,6 +1741,7 @@ static void pc_cpu_pre_plug(HotplugHandler *hotplug_dev, X86MachineState *x86ms = X86_MACHINE(pcms); unsigned int smp_cores = ms->smp.cores; unsigned int smp_threads = ms->smp.threads; + X86CPUTopoInfo topo_info; if(!object_dynamic_cast(OBJECT(cpu), ms->cpu_type)) { error_setg(errp, "Invalid CPU type, expected cpu type: '%s'", @@ -1748,6 +1749,10 @@ static void pc_cpu_pre_plug(HotplugHandler *hotplug_dev, return; } + topo_info.dies_per_pkg = x86ms->smp_dies; + topo_info.cores_per_die = smp_cores; + topo_info.threads_per_core = smp_threads; + env->nr_dies = x86ms->smp_dies; /* @@ -1803,16 +1808,14 @@ static void pc_cpu_pre_plug(HotplugHandler *hotplug_dev, topo_ids.die_id = cpu->die_id; topo_ids.core_id = cpu->core_id; topo_ids.smt_id = cpu->thread_id; - cpu->apic_id = apicid_from_topo_ids(x86ms->smp_dies, smp_cores, - smp_threads, &topo_ids); + cpu->apic_id = apicid_from_topo_ids(&topo_info, &topo_ids); } cpu_slot = pc_find_cpu_slot(MACHINE(pcms), cpu->apic_id, &idx); if (!cpu_slot) { MachineState *ms = MACHINE(pcms); - x86_topo_ids_from_apicid(cpu->apic_id, x86ms->smp_dies, - smp_cores, smp_threads, &topo_ids); + x86_topo_ids_from_apicid(cpu->apic_id, &topo_info, &topo_ids); error_setg(errp, "Invalid CPU [socket: %u, die: %u, core: %u, thread: %u] with" " APIC ID %" PRIu32 ", valid index range 0:%d", @@ -1833,8 +1836,7 @@ static void pc_cpu_pre_plug(HotplugHandler *hotplug_dev, /* TODO: move socket_id/core_id/thread_id checks into x86_cpu_realizefn() * once -smp refactoring is complete and there will be CPU private * CPUState::nr_cores and CPUState::nr_threads fields instead of globals */ - x86_topo_ids_from_apicid(cpu->apic_id, x86ms->smp_dies, - smp_cores, smp_threads, &topo_ids); + x86_topo_ids_from_apicid(cpu->apic_id, &topo_info, &topo_ids); if (cpu->socket_id != -1 && cpu->socket_id != topo_ids.pkg_id) { error_setg(errp, "property socket-id: %u doesn't match set apic-id:" " 0x%x (socket-id: %u)", cpu->socket_id, cpu->apic_id, topo_ids.pkg_id); diff --git a/hw/i386/x86.c b/hw/i386/x86.c index 4a112c8e30..f18cab8e5c 100644 --- a/hw/i386/x86.c +++ b/hw/i386/x86.c @@ -65,11 +65,15 @@ uint32_t x86_cpu_apic_id_from_index(X86MachineState *x86ms, { MachineState *ms = MACHINE(x86ms); X86MachineClass *x86mc = X86_MACHINE_GET_CLASS(x86ms); + X86CPUTopoInfo topo_info; uint32_t correct_id; static bool warned; - correct_id = x86_apicid_from_cpu_idx(x86ms->smp_dies, ms->smp.cores, - ms->smp.threads, cpu_index); + topo_info.dies_per_pkg = x86ms->smp_dies; + topo_info.cores_per_die = ms->smp.cores; + topo_info.threads_per_core = ms->smp.threads; + + correct_id = x86_apicid_from_cpu_idx(&topo_info, cpu_index); if (x86mc->compat_apic_id_mode) { if (cpu_index != correct_id && !warned && !qtest_enabled()) { error_report("APIC IDs set in compatibility mode, " @@ -140,19 +144,25 @@ int64_t x86_get_default_cpu_node_id(const MachineState *ms, int idx) { X86CPUTopoIDs topo_ids; X86MachineState *x86ms = X86_MACHINE(ms); + X86CPUTopoInfo topo_info; + + topo_info.dies_per_pkg = x86ms->smp_dies; + topo_info.cores_per_die = ms->smp.cores; + topo_info.threads_per_core = ms->smp.threads; + assert(idx < ms->possible_cpus->len); x86_topo_ids_from_apicid(ms->possible_cpus->cpus[idx].arch_id, - x86ms->smp_dies, ms->smp.cores, - ms->smp.threads, &topo_ids); + &topo_info, &topo_ids); return topo_ids.pkg_id % ms->numa_state->num_nodes; } const CPUArchIdList *x86_possible_cpu_arch_ids(MachineState *ms) { X86MachineState *x86ms = X86_MACHINE(ms); - int i; unsigned int max_cpus = ms->smp.max_cpus; + X86CPUTopoInfo topo_info; + int i; if (ms->possible_cpus) { /* @@ -166,6 +176,11 @@ const CPUArchIdList *x86_possible_cpu_arch_ids(MachineState *ms) ms->possible_cpus = g_malloc0(sizeof(CPUArchIdList) + sizeof(CPUArchId) * max_cpus); ms->possible_cpus->len = max_cpus; + + topo_info.dies_per_pkg = x86ms->smp_dies; + topo_info.cores_per_die = ms->smp.cores; + topo_info.threads_per_core = ms->smp.threads; + for (i = 0; i < ms->possible_cpus->len; i++) { X86CPUTopoIDs topo_ids; @@ -174,8 +189,7 @@ const CPUArchIdList *x86_possible_cpu_arch_ids(MachineState *ms) ms->possible_cpus->cpus[i].arch_id = x86_cpu_apic_id_from_index(x86ms, i); x86_topo_ids_from_apicid(ms->possible_cpus->cpus[i].arch_id, - x86ms->smp_dies, ms->smp.cores, - ms->smp.threads, &topo_ids); + &topo_info, &topo_ids); ms->possible_cpus->cpus[i].props.has_socket_id = true; ms->possible_cpus->cpus[i].props.socket_id = topo_ids.pkg_id; if (x86ms->smp_dies > 1) { diff --git a/include/hw/i386/topology.h b/include/hw/i386/topology.h index 6c184f3115..cf1935d548 100644 --- a/include/hw/i386/topology.h +++ b/include/hw/i386/topology.h @@ -52,6 +52,12 @@ typedef struct X86CPUTopoIDs { unsigned smt_id; } X86CPUTopoIDs; +typedef struct X86CPUTopoInfo { + unsigned dies_per_pkg; + unsigned cores_per_die; + unsigned threads_per_core; +} X86CPUTopoInfo; + /* Return the bit width needed for 'count' IDs */ static unsigned apicid_bitwidth_for_count(unsigned count) @@ -119,11 +125,13 @@ static inline unsigned apicid_pkg_offset(unsigned nr_dies, * * The caller must make sure core_id < nr_cores and smt_id < nr_threads. */ -static inline apic_id_t apicid_from_topo_ids(unsigned nr_dies, - unsigned nr_cores, - unsigned nr_threads, +static inline apic_id_t apicid_from_topo_ids(X86CPUTopoInfo *topo_info, const X86CPUTopoIDs *topo_ids) { + unsigned nr_dies = topo_info->dies_per_pkg; + unsigned nr_cores = topo_info->cores_per_die; + unsigned nr_threads = topo_info->threads_per_core; + return (topo_ids->pkg_id << apicid_pkg_offset(nr_dies, nr_cores, nr_threads)) | (topo_ids->die_id << apicid_die_offset(nr_dies, nr_cores, nr_threads)) | (topo_ids->core_id << apicid_core_offset(nr_dies, nr_cores, nr_threads)) | @@ -133,12 +141,14 @@ static inline apic_id_t apicid_from_topo_ids(unsigned nr_dies, /* Calculate thread/core/package IDs for a specific topology, * based on (contiguous) CPU index */ -static inline void x86_topo_ids_from_idx(unsigned nr_dies, - unsigned nr_cores, - unsigned nr_threads, +static inline void x86_topo_ids_from_idx(X86CPUTopoInfo *topo_info, unsigned cpu_index, X86CPUTopoIDs *topo_ids) { + unsigned nr_dies = topo_info->dies_per_pkg; + unsigned nr_cores = topo_info->cores_per_die; + unsigned nr_threads = topo_info->threads_per_core; + topo_ids->pkg_id = cpu_index / (nr_dies * nr_cores * nr_threads); topo_ids->die_id = cpu_index / (nr_cores * nr_threads) % nr_dies; topo_ids->core_id = cpu_index / nr_threads % nr_cores; @@ -149,11 +159,13 @@ static inline void x86_topo_ids_from_idx(unsigned nr_dies, * based on APIC ID */ static inline void x86_topo_ids_from_apicid(apic_id_t apicid, - unsigned nr_dies, - unsigned nr_cores, - unsigned nr_threads, + X86CPUTopoInfo *topo_info, X86CPUTopoIDs *topo_ids) { + unsigned nr_dies = topo_info->dies_per_pkg; + unsigned nr_cores = topo_info->cores_per_die; + unsigned nr_threads = topo_info->threads_per_core; + topo_ids->smt_id = apicid & ~(0xFFFFFFFFUL << apicid_smt_width(nr_dies, nr_cores, nr_threads)); topo_ids->core_id = @@ -169,14 +181,12 @@ static inline void x86_topo_ids_from_apicid(apic_id_t apicid, * * 'cpu_index' is a sequential, contiguous ID for the CPU. */ -static inline apic_id_t x86_apicid_from_cpu_idx(unsigned nr_dies, - unsigned nr_cores, - unsigned nr_threads, +static inline apic_id_t x86_apicid_from_cpu_idx(X86CPUTopoInfo *topo_info, unsigned cpu_index) { X86CPUTopoIDs topo_ids; - x86_topo_ids_from_idx(nr_dies, nr_cores, nr_threads, cpu_index, &topo_ids); - return apicid_from_topo_ids(nr_dies, nr_cores, nr_threads, &topo_ids); + x86_topo_ids_from_idx(topo_info, cpu_index, &topo_ids); + return apicid_from_topo_ids(topo_info, &topo_ids); } #endif /* HW_I386_TOPOLOGY_H */ From patchwork Thu Feb 13 18:16:44 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Babu Moger X-Patchwork-Id: 11380975 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id A4BDB1395 for ; Thu, 13 Feb 2020 18:18:04 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 6B285206CC for ; Thu, 13 Feb 2020 18:18:04 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=amdcloud.onmicrosoft.com header.i=@amdcloud.onmicrosoft.com header.b="GgAaEYvS" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 6B285206CC Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=amd.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:57580 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j2J3r-0003XC-Jp for patchwork-qemu-devel@patchwork.kernel.org; Thu, 13 Feb 2020 13:18:03 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:40295) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j2J2f-0001W5-TE for qemu-devel@nongnu.org; Thu, 13 Feb 2020 13:16:52 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1j2J2e-0006nP-1N for qemu-devel@nongnu.org; Thu, 13 Feb 2020 13:16:49 -0500 Received: from mail-bn8nam11on2074.outbound.protection.outlook.com ([40.107.236.74]:6088 helo=NAM11-BN8-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1j2J2d-0006la-RA for qemu-devel@nongnu.org; Thu, 13 Feb 2020 13:16:47 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=kWjT6oM4+Dv5YQUdE4QLYPdRJIFYgH5afRax/p7JmnXH6wIzxuz+Rya8nRp9G5sMroQvJr1lGRAQ3A0KSp8aakssop9pKTLYo9RF3sDyIrziEH3XqQ1dRcQ+uuV3Q1LoExscRxoeChDu/KxQhB21Uh9UitmG/NegKYx47UehA1+DCRiclOTIZ6BtsuR74ANEVltVPo+/vd6k5FdoxkOY49tjkAXrUpF2grlGMbLeRCp3koZB8yKdv/2Zu/vh77s5eZ6sppYMfCp8qsTuKf03fCtsaxhwYJMgEsUEq9JAQcMSaB4Zo0uDsvT/+0+9BABPN9z7uu3eL0qfVVESiqWRCA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=3HeXIHxwtuh4qWcS4pltITffarHfzAf3J7Bo6jHNheU=; b=Sj4+HouRYTMKneQ1678XKWUDORgkbL3LY72Y2CWaDypSk6+4Jvcj/1PzxaZ91C31gHYppfO47a3IPhGGQc6kSp6bNVvM0jQQApXypW4Qpcwo2yVd0wAN1pvy1XOzsadjweEpjTbVq5vM0ZHTjx4TtoxQ4AzAMLOeDn5U2cfn81Vn+I1EOabEVAd49jspAz2ua6r67U2hK+MNqnn9XxPnzqydd9pvY+LUSoFU3evEa3Z5Wuoq/6E5EzrYJBoSUv7IwmNkiKl/8KEeERuiGnelhqbcH/D2wbAZDHnMk2fof23wU38AEgTYX79Pk7r0cRdekfGTX71l65DvhGfI/mtpow== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amdcloud.onmicrosoft.com; s=selector2-amdcloud-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=3HeXIHxwtuh4qWcS4pltITffarHfzAf3J7Bo6jHNheU=; b=GgAaEYvSrH8Qayn+Oxw3bNtH2OI9k2Ax/5aBSJn99HOPQA08sbn7iMGUgz6D+B6jnQ4wJJQgvHlPWNMTt5EcdNEAiz/H6TnutNGR5axsr8UmidjBVyGS1gQkftZ4FEf2kzjU2tzqabUzNu8oFc3+2ZUpwjS3Q3zsq5BgOlVrE4o= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Babu.Moger@amd.com; Received: from CY4PR12MB1574.namprd12.prod.outlook.com (10.172.71.23) by CY4PR12MB1318.namprd12.prod.outlook.com (10.168.164.138) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2707.24; Thu, 13 Feb 2020 18:16:46 +0000 Received: from CY4PR12MB1574.namprd12.prod.outlook.com ([fe80::e0cc:653a:e9bc:aa8e]) by CY4PR12MB1574.namprd12.prod.outlook.com ([fe80::e0cc:653a:e9bc:aa8e%2]) with mapi id 15.20.2707.030; Thu, 13 Feb 2020 18:16:46 +0000 Subject: [PATCH v4 03/16] hw/i386: Consolidate topology functions From: Babu Moger To: ehabkost@redhat.com, marcel.apfelbaum@gmail.com, pbonzini@redhat.com, rth@twiddle.net, mst@redhat.com, imammedo@redhat.com Date: Thu, 13 Feb 2020 12:16:44 -0600 Message-ID: <158161780451.48948.17670134135373550954.stgit@naples-babu.amd.com> In-Reply-To: <158161767653.48948.10578064482878399556.stgit@naples-babu.amd.com> References: <158161767653.48948.10578064482878399556.stgit@naples-babu.amd.com> User-Agent: StGit/unknown-version X-ClientProxiedBy: SN6PR08CA0019.namprd08.prod.outlook.com (2603:10b6:805:66::32) To CY4PR12MB1574.namprd12.prod.outlook.com (2603:10b6:910:e::23) MIME-Version: 1.0 Received: from naples-babu.amd.com (165.204.78.2) by SN6PR08CA0019.namprd08.prod.outlook.com (2603:10b6:805:66::32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2729.22 via Frontend Transport; Thu, 13 Feb 2020 18:16:45 +0000 X-Originating-IP: [165.204.78.2] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 4fdaf45b-aa2c-4558-b72e-08d7b0b0e28f X-MS-TrafficTypeDiagnostic: CY4PR12MB1318:|CY4PR12MB1318: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:4303; X-Forefront-PRVS: 031257FE13 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4636009)(136003)(366004)(39860400002)(346002)(396003)(376002)(189003)(199004)(66476007)(66556008)(66946007)(81166006)(26005)(186003)(316002)(2906002)(52116002)(8936002)(8676002)(478600001)(103116003)(86362001)(7696005)(5660300002)(81156014)(4326008)(956004)(16526019)(44832011)(55016002); DIR:OUT; SFP:1101; SCL:1; SRVR:CY4PR12MB1318; H:CY4PR12MB1574.namprd12.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; Received-SPF: None (protection.outlook.com: amd.com does not designate permitted sender hosts) X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: YW3rCrEdc/3pJaFHqE7eUXTFvvtD4rmyVnDd2QJSrNSgDovlEwp0Do0CqZrzFbjo8g6NiaFJKGf891gls2q+03wewJSo+8NUcYgtbPafExY/VDMp/2yVTCEDOSQpuu0oE7pgD7la03yKYGUwcxkVD3Ziyo/3iBtEVANJ8KrvFvN3pC7wdfN45mIGKijxLNU60e4xqAc1E3b8NNA08Fft6pr3L8D0bIvBN0LvLLArT0QSyquWdN6UoB5uRKsyrOIOlPTmVtPIH/CxiUPly/Yf4KGRIIlO6Wu0A81X2dP4DfrAdSmh63i0hFcNFl+j5hbrKh00owUcRmO/k4SsVCSj8nrZF1HGXXV7WCC/hUd2LTYcs27/MsvAzhKO8ERH5NM/Y95AkVDnTJvWSm0/CqFjE0Dz97fHTRy9M64FhOuvmuSmBCeS7OpGZZfPqvy+Ogk/ X-MS-Exchange-AntiSpam-MessageData: kylVbY6Jh0i3EOPsx5VPpDCNP+ko9mX15PSIT8SZUjDFX8zUJF55DPk6+WwWSAG2c4s1tISxVIRsQf4WTDtX+KQC/Jd3sg5V+vTO6nu4bKMtpeGhqZQ7p2tcJwA2AK3Un0CxOmXsVyLc62EUshLliQ== X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4fdaf45b-aa2c-4558-b72e-08d7b0b0e28f X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Feb 2020 18:16:45.9715 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 3ndQWLiwaHnpA9UgI/welMORmy3t6cDL/5cBaWcQxhzxmpAyzP40PzJuqf7qaXZv X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR12MB1318 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 40.107.236.74 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Now that we have all the parameters in X86CPUTopoInfo, we can just pass the structure to calculate the offsets and width. Signed-off-by: Babu Moger Reviewed-by: Igor Mammedov --- include/hw/i386/topology.h | 64 ++++++++++++++------------------------------ target/i386/cpu.c | 23 ++++++++-------- 2 files changed, 32 insertions(+), 55 deletions(-) diff --git a/include/hw/i386/topology.h b/include/hw/i386/topology.h index cf1935d548..ba52d49079 100644 --- a/include/hw/i386/topology.h +++ b/include/hw/i386/topology.h @@ -69,56 +69,42 @@ static unsigned apicid_bitwidth_for_count(unsigned count) /* Bit width of the SMT_ID (thread ID) field on the APIC ID */ -static inline unsigned apicid_smt_width(unsigned nr_dies, - unsigned nr_cores, - unsigned nr_threads) +static inline unsigned apicid_smt_width(X86CPUTopoInfo *topo_info) { - return apicid_bitwidth_for_count(nr_threads); + return apicid_bitwidth_for_count(topo_info->threads_per_core); } /* Bit width of the Core_ID field */ -static inline unsigned apicid_core_width(unsigned nr_dies, - unsigned nr_cores, - unsigned nr_threads) +static inline unsigned apicid_core_width(X86CPUTopoInfo *topo_info) { - return apicid_bitwidth_for_count(nr_cores); + return apicid_bitwidth_for_count(topo_info->cores_per_die); } /* Bit width of the Die_ID field */ -static inline unsigned apicid_die_width(unsigned nr_dies, - unsigned nr_cores, - unsigned nr_threads) +static inline unsigned apicid_die_width(X86CPUTopoInfo *topo_info) { - return apicid_bitwidth_for_count(nr_dies); + return apicid_bitwidth_for_count(topo_info->dies_per_pkg); } /* Bit offset of the Core_ID field */ -static inline unsigned apicid_core_offset(unsigned nr_dies, - unsigned nr_cores, - unsigned nr_threads) +static inline unsigned apicid_core_offset(X86CPUTopoInfo *topo_info) { - return apicid_smt_width(nr_dies, nr_cores, nr_threads); + return apicid_smt_width(topo_info); } /* Bit offset of the Die_ID field */ -static inline unsigned apicid_die_offset(unsigned nr_dies, - unsigned nr_cores, - unsigned nr_threads) +static inline unsigned apicid_die_offset(X86CPUTopoInfo *topo_info) { - return apicid_core_offset(nr_dies, nr_cores, nr_threads) + - apicid_core_width(nr_dies, nr_cores, nr_threads); + return apicid_core_offset(topo_info) + apicid_core_width(topo_info); } /* Bit offset of the Pkg_ID (socket ID) field */ -static inline unsigned apicid_pkg_offset(unsigned nr_dies, - unsigned nr_cores, - unsigned nr_threads) +static inline unsigned apicid_pkg_offset(X86CPUTopoInfo *topo_info) { - return apicid_die_offset(nr_dies, nr_cores, nr_threads) + - apicid_die_width(nr_dies, nr_cores, nr_threads); + return apicid_die_offset(topo_info) + apicid_die_width(topo_info); } /* Make APIC ID for the CPU based on Pkg_ID, Core_ID, SMT_ID @@ -128,13 +114,9 @@ static inline unsigned apicid_pkg_offset(unsigned nr_dies, static inline apic_id_t apicid_from_topo_ids(X86CPUTopoInfo *topo_info, const X86CPUTopoIDs *topo_ids) { - unsigned nr_dies = topo_info->dies_per_pkg; - unsigned nr_cores = topo_info->cores_per_die; - unsigned nr_threads = topo_info->threads_per_core; - - return (topo_ids->pkg_id << apicid_pkg_offset(nr_dies, nr_cores, nr_threads)) | - (topo_ids->die_id << apicid_die_offset(nr_dies, nr_cores, nr_threads)) | - (topo_ids->core_id << apicid_core_offset(nr_dies, nr_cores, nr_threads)) | + return (topo_ids->pkg_id << apicid_pkg_offset(topo_info)) | + (topo_ids->die_id << apicid_die_offset(topo_info)) | + (topo_ids->core_id << apicid_core_offset(topo_info)) | topo_ids->smt_id; } @@ -162,19 +144,15 @@ static inline void x86_topo_ids_from_apicid(apic_id_t apicid, X86CPUTopoInfo *topo_info, X86CPUTopoIDs *topo_ids) { - unsigned nr_dies = topo_info->dies_per_pkg; - unsigned nr_cores = topo_info->cores_per_die; - unsigned nr_threads = topo_info->threads_per_core; - topo_ids->smt_id = apicid & - ~(0xFFFFFFFFUL << apicid_smt_width(nr_dies, nr_cores, nr_threads)); + ~(0xFFFFFFFFUL << apicid_smt_width(topo_info)); topo_ids->core_id = - (apicid >> apicid_core_offset(nr_dies, nr_cores, nr_threads)) & - ~(0xFFFFFFFFUL << apicid_core_width(nr_dies, nr_cores, nr_threads)); + (apicid >> apicid_core_offset(topo_info)) & + ~(0xFFFFFFFFUL << apicid_core_width(topo_info)); topo_ids->die_id = - (apicid >> apicid_die_offset(nr_dies, nr_cores, nr_threads)) & - ~(0xFFFFFFFFUL << apicid_die_width(nr_dies, nr_cores, nr_threads)); - topo_ids->pkg_id = apicid >> apicid_pkg_offset(nr_dies, nr_cores, nr_threads); + (apicid >> apicid_die_offset(topo_info)) & + ~(0xFFFFFFFFUL << apicid_die_width(topo_info)); + topo_ids->pkg_id = apicid >> apicid_pkg_offset(topo_info); } /* Make APIC ID for the CPU 'cpu_index' diff --git a/target/i386/cpu.c b/target/i386/cpu.c index ba5e9d5d6b..7e630f47ac 100644 --- a/target/i386/cpu.c +++ b/target/i386/cpu.c @@ -5316,6 +5316,11 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index, uint32_t count, uint32_t die_offset; uint32_t limit; uint32_t signature[3]; + X86CPUTopoInfo topo_info; + + topo_info.dies_per_pkg = env->nr_dies; + topo_info.cores_per_die = cs->nr_cores; + topo_info.threads_per_core = cs->nr_threads; /* Calculate & apply limits for different index ranges */ if (index >= 0xC0000000) { @@ -5402,8 +5407,7 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index, uint32_t count, eax, ebx, ecx, edx); break; case 3: /* L3 cache info */ - die_offset = apicid_die_offset(env->nr_dies, - cs->nr_cores, cs->nr_threads); + die_offset = apicid_die_offset(&topo_info); if (cpu->enable_l3_cache) { encode_cache_cpuid4(env->cache_info_cpuid4.l3_cache, (1 << die_offset), cs->nr_cores, @@ -5494,14 +5498,12 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index, uint32_t count, switch (count) { case 0: - *eax = apicid_core_offset(env->nr_dies, - cs->nr_cores, cs->nr_threads); + *eax = apicid_core_offset(&topo_info); *ebx = cs->nr_threads; *ecx |= CPUID_TOPOLOGY_LEVEL_SMT; break; case 1: - *eax = apicid_pkg_offset(env->nr_dies, - cs->nr_cores, cs->nr_threads); + *eax = apicid_pkg_offset(&topo_info); *ebx = cs->nr_cores * cs->nr_threads; *ecx |= CPUID_TOPOLOGY_LEVEL_CORE; break; @@ -5525,20 +5527,17 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index, uint32_t count, *edx = cpu->apic_id; switch (count) { case 0: - *eax = apicid_core_offset(env->nr_dies, cs->nr_cores, - cs->nr_threads); + *eax = apicid_core_offset(&topo_info); *ebx = cs->nr_threads; *ecx |= CPUID_TOPOLOGY_LEVEL_SMT; break; case 1: - *eax = apicid_die_offset(env->nr_dies, cs->nr_cores, - cs->nr_threads); + *eax = apicid_die_offset(&topo_info); *ebx = cs->nr_cores * cs->nr_threads; *ecx |= CPUID_TOPOLOGY_LEVEL_CORE; break; case 2: - *eax = apicid_pkg_offset(env->nr_dies, cs->nr_cores, - cs->nr_threads); + *eax = apicid_pkg_offset(&topo_info); *ebx = env->nr_dies * cs->nr_cores * cs->nr_threads; *ecx |= CPUID_TOPOLOGY_LEVEL_DIE; break; From patchwork Thu Feb 13 18:16:51 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Babu Moger X-Patchwork-Id: 11380981 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 199461395 for ; Thu, 13 Feb 2020 18:21:37 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id E35B721734 for ; Thu, 13 Feb 2020 18:21:36 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=amdcloud.onmicrosoft.com header.i=@amdcloud.onmicrosoft.com header.b="t3LWuBWE" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org E35B721734 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=amd.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:57652 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j2J7I-0007SS-3b for patchwork-qemu-devel@patchwork.kernel.org; Thu, 13 Feb 2020 13:21:36 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:40492) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j2J2r-0001gL-1k for qemu-devel@nongnu.org; Thu, 13 Feb 2020 13:17:03 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1j2J2o-00075n-Lh for qemu-devel@nongnu.org; Thu, 13 Feb 2020 13:16:59 -0500 Received: from mail-co1nam11on2065.outbound.protection.outlook.com ([40.107.220.65]:24582 helo=NAM11-CO1-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1j2J2m-0006zk-M8 for qemu-devel@nongnu.org; Thu, 13 Feb 2020 13:16:58 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=f+8biz1sIjf2++YTucYJOmFm42jgugN4CCCVjTFy4zm6LZyfDBCMnHKt5n7Bzld3nNlv04vAdcPzVO3EX7z778j98xsfVtvxcAnYVB/lc6PSnKaQV9qDT+1GksZ4XWb95r34BpEQedJNrfZD3CQ3kCWWnnRnXkaNK8sVkh28n/VyxxPys089BweqehGfkTtsunCAul0RTV9D4GCqItLt5u5abF1N5S1wQ4TYTgpYowzwNx054SsEcToCe69ILfVQtcBPgvHTgr4KfhTVTFgM2V0Z9KxviR1v4bfZyNpKXNXitP5bZVH80WvlfdGuXWLN0/aqXlDLM7SGxywLUBLajg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=CNe3huCaHLb5U4U6YnLGBCxi33Xr+1+zob87QqmkfzQ=; b=cQ3sWiTrlPmQOFqjiTsk7+wclQo3IaHm6sWeriCdtYr2PLH45ks5E9nOFkWlYa54WIl/ylGMuxRHze1cBP7Ib5q7K1DouZODg5kagHksFcKzBACE4mluj+MWuge/3aOS9MCUR6pS9nG5dfIHkP9kvN+HTQtLNDJMATh1r5ZJnUzirfEXPxIh5PCeDuUFJNgLBZVkpN1M0OBAiVkGfqmJo2RjqAAW+83b3nl5TH8bbYCT5JwKVm/vaormlFIJFycNaVY3xkY4h4WplQcecUML0hiyfqYwPfh1FfHatcDZUdMMbSgb5oR7SOgAw0XA7oEicZfSb9FRthyO3SwW6gwdyg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amdcloud.onmicrosoft.com; s=selector2-amdcloud-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=CNe3huCaHLb5U4U6YnLGBCxi33Xr+1+zob87QqmkfzQ=; b=t3LWuBWEiF5AbEnKPiNua3R0oYhCVsInP4o6lqXGzr6608IXmhV786rz9Bpec78tsTfGIv5yrk0Xr8FapjCboej+/G4la+jW0NLmBWWXy9NysvBDKVSJg76tpA2sNFHVLNeq8MQP153VrzW8g3D1pQAkHWCoTMWaV3DrYxQpp/c= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Babu.Moger@amd.com; Received: from CY4PR12MB1574.namprd12.prod.outlook.com (10.172.71.23) by CY4PR12MB1318.namprd12.prod.outlook.com (10.168.164.138) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2707.24; Thu, 13 Feb 2020 18:16:53 +0000 Received: from CY4PR12MB1574.namprd12.prod.outlook.com ([fe80::e0cc:653a:e9bc:aa8e]) by CY4PR12MB1574.namprd12.prod.outlook.com ([fe80::e0cc:653a:e9bc:aa8e%2]) with mapi id 15.20.2707.030; Thu, 13 Feb 2020 18:16:52 +0000 Subject: [PATCH v4 04/16] hw/i386: Introduce init_topo_info to initialize X86CPUTopoInfo From: Babu Moger To: ehabkost@redhat.com, marcel.apfelbaum@gmail.com, pbonzini@redhat.com, rth@twiddle.net, mst@redhat.com, imammedo@redhat.com Date: Thu, 13 Feb 2020 12:16:51 -0600 Message-ID: <158161781120.48948.3568234592332597800.stgit@naples-babu.amd.com> In-Reply-To: <158161767653.48948.10578064482878399556.stgit@naples-babu.amd.com> References: <158161767653.48948.10578064482878399556.stgit@naples-babu.amd.com> User-Agent: StGit/unknown-version X-ClientProxiedBy: SN6PR08CA0030.namprd08.prod.outlook.com (2603:10b6:805:66::43) To CY4PR12MB1574.namprd12.prod.outlook.com (2603:10b6:910:e::23) MIME-Version: 1.0 Received: from naples-babu.amd.com (165.204.78.2) by SN6PR08CA0030.namprd08.prod.outlook.com (2603:10b6:805:66::43) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2729.23 via Frontend Transport; Thu, 13 Feb 2020 18:16:52 +0000 X-Originating-IP: [165.204.78.2] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 90cb85bb-7f1b-44f0-8ad7-08d7b0b0e6a5 X-MS-TrafficTypeDiagnostic: CY4PR12MB1318:|CY4PR12MB1318: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:3826; X-Forefront-PRVS: 031257FE13 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4636009)(136003)(366004)(39860400002)(346002)(396003)(376002)(189003)(199004)(66476007)(66556008)(66946007)(81166006)(26005)(186003)(316002)(2906002)(52116002)(8936002)(8676002)(478600001)(103116003)(86362001)(7696005)(5660300002)(81156014)(4326008)(956004)(16526019)(44832011)(55016002); DIR:OUT; SFP:1101; SCL:1; SRVR:CY4PR12MB1318; H:CY4PR12MB1574.namprd12.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; Received-SPF: None (protection.outlook.com: amd.com does not designate permitted sender hosts) X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 2EgwgCNALvSiTLES0/766gkQc/BGHDb4G3M7lRornW4dqQLG0aJE0DJ30g72NaYxtFDTOEsA0fLRJgp2CxmvT/3vDGnWcOY4hwrwDNaDbeMSPnaHPVFHWUOVc2W19UOfv1efDKFyQCon+dK5gdCjXZSmQECj8agqdWlVOunSBRVEfL1atHC+vv7rw5yJf3XKPf2MH/02xS1ltPM5Uwu3+L6UYcbGvu4kG/oMfeMcInCvvLXiPwI9oZqrODAyAIJX7A7M9ErDiHmmYDX0LlGKzgvXXEcEOcyGvZxihrkBfAN92WG9oznNkCNFymO379d9DDXhtrv/EUcdlvQOQp9S4ChKCcawuZsFeSK/n0lwJC4x7vlTX7Y9FuzVwZvlPMtod24LWzVA1qJCLQAHZG32cxRmAGBAWm/6d3KEdy12p4vS+QPh6OQBx4moMQTFNxZD X-MS-Exchange-AntiSpam-MessageData: x6k1XmR3K5V9MfV9pAyOi7Ma/F+9nes6vrcvCglgMHxtWFbeHeOhWln5fLvvYXRKiMCXihEI6JW+94mrR3rPljQhM34rfwoW2lpMiWOdv/xMwPyH8VEubPVRiI5fZUo3N2nousNsroCALASDbSIHGA== X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 90cb85bb-7f1b-44f0-8ad7-08d7b0b0e6a5 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Feb 2020 18:16:52.8355 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: M0D1kjwJVgD/DckPKT0hiPV2UGljet6BTfzRHDNo1NOTfWZRaIeB+yABJ03OaUM7 X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR12MB1318 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 40.107.220.65 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Initialize all the parameters in one function init_topo_info. Move the data structure X86CPUTopoIDs and X86CPUTopoInfo into x86.h. Signed-off-by: Babu Moger Reviewed-by: Eduardo Habkost --- hw/i386/pc.c | 4 +--- hw/i386/x86.c | 14 +++----------- include/hw/i386/topology.h | 26 ++++++++++---------------- include/hw/i386/x86.h | 17 +++++++++++++++++ 4 files changed, 31 insertions(+), 30 deletions(-) diff --git a/hw/i386/pc.c b/hw/i386/pc.c index 2adf7f6afa..9803413dd9 100644 --- a/hw/i386/pc.c +++ b/hw/i386/pc.c @@ -1749,9 +1749,7 @@ static void pc_cpu_pre_plug(HotplugHandler *hotplug_dev, return; } - topo_info.dies_per_pkg = x86ms->smp_dies; - topo_info.cores_per_die = smp_cores; - topo_info.threads_per_core = smp_threads; + init_topo_info(&topo_info, x86ms); env->nr_dies = x86ms->smp_dies; diff --git a/hw/i386/x86.c b/hw/i386/x86.c index f18cab8e5c..083effb2f5 100644 --- a/hw/i386/x86.c +++ b/hw/i386/x86.c @@ -63,15 +63,12 @@ static size_t pvh_start_addr; uint32_t x86_cpu_apic_id_from_index(X86MachineState *x86ms, unsigned int cpu_index) { - MachineState *ms = MACHINE(x86ms); X86MachineClass *x86mc = X86_MACHINE_GET_CLASS(x86ms); X86CPUTopoInfo topo_info; uint32_t correct_id; static bool warned; - topo_info.dies_per_pkg = x86ms->smp_dies; - topo_info.cores_per_die = ms->smp.cores; - topo_info.threads_per_core = ms->smp.threads; + init_topo_info(&topo_info, x86ms); correct_id = x86_apicid_from_cpu_idx(&topo_info, cpu_index); if (x86mc->compat_apic_id_mode) { @@ -146,10 +143,7 @@ int64_t x86_get_default_cpu_node_id(const MachineState *ms, int idx) X86MachineState *x86ms = X86_MACHINE(ms); X86CPUTopoInfo topo_info; - topo_info.dies_per_pkg = x86ms->smp_dies; - topo_info.cores_per_die = ms->smp.cores; - topo_info.threads_per_core = ms->smp.threads; - + init_topo_info(&topo_info, x86ms); assert(idx < ms->possible_cpus->len); x86_topo_ids_from_apicid(ms->possible_cpus->cpus[idx].arch_id, @@ -177,9 +171,7 @@ const CPUArchIdList *x86_possible_cpu_arch_ids(MachineState *ms) sizeof(CPUArchId) * max_cpus); ms->possible_cpus->len = max_cpus; - topo_info.dies_per_pkg = x86ms->smp_dies; - topo_info.cores_per_die = ms->smp.cores; - topo_info.threads_per_core = ms->smp.threads; + init_topo_info(&topo_info, x86ms); for (i = 0; i < ms->possible_cpus->len; i++) { X86CPUTopoIDs topo_ids; diff --git a/include/hw/i386/topology.h b/include/hw/i386/topology.h index ba52d49079..ef0ab0b6a3 100644 --- a/include/hw/i386/topology.h +++ b/include/hw/i386/topology.h @@ -40,23 +40,17 @@ #include "qemu/bitops.h" +#include "hw/i386/x86.h" -/* APIC IDs can be 32-bit, but beware: APIC IDs > 255 require x2APIC support - */ -typedef uint32_t apic_id_t; - -typedef struct X86CPUTopoIDs { - unsigned pkg_id; - unsigned die_id; - unsigned core_id; - unsigned smt_id; -} X86CPUTopoIDs; - -typedef struct X86CPUTopoInfo { - unsigned dies_per_pkg; - unsigned cores_per_die; - unsigned threads_per_core; -} X86CPUTopoInfo; +static inline void init_topo_info(X86CPUTopoInfo *topo_info, + const X86MachineState *x86ms) +{ + MachineState *ms = MACHINE(x86ms); + + topo_info->dies_per_pkg = x86ms->smp_dies; + topo_info->cores_per_die = ms->smp.cores; + topo_info->threads_per_core = ms->smp.threads; +} /* Return the bit width needed for 'count' IDs */ diff --git a/include/hw/i386/x86.h b/include/hw/i386/x86.h index 4b84917885..ad62b01cf2 100644 --- a/include/hw/i386/x86.h +++ b/include/hw/i386/x86.h @@ -36,6 +36,23 @@ typedef struct { bool compat_apic_id_mode; } X86MachineClass; +/* APIC IDs can be 32-bit, but beware: APIC IDs > 255 require x2APIC support + */ +typedef uint32_t apic_id_t; + +typedef struct X86CPUTopoIDs { + unsigned pkg_id; + unsigned die_id; + unsigned core_id; + unsigned smt_id; +} X86CPUTopoIDs; + +typedef struct X86CPUTopoInfo { + unsigned dies_per_pkg; + unsigned cores_per_die; + unsigned threads_per_core; +} X86CPUTopoInfo; + typedef struct { /*< private >*/ MachineState parent; From patchwork Thu Feb 13 18:16:58 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Babu Moger X-Patchwork-Id: 11380997 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id F2BB11395 for ; Thu, 13 Feb 2020 18:23:40 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id C844A21734 for ; Thu, 13 Feb 2020 18:23:40 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=amdcloud.onmicrosoft.com header.i=@amdcloud.onmicrosoft.com header.b="GxvMmZ0C" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org C844A21734 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=amd.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:57672 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j2J9I-0001Wq-0i for patchwork-qemu-devel@patchwork.kernel.org; Thu, 13 Feb 2020 13:23:40 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:40626) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j2J2w-0001nf-DR for qemu-devel@nongnu.org; Thu, 13 Feb 2020 13:17:08 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1j2J2u-0007Fz-C4 for qemu-devel@nongnu.org; Thu, 13 Feb 2020 13:17:05 -0500 Received: from mail-bn7nam10on2060b.outbound.protection.outlook.com ([2a01:111:f400:7e8a::60b]:6189 helo=NAM10-BN7-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1j2J2u-0007B7-42 for qemu-devel@nongnu.org; Thu, 13 Feb 2020 13:17:04 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=YsOrrJ9Xs+d6Be3M6thdrECin+9KtmqJNDdpuLgVPPcC4K/wcqzDMgqeN8hTsvfZTfqa7J3X62UCAUorG8CM03WOSCMZPSL/DH06ogq3EUsfGIkKSAb1hDkUGYm6IxP7BtKy+Au+3xufaLxz6vLJuoLamQXKLZZV5438ACDkmC02MI54CQawSd88jFSpw5hnazM7eh78l+VTUZeBU4k6O+U/xkh4lorhIa7JCixVCJ30PvxnNzDv++Xy95R9F7mBRqpN3cdghb8q8yW06u/SB3vhwoOOZUgCjKCl80u2CwSd5lmN5PtYest/cmffmzDzdY2OmWkDHDuTn4x/y8Ls2A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=OY5EblooCvrRGolnk6yNopmDzImb23dQ0t5sMPQDJgE=; b=jvt3fYfHxRgshLxHJJ/YP34J+mV1j3mKr3GMxR9wSkk1ViFGEj5TwKuCVbKYv5e5RX/MnStj27gqVdV2LwSq4vclMarXZG/+rLenUW+QX7mMGEcUqyBNkJuGNDomRLDuVljZ2rWUubhSBRg/8ujSv9mD74SyG/w5fPfRsuLmA/ppHoOU6C59Wua0XjjjL3cv530jH+eGkO97bJhnLy3h4VIcR0frow+5MFl+eppblvMnkayyBzouoOGOEWIEmzlKROs5uyHsiZQFEg9uaRMK90NSdaJPEIIBUUgNzF7zKQ1LFk+LISTfssq4q8cgxVEDkLwXG776KFx5omIQbSeyTg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amdcloud.onmicrosoft.com; s=selector2-amdcloud-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=OY5EblooCvrRGolnk6yNopmDzImb23dQ0t5sMPQDJgE=; b=GxvMmZ0COYVXajau2YkVuS4XLkLy2E+/bq9CW8kSeWES16TBik4c+xDuFNNqu/ca/4ZvKnW88KD7brIHTVkFO6Rd+QDVW4Q8On+F+3N3TVIvPBqVwIjAvcq87jFlh08c5Ybfa2UHHLyPKFIw29HKPcp4m6QdZwUvJHrFaQP2CXk= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Babu.Moger@amd.com; Received: from CY4PR12MB1574.namprd12.prod.outlook.com (10.172.71.23) by CY4PR12MB1318.namprd12.prod.outlook.com (10.168.164.138) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2707.24; Thu, 13 Feb 2020 18:16:59 +0000 Received: from CY4PR12MB1574.namprd12.prod.outlook.com ([fe80::e0cc:653a:e9bc:aa8e]) by CY4PR12MB1574.namprd12.prod.outlook.com ([fe80::e0cc:653a:e9bc:aa8e%2]) with mapi id 15.20.2707.030; Thu, 13 Feb 2020 18:16:59 +0000 Subject: [PATCH v4 05/16] machine: Add SMP Sockets in CpuTopology From: Babu Moger To: ehabkost@redhat.com, marcel.apfelbaum@gmail.com, pbonzini@redhat.com, rth@twiddle.net, mst@redhat.com, imammedo@redhat.com Date: Thu, 13 Feb 2020 12:16:58 -0600 Message-ID: <158161781807.48948.6804322747644119810.stgit@naples-babu.amd.com> In-Reply-To: <158161767653.48948.10578064482878399556.stgit@naples-babu.amd.com> References: <158161767653.48948.10578064482878399556.stgit@naples-babu.amd.com> User-Agent: StGit/unknown-version X-ClientProxiedBy: SN1PR12CA0086.namprd12.prod.outlook.com (2603:10b6:802:21::21) To CY4PR12MB1574.namprd12.prod.outlook.com (2603:10b6:910:e::23) MIME-Version: 1.0 Received: from naples-babu.amd.com (165.204.78.2) by SN1PR12CA0086.namprd12.prod.outlook.com (2603:10b6:802:21::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2707.29 via Frontend Transport; Thu, 13 Feb 2020 18:16:58 +0000 X-Originating-IP: [165.204.78.2] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 224af5bf-d630-4073-8591-08d7b0b0eabb X-MS-TrafficTypeDiagnostic: CY4PR12MB1318:|CY4PR12MB1318: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:7219; X-Forefront-PRVS: 031257FE13 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4636009)(136003)(366004)(39860400002)(346002)(396003)(376002)(189003)(199004)(66476007)(66556008)(66946007)(81166006)(26005)(186003)(316002)(2906002)(52116002)(8936002)(8676002)(478600001)(103116003)(86362001)(7696005)(5660300002)(81156014)(4326008)(956004)(16526019)(44832011)(55016002); DIR:OUT; SFP:1101; SCL:1; SRVR:CY4PR12MB1318; H:CY4PR12MB1574.namprd12.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; Received-SPF: None (protection.outlook.com: amd.com does not designate permitted sender hosts) X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: QjVUQfmaXBadT/OsaOcMqQWoA7eV39V6U9laXI+8l7y14xIiofxxS3DGPTyiEvcoB7vBfKPwK9dqDl9bL0cia1F1Rn8jrjsmBTw+OBWCwdEHqtUwvJzUVxBkyg8iNud0vzEaCW3vV9X9BvCL7HwZzU6CT4uBulO9CMA029IO7a15FXOBwcFVIQ9ifOM1NShapGvahUGv1r41xrZ7ieJ2dgzP+TXBmzuQ1sNwjTFBPYYDuLFoQ+4mKgtnzoHxc/CMyCFQb3Zc3rf2dfORgupuIwDoXhfc9YmS23U4nJg/zDMJ7KOiqwaYzGmfetyo5HEClH3MTPcjCpTQqyMTuc3EAxxakf0b4t2Tw+l1TSpfSpPsBij2PCVMiM38KQgb3MsQUiDvzlzVd39MvEwLk8n2V8fDeJFsI/Yea4OJCvmNj16rCT5p5nhSpodMtD8fm42x X-MS-Exchange-AntiSpam-MessageData: nk7sN+v6xbn1NyPfMncSHcrelD8m/l+9Ehvv4wgdTaUlFSOSbnSufWfTl/PaazMMZ2F/E7m1TezAPw0LFjo9y4xB4BhvT6o7RAHOkA3Yq6sVGMf5V0DXWMhjgwnTP1Ey5XcIBUVOyHw+L86dXGwU9Q== X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 224af5bf-d630-4073-8591-08d7b0b0eabb X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Feb 2020 18:16:59.6634 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: MpnLZ9a06uw4OixLToqlNZyVLnglgY0zWnv/6XgiLXHBy1QWne+agDbztpP9EPFq X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR12MB1318 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 2a01:111:f400:7e8a::60b X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Store the smp sockets in CpuTopology. The socket information required to build the apic id in EPYC mode. Right now socket information is not passed to down when decoding the apic id. Add the socket information here. Signed-off-by: Babu Moger Reviewed-by: Eduardo Habkost Reviewed-by: Igor Mammedov --- hw/core/machine.c | 1 + hw/i386/pc.c | 1 + include/hw/boards.h | 2 ++ vl.c | 1 + 4 files changed, 5 insertions(+) diff --git a/hw/core/machine.c b/hw/core/machine.c index 023548b4f3..ea03c25565 100644 --- a/hw/core/machine.c +++ b/hw/core/machine.c @@ -789,6 +789,7 @@ static void smp_parse(MachineState *ms, QemuOpts *opts) ms->smp.cpus = cpus; ms->smp.cores = cores; ms->smp.threads = threads; + ms->smp.sockets = sockets; } if (ms->smp.cpus > 1) { diff --git a/hw/i386/pc.c b/hw/i386/pc.c index 9803413dd9..f13721ac43 100644 --- a/hw/i386/pc.c +++ b/hw/i386/pc.c @@ -978,6 +978,7 @@ void pc_smp_parse(MachineState *ms, QemuOpts *opts) ms->smp.cpus = cpus; ms->smp.cores = cores; ms->smp.threads = threads; + ms->smp.sockets = sockets; x86ms->smp_dies = dies; } diff --git a/include/hw/boards.h b/include/hw/boards.h index 24cbeecbae..a50a2d779e 100644 --- a/include/hw/boards.h +++ b/include/hw/boards.h @@ -256,12 +256,14 @@ typedef struct DeviceMemoryState { * @cpus: the number of present logical processors on the machine * @cores: the number of cores in one package * @threads: the number of threads in one core + * @sockets: the number of sockets on the machine * @max_cpus: the maximum number of logical processors on the machine */ typedef struct CpuTopology { unsigned int cpus; unsigned int cores; unsigned int threads; + unsigned int sockets; unsigned int max_cpus; } CpuTopology; diff --git a/vl.c b/vl.c index 94508300c3..3f6d396a95 100644 --- a/vl.c +++ b/vl.c @@ -3819,6 +3819,7 @@ int main(int argc, char **argv, char **envp) current_machine->smp.max_cpus = machine_class->default_cpus; current_machine->smp.cores = 1; current_machine->smp.threads = 1; + current_machine->smp.sockets = 1; machine_class->smp_parse(current_machine, qemu_opts_find(qemu_find_opts("smp-opts"), NULL)); From patchwork Thu Feb 13 18:17:04 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Babu Moger X-Patchwork-Id: 11380999 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id D6AFB1395 for ; Thu, 13 Feb 2020 18:23:47 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id AA8D121734 for ; Thu, 13 Feb 2020 18:23:47 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=amdcloud.onmicrosoft.com header.i=@amdcloud.onmicrosoft.com header.b="RIhQK5fW" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org AA8D121734 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=amd.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:57674 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j2J9O-0001jS-TC for patchwork-qemu-devel@patchwork.kernel.org; Thu, 13 Feb 2020 13:23:46 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:40798) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j2J31-0001sS-7m for qemu-devel@nongnu.org; Thu, 13 Feb 2020 13:17:12 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1j2J30-0007QP-6C for qemu-devel@nongnu.org; Thu, 13 Feb 2020 13:17:11 -0500 Received: from mail-co1nam11on2064.outbound.protection.outlook.com ([40.107.220.64]:57185 helo=NAM11-CO1-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1j2J2z-0007Lb-H0 for qemu-devel@nongnu.org; Thu, 13 Feb 2020 13:17:10 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=PzfQ/mffsmKF7FCpY7cGIe6PFrtqpjIyGKnybwQPFDqQ2p3CVdQJuLWnAjHTNJC9zgezdVT+l8H6IULC7hCo3wkkTQ3P8i5odwb5mOtmDtKeSeRy8dfhU0SZtEKrsvLpT1ZlpC+XlcNLu2P09pSx7/lScLFBAI1+NdwdEnT/caV7pNWpT8SxsZh3Gpbf18mtQAW2NdXqSd3kPdXOPCqQwglJnQn+HDXFiuzMI3cIf7etdsaHsx0cys59gYibywCQ6oyjON8E3/H5EvilTVB83bW54Ea0oG/x1c8ViBjgwqEa/BIrqq7a9ckAUR2MJBpegcfET4aHDOmVWfu8LxRdBw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=nlEw3NCuvSauq7ab74+CBDRSTA1LiZ4dpyR+996CpIk=; b=YwZH1Ht/W41C8Vo06mwzqKMp1hyJhkIHLBewOWL6cwNVoCabFew+sapLWGgniI/kLho+8klTTQAHwZMR11Q4SsWZdoMyzWmDtdPAPPjDqSM0d9OpdU0oki9KW90DxsvYwe5fXoLIDVQOtgpRt9qEIUrYRyTBMaR6vTuQLbpis2RU2wmwtvZoqZLOr5iRLw4457m7mouMpnJqKHzWjUvtB/Lwk53SZWB2hrh7jKnEyu5K/drJ9QGTHoRYOnctzigTe9c+Osah2/kTI8WFP42BsV+sDdggtY8ZdKaHbW8melQME+eN7DyDy0gzqZAF8F79z+rf3EyX0IZiCB5Kh0SDHQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amdcloud.onmicrosoft.com; s=selector2-amdcloud-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=nlEw3NCuvSauq7ab74+CBDRSTA1LiZ4dpyR+996CpIk=; b=RIhQK5fWKMzVpn/d+VqZttuaSoidQ3cJSYfWYwAA7R+rgc2cIgengoAsWdsv3Xw7XzJnF9GXQcwROVPCzDeObslzzmNZ9E/nqL14sMd9nKW0cA82dcXXjnWwF+0Y+Gtz7CybKhyiwIpd5eL3xJZiaZ+X+0dLCzc6EI3g4HIsgK4= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Babu.Moger@amd.com; Received: from CY4PR12MB1574.namprd12.prod.outlook.com (10.172.71.23) by CY4PR12MB1318.namprd12.prod.outlook.com (10.168.164.138) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2707.24; Thu, 13 Feb 2020 18:17:06 +0000 Received: from CY4PR12MB1574.namprd12.prod.outlook.com ([fe80::e0cc:653a:e9bc:aa8e]) by CY4PR12MB1574.namprd12.prod.outlook.com ([fe80::e0cc:653a:e9bc:aa8e%2]) with mapi id 15.20.2707.030; Thu, 13 Feb 2020 18:17:06 +0000 Subject: [PATCH v4 06/16] hw/i386: Update structures for nodes_per_pkg From: Babu Moger To: ehabkost@redhat.com, marcel.apfelbaum@gmail.com, pbonzini@redhat.com, rth@twiddle.net, mst@redhat.com, imammedo@redhat.com Date: Thu, 13 Feb 2020 12:17:04 -0600 Message-ID: <158161782489.48948.9328710425201785950.stgit@naples-babu.amd.com> In-Reply-To: <158161767653.48948.10578064482878399556.stgit@naples-babu.amd.com> References: <158161767653.48948.10578064482878399556.stgit@naples-babu.amd.com> User-Agent: StGit/unknown-version X-ClientProxiedBy: SN1PR12CA0048.namprd12.prod.outlook.com (2603:10b6:802:20::19) To CY4PR12MB1574.namprd12.prod.outlook.com (2603:10b6:910:e::23) MIME-Version: 1.0 Received: from naples-babu.amd.com (165.204.78.2) by SN1PR12CA0048.namprd12.prod.outlook.com (2603:10b6:802:20::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2729.22 via Frontend Transport; Thu, 13 Feb 2020 18:17:05 +0000 X-Originating-IP: [165.204.78.2] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 03bf95e2-2759-46c6-a238-08d7b0b0eee5 X-MS-TrafficTypeDiagnostic: CY4PR12MB1318:|CY4PR12MB1318: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:139; X-Forefront-PRVS: 031257FE13 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4636009)(136003)(366004)(39860400002)(346002)(396003)(376002)(189003)(199004)(66476007)(66556008)(66946007)(81166006)(26005)(186003)(316002)(2906002)(52116002)(8936002)(15650500001)(8676002)(478600001)(103116003)(86362001)(7696005)(5660300002)(81156014)(4326008)(956004)(16526019)(44832011)(55016002); DIR:OUT; SFP:1101; SCL:1; SRVR:CY4PR12MB1318; H:CY4PR12MB1574.namprd12.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; Received-SPF: None (protection.outlook.com: amd.com does not designate permitted sender hosts) X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Bh2NiwUemJJn84yoedPV+E9t3gf96Doxwhjl87aFEOOYLcT0v5cD7sha7qrcoYSdXCQYzzSK5IS3bKiPvIdhRoLCLR9t3Q69ZQQdpRW2Iuqc6FE0qQO/8mI7MuFVRskfZlnxaUXSSelISZrWQWb/utEqmhDoZ6KiGu3xNMRNVkSdLSXj/Rk0+JWDXH0LS4GTBW1PMH++axVHgxF/qCtgJq87jfMH9jCiLbzEd1QV9TvFcMK/kABvbPpdbVMenKz7qba3sBChnN6/M6jQeHs1ZJYguvzJYBSG6s45GpAl9EgZXaGXlPzXRrauYtpp4CsfTvJ+Wa3QvchtLV1T/bmnD4BTh8lC8TPToGUJdSpZ0jAZwlC7aSCeYj8lDtkO9B9Lan25zwZLq9GbxAXTmVL1kmGTJFMuD603sYdtKY6xAZdJgmFK2UDc9Vmyx7BsoMoi X-MS-Exchange-AntiSpam-MessageData: PmbTDmR0vkoHktK9ugC13hXnGm/aTXyv8HKTWWmESuCBscXt3cvgAPsf2tM/o5D8asgovgybhjpUsKSSh1ZbhMqbiKCj7Wnb8uIl3scIe8SuzJAslS50l/ogeCu5jttVEmwlhVKLgXF07dVzGvVbyQ== X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 03bf95e2-2759-46c6-a238-08d7b0b0eee5 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Feb 2020 18:17:06.7062 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: zDv2BlpmcTHH+o9jvpijVqgLeUbXB3wKC8x9CxDjRFO2bvme1ay2UcSgfOz0uYps X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR12MB1318 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 40.107.220.64 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Update structures X86CPUTopoIDs and CPUX86State to hold the nodes_per_pkg. This is required to build EPYC mode topology. Signed-off-by: Babu Moger --- hw/i386/pc.c | 1 + hw/i386/x86.c | 2 ++ include/hw/i386/topology.h | 2 ++ include/hw/i386/x86.h | 1 + target/i386/cpu.c | 1 + target/i386/cpu.h | 1 + 6 files changed, 8 insertions(+) diff --git a/hw/i386/pc.c b/hw/i386/pc.c index f13721ac43..02fdb3d506 100644 --- a/hw/i386/pc.c +++ b/hw/i386/pc.c @@ -1753,6 +1753,7 @@ static void pc_cpu_pre_plug(HotplugHandler *hotplug_dev, init_topo_info(&topo_info, x86ms); env->nr_dies = x86ms->smp_dies; + env->nr_nodes = ms->numa_state->num_nodes / ms->smp.sockets; /* * If APIC ID is not set, diff --git a/hw/i386/x86.c b/hw/i386/x86.c index 083effb2f5..3d944f68e6 100644 --- a/hw/i386/x86.c +++ b/hw/i386/x86.c @@ -89,11 +89,13 @@ void x86_cpu_new(X86MachineState *x86ms, int64_t apic_id, Error **errp) Object *cpu = NULL; Error *local_err = NULL; CPUX86State *env = NULL; + MachineState *ms = MACHINE(x86ms); cpu = object_new(MACHINE(x86ms)->cpu_type); env = &X86_CPU(cpu)->env; env->nr_dies = x86ms->smp_dies; + env->nr_nodes = ms->numa_state->num_nodes / ms->smp.sockets; object_property_set_uint(cpu, apic_id, "apic-id", &local_err); object_property_set_bool(cpu, true, "realized", &local_err); diff --git a/include/hw/i386/topology.h b/include/hw/i386/topology.h index ef0ab0b6a3..522c77e6a9 100644 --- a/include/hw/i386/topology.h +++ b/include/hw/i386/topology.h @@ -41,12 +41,14 @@ #include "qemu/bitops.h" #include "hw/i386/x86.h" +#include "sysemu/numa.h" static inline void init_topo_info(X86CPUTopoInfo *topo_info, const X86MachineState *x86ms) { MachineState *ms = MACHINE(x86ms); + topo_info->nodes_per_pkg = ms->numa_state->num_nodes / ms->smp.sockets; topo_info->dies_per_pkg = x86ms->smp_dies; topo_info->cores_per_die = ms->smp.cores; topo_info->threads_per_core = ms->smp.threads; diff --git a/include/hw/i386/x86.h b/include/hw/i386/x86.h index ad62b01cf2..d76fd0bbb1 100644 --- a/include/hw/i386/x86.h +++ b/include/hw/i386/x86.h @@ -48,6 +48,7 @@ typedef struct X86CPUTopoIDs { } X86CPUTopoIDs; typedef struct X86CPUTopoInfo { + unsigned nodes_per_pkg; unsigned dies_per_pkg; unsigned cores_per_die; unsigned threads_per_core; diff --git a/target/i386/cpu.c b/target/i386/cpu.c index 7e630f47ac..5d6edfd09b 100644 --- a/target/i386/cpu.c +++ b/target/i386/cpu.c @@ -6761,6 +6761,7 @@ static void x86_cpu_initfn(Object *obj) FeatureWord w; env->nr_dies = 1; + env->nr_nodes = 1; cpu_set_cpustate_pointers(cpu); object_property_add(obj, "family", "int", diff --git a/target/i386/cpu.h b/target/i386/cpu.h index af282936a7..627a8cb9be 100644 --- a/target/i386/cpu.h +++ b/target/i386/cpu.h @@ -1603,6 +1603,7 @@ typedef struct CPUX86State { TPRAccess tpr_access_type; unsigned nr_dies; + unsigned nr_nodes; } CPUX86State; struct kvm_msrs; From patchwork Thu Feb 13 18:17:12 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Babu Moger X-Patchwork-Id: 11381003 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 6C2821395 for ; Thu, 13 Feb 2020 18:25:33 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 42D1E21734 for ; Thu, 13 Feb 2020 18:25:33 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=amdcloud.onmicrosoft.com header.i=@amdcloud.onmicrosoft.com header.b="1kOm0IjA" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 42D1E21734 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=amd.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:57718 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j2JB6-0004QI-Fr for patchwork-qemu-devel@patchwork.kernel.org; Thu, 13 Feb 2020 13:25:32 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:41070) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j2J37-000206-4i for qemu-devel@nongnu.org; Thu, 13 Feb 2020 13:17:18 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1j2J36-0007dh-5z for qemu-devel@nongnu.org; Thu, 13 Feb 2020 13:17:17 -0500 Received: from mail-bn7nam10on2062b.outbound.protection.outlook.com ([2a01:111:f400:7e8a::62b]:4288 helo=NAM10-BN7-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1j2J35-0007aJ-Ty for qemu-devel@nongnu.org; Thu, 13 Feb 2020 13:17:16 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=gily5Hn7C9dm6X58g/N3Le1CQ/e6hOu5kkNB+0bhURNcrYV1cCqO/EEAPtl3aqQ4HRU2bLStyM1TYqnGsSl4s2XLMeNEAaT7HIFrh3JZOsEoAEu95k6I1rFmdEKwH5GIP9cjvPap3CpCb1dBOv6b71Yqp61Vw0QSqDV/1D9BCNA9OJoAmLEVl78VYgl0Ml7OrintHHYXcWOfmgxgxqDEYReJ+ddV+O6gKMyqmFF1uAArwG2+mIs9swdzLF7Mvth61RB0Emp2zA5ICfDrYu5Pyn8RXUbICoWkGvH3IlKfez7enQsoM7p1xkN7q2av3VMkjV5EWCdDLSdyYTbHL882lQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=uF9GO/4yHRqo0s96wTWjK7Jp2KhmVyoDWXsSMuoi0tw=; b=fw2Ku1Y97oZ50wmIFnnyX8DR99Rh3Vasl/kns0JrCceUte4BXdmdNsRWautSq2Cyq4jtUWdnWaWoUqXE+vnpst2+p+AgHgXxgy22Y6PqJk8IlEXvdO+PkNc3c9eUdXkLctX2fd0djR/JD3W8cVsdtaRcE5vW6q9wYHfMY/0AYQxc8YlcM3S8zSZ2HebW3KxPGxA43zz/1Ek9Qq7JVkY8H3gMFqmpCDMXUHsNmXkA2AnCe4C9ST9qmlRK0FHnU54xNtlfVeUUpFufti33WGcW/L7dKMeKo/4A7w7PJOOF00gC+NK6q/kLKNnm3L7hUG2fy1EQUuOvssjJeqhzI8/V5A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amdcloud.onmicrosoft.com; s=selector2-amdcloud-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=uF9GO/4yHRqo0s96wTWjK7Jp2KhmVyoDWXsSMuoi0tw=; b=1kOm0IjAjzjhi4UguT5K/wRYRrm6Gm4ervXxOcb81wAsNwOPsuKFtlJP0rjrZABdOTAK4IpeVvjCZ1KOBriTShAOF2pe8iefxcCXlpvPM6YgDwI5nUbExWkvPYTDGausY/X0iOna/C/YsvMoLy+SyBi0Bv3Ivk/xPV2Hj1Z3a1w= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Babu.Moger@amd.com; Received: from CY4PR12MB1574.namprd12.prod.outlook.com (10.172.71.23) by CY4PR12MB1318.namprd12.prod.outlook.com (10.168.164.138) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2707.24; Thu, 13 Feb 2020 18:17:13 +0000 Received: from CY4PR12MB1574.namprd12.prod.outlook.com ([fe80::e0cc:653a:e9bc:aa8e]) by CY4PR12MB1574.namprd12.prod.outlook.com ([fe80::e0cc:653a:e9bc:aa8e%2]) with mapi id 15.20.2707.030; Thu, 13 Feb 2020 18:17:13 +0000 Subject: [PATCH v4 07/16] hw/i386: Rename apicid_from_topo_ids to x86_apicid_from_topo_ids From: Babu Moger To: ehabkost@redhat.com, marcel.apfelbaum@gmail.com, pbonzini@redhat.com, rth@twiddle.net, mst@redhat.com, imammedo@redhat.com Date: Thu, 13 Feb 2020 12:17:12 -0600 Message-ID: <158161783201.48948.10267676745424104315.stgit@naples-babu.amd.com> In-Reply-To: <158161767653.48948.10578064482878399556.stgit@naples-babu.amd.com> References: <158161767653.48948.10578064482878399556.stgit@naples-babu.amd.com> User-Agent: StGit/unknown-version X-ClientProxiedBy: SN1PR12CA0110.namprd12.prod.outlook.com (2603:10b6:802:21::45) To CY4PR12MB1574.namprd12.prod.outlook.com (2603:10b6:910:e::23) MIME-Version: 1.0 Received: from naples-babu.amd.com (165.204.78.2) by SN1PR12CA0110.namprd12.prod.outlook.com (2603:10b6:802:21::45) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2729.25 via Frontend Transport; Thu, 13 Feb 2020 18:17:12 +0000 X-Originating-IP: [165.204.78.2] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 8116797b-6051-45f2-94d4-08d7b0b0f2ed X-MS-TrafficTypeDiagnostic: CY4PR12MB1318:|CY4PR12MB1318: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:534; X-Forefront-PRVS: 031257FE13 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4636009)(136003)(366004)(39860400002)(346002)(396003)(376002)(189003)(199004)(66476007)(66556008)(66946007)(81166006)(26005)(186003)(316002)(2906002)(52116002)(8936002)(8676002)(478600001)(103116003)(86362001)(7696005)(5660300002)(81156014)(4326008)(956004)(16526019)(44832011)(55016002); DIR:OUT; SFP:1101; SCL:1; SRVR:CY4PR12MB1318; H:CY4PR12MB1574.namprd12.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; Received-SPF: None (protection.outlook.com: amd.com does not designate permitted sender hosts) X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: A4QfQqYHs0pn65veNKnFogUO+KdkpioOC/wme8fjg15DAYMXIYYTTAISC4OzOrTFTK3IMWebAuv647+Msud5AhOb2wO3IwuafZXXgMaR0NuIlJP8S/jOr8TC+MPAEVc3DcbN0p6fVbVlh5c/c0aWtFbWApunri3CJqviwwBpv1fu1G1vDSlJv2vjiMkQ+bVZ32XUTRwa+8YabA7IEP2qmFFuVBTx6yJlwvsJbiX7YkwyRAt7RgtMR6dPCofsL60AT7akcg9rTvjTcRw6nQD+23iEgjq/cBODqbmrLDrctwVyqNaUsJOr+81Lhwrflj9hQP/Z+wGo6YoSW7HcZhcpbj8zkJFWYcShaM4e/lFOeXT7+GjUHOPWyYVXiGDf9WnJo9NxvcdVTFotIwtzPmjIqLlhfVhAcCFlEfCLlU7IhUX9+Bbwu+DYJTuz9dZ8SrYO X-MS-Exchange-AntiSpam-MessageData: whk8lnMwrE/NelSTpcAWykYEhWmtUI8khp7oWVIvi2kdQXzJK0KIdWyOrKE/EDBNZLIGR9PPR6GDYkYS1TWopXFkE6kjk0nmXJ2SyEDt2Mej5TJ2lblrxpBNVtUJHHqZgTUwgo1HZi0BEWzXm0y79Q== X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8116797b-6051-45f2-94d4-08d7b0b0f2ed X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Feb 2020 18:17:13.4502 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: +HzJX8KD6sl9jAmkldXQ+we06JSHZW8o19OBpkwGCzGxBLLzBSyWke+l6Ze0jM4A X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR12MB1318 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 2a01:111:f400:7e8a::62b X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" For consistancy rename apicid_from_topo_ids to x86_apicid_from_topo_ids. No functional change. Signed-off-by: Babu Moger Reviewed-by: Igor Mammedov --- hw/i386/pc.c | 2 +- include/hw/i386/topology.h | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/hw/i386/pc.c b/hw/i386/pc.c index 02fdb3d506..be72a49716 100644 --- a/hw/i386/pc.c +++ b/hw/i386/pc.c @@ -1808,7 +1808,7 @@ static void pc_cpu_pre_plug(HotplugHandler *hotplug_dev, topo_ids.die_id = cpu->die_id; topo_ids.core_id = cpu->core_id; topo_ids.smt_id = cpu->thread_id; - cpu->apic_id = apicid_from_topo_ids(&topo_info, &topo_ids); + cpu->apic_id = x86_apicid_from_topo_ids(&topo_info, &topo_ids); } cpu_slot = pc_find_cpu_slot(MACHINE(pcms), cpu->apic_id, &idx); diff --git a/include/hw/i386/topology.h b/include/hw/i386/topology.h index 522c77e6a9..3158157430 100644 --- a/include/hw/i386/topology.h +++ b/include/hw/i386/topology.h @@ -107,8 +107,8 @@ static inline unsigned apicid_pkg_offset(X86CPUTopoInfo *topo_info) * * The caller must make sure core_id < nr_cores and smt_id < nr_threads. */ -static inline apic_id_t apicid_from_topo_ids(X86CPUTopoInfo *topo_info, - const X86CPUTopoIDs *topo_ids) +static inline apic_id_t x86_apicid_from_topo_ids(X86CPUTopoInfo *topo_info, + const X86CPUTopoIDs *topo_ids) { return (topo_ids->pkg_id << apicid_pkg_offset(topo_info)) | (topo_ids->die_id << apicid_die_offset(topo_info)) | @@ -160,7 +160,7 @@ static inline apic_id_t x86_apicid_from_cpu_idx(X86CPUTopoInfo *topo_info, { X86CPUTopoIDs topo_ids; x86_topo_ids_from_idx(topo_info, cpu_index, &topo_ids); - return apicid_from_topo_ids(topo_info, &topo_ids); + return x86_apicid_from_topo_ids(topo_info, &topo_ids); } #endif /* HW_I386_TOPOLOGY_H */ From patchwork Thu Feb 13 18:17:18 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Babu Moger X-Patchwork-Id: 11381007 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id C74E81820 for ; Thu, 13 Feb 2020 18:27:38 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 9D90C217F4 for ; Thu, 13 Feb 2020 18:27:38 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=amdcloud.onmicrosoft.com header.i=@amdcloud.onmicrosoft.com header.b="RXmCwjO8" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 9D90C217F4 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=amd.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:57736 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j2JD7-0007BJ-Rg for patchwork-qemu-devel@patchwork.kernel.org; Thu, 13 Feb 2020 13:27:37 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:41532) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j2J3F-0002IO-ON for qemu-devel@nongnu.org; Thu, 13 Feb 2020 13:17:27 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1j2J3E-00080e-6m for qemu-devel@nongnu.org; Thu, 13 Feb 2020 13:17:25 -0500 Received: from mail-bn8nam11on2059.outbound.protection.outlook.com ([40.107.236.59]:6154 helo=NAM11-BN8-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1j2J3E-0007yQ-07 for qemu-devel@nongnu.org; Thu, 13 Feb 2020 13:17:24 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=OYihzIUEE0aKX2x6sHGWQP9mdWTOiguOyvAlW6sdHm+LwJT/XVs9r8eizl0bc+GgYpCnaUtk4JniGoU/d9BZDbddkLyqPWcvyRZPRI+pzozHaEpwi6RIHXvvdkn52E905c6NKP1g6347m0tNfIP6+e9cGPccC9Q/tNex/jzbxSOZQ3eak6LjJYz8wjmji1S+wQyNi81iaI4J5vP3G0owGQ/oziUQtJLAwVFNIalCn41jhAmThvDhI5tShWCCnlfQcOFMWMxUqZjAHGqzAQK3R3tG54YBvktrTgQ/15dcUmo3kMQdZ9uOIwWOaxT7p1Zvh0F6ri0LkUcRBMbpsZ2glg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=oIYBW2gJhBgSWdcDai4CPkYqkkG7EamfuD4aXmDQjQc=; b=jvYzwe53jLZywJuBqcykNWb2JaObzT7sgmQlqbYccoQ8lFVsby0tZHZsN23jMzXxsCRZQ88kxeU24UVJnUrJRfZ0CvLIuXvMCHlSve+vOSzXVTpYQTyxlM5Y8T5GoY8COfijYKrweYdqBGZtZw4xajvLwhwBjCoAPoL1G3/yAJc8SiuHpfGMYGHBAOkKqhFWNoblIiTkKtw6uLify7kyvTXvkiZaaFO6Yca78KvFh8BG4/QZoFaPByZUtMhouOpiT+h61aVbkIwVxs6zMbpFKh1TfzgiE9gClIk5/ELRKYMOF5efrbgWpXa1H7Z2Vhv8IKQ1gy23LRuw4xVfVLD5Kw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amdcloud.onmicrosoft.com; s=selector2-amdcloud-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=oIYBW2gJhBgSWdcDai4CPkYqkkG7EamfuD4aXmDQjQc=; b=RXmCwjO8zfoPVyJYwTzbaSpcbzxWKGp1AyIf2Cz4f55BtzCtPlbyk46sJThe3/5v7LKsSKDtWu62HWuvfnYGWQPogIsQkIBlqaHhsdKWdqvspjvcCUFpN2wQ0HvHGhdY6bld0doAv5VOhs/PccC9kOx6d9qtKbboyVhcz6aDzTA= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Babu.Moger@amd.com; Received: from CY4PR12MB1574.namprd12.prod.outlook.com (10.172.71.23) by CY4PR12MB1318.namprd12.prod.outlook.com (10.168.164.138) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2707.24; Thu, 13 Feb 2020 18:17:20 +0000 Received: from CY4PR12MB1574.namprd12.prod.outlook.com ([fe80::e0cc:653a:e9bc:aa8e]) by CY4PR12MB1574.namprd12.prod.outlook.com ([fe80::e0cc:653a:e9bc:aa8e%2]) with mapi id 15.20.2707.030; Thu, 13 Feb 2020 18:17:20 +0000 Subject: [PATCH v4 08/16] hw/386: Add EPYC mode topology decoding functions From: Babu Moger To: ehabkost@redhat.com, marcel.apfelbaum@gmail.com, pbonzini@redhat.com, rth@twiddle.net, mst@redhat.com, imammedo@redhat.com Date: Thu, 13 Feb 2020 12:17:18 -0600 Message-ID: <158161783872.48948.1827981450074223928.stgit@naples-babu.amd.com> In-Reply-To: <158161767653.48948.10578064482878399556.stgit@naples-babu.amd.com> References: <158161767653.48948.10578064482878399556.stgit@naples-babu.amd.com> User-Agent: StGit/unknown-version X-ClientProxiedBy: SN1PR12CA0095.namprd12.prod.outlook.com (2603:10b6:802:21::30) To CY4PR12MB1574.namprd12.prod.outlook.com (2603:10b6:910:e::23) MIME-Version: 1.0 Received: from naples-babu.amd.com (165.204.78.2) by SN1PR12CA0095.namprd12.prod.outlook.com (2603:10b6:802:21::30) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2729.25 via Frontend Transport; Thu, 13 Feb 2020 18:17:19 +0000 X-Originating-IP: [165.204.78.2] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: d335fec2-e8e9-46c9-3846-08d7b0b0f710 X-MS-TrafficTypeDiagnostic: CY4PR12MB1318:|CY4PR12MB1318: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:3826; X-Forefront-PRVS: 031257FE13 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4636009)(136003)(366004)(39860400002)(346002)(396003)(376002)(189003)(199004)(66476007)(66556008)(66946007)(81166006)(26005)(186003)(316002)(2906002)(52116002)(8936002)(8676002)(478600001)(103116003)(86362001)(7696005)(5660300002)(81156014)(4326008)(956004)(16526019)(44832011)(966005)(55016002); DIR:OUT; SFP:1101; SCL:1; SRVR:CY4PR12MB1318; H:CY4PR12MB1574.namprd12.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; Received-SPF: None (protection.outlook.com: amd.com does not designate permitted sender hosts) X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: U3nXuDyaFbtrD+Bds2qg7qVdzmwLZV/zVDvCWf7+rqKDuMmQcj4H46KxxXnQ9IgSfL4x066J/N/M3fajakvw0vsBhnCSDysVEGGZ0ie9fGGVT6dpP5ALxutxYlqpHUlTa8T3xp4v+IwcOpQe1jtUmHZ5L/caYeQbbqWqnownFkp7S+c3jNmT1i/vH50JH/4+oBo/qZH6fP+FA6kvgAjFECBhU7yRXWufCqcK5R0SEzUVbqiMx6SCFfe7aqsJn/cZum2NY6dQwqEus4InuqZb+3dME8Cs3Vot+6pWg06tpQfScsQIb1RVeMOHFF+czae0hK79FiKBcLXOonFvMNJ4Pim9AtK6ramr3ogLF1f3LVZWviqWKzRBfB8JVpKOR0VdQo4JdTfMa0lCDKZJaBq8aNiHfNBczmsdC5RgvDh5FPA2dCUSQIwwsWdzmsBMpIhmJto5yAI5iMFVM/DtJHo/h+hNj+s4sVcgvM26rWOQOSIWycUNg9L84kWXnThLy+gB1PoHo6wVkOIvgHxfXtxSDg== X-MS-Exchange-AntiSpam-MessageData: 9kOkYgQkTZsC4u+RL/SaErEiwfpVxjwR1flAuIdGJQfpbKykxDTknPdPNYA54ZPLtQMqKFhS4VPkz3FaKbqYVWKMBiE9BmvZNdyS7Ko61Iz3/+YT3a0lH41MnbEQA2NpGCzXHl+O/aG7UKsVEy353w== X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: d335fec2-e8e9-46c9-3846-08d7b0b0f710 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Feb 2020 18:17:20.4141 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: VT5L/qxj0IHA6xKKUGWNRfEvSl7d0FrHb2Fp+IPIUMptvp0ed2GpE5N485h+iokP X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR12MB1318 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 40.107.236.59 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" These functions add support for building EPYC mode topology given the smp details like numa nodes, cores, threads and sockets. The new apic id decoding is mostly similar to current apic id decoding except that it adds a new field llc_id when numa configured. Removes all the hardcoded values. Subsequent patches will use these functions to build the topology. Following functions are added. apicid_llc_width_epyc apicid_llc_offset_epyc apicid_pkg_offset_epyc apicid_from_topo_ids_epyc x86_topo_ids_from_idx_epyc x86_topo_ids_from_apicid_epyc x86_apicid_from_cpu_idx_epyc The topology details are available in Processor Programming Reference (PPR) for AMD Family 17h Model 01h, Revision B1 Processors. https://www.amd.com/system/files/TechDocs/55570-B1_PUB.zip Signed-off-by: Babu Moger --- include/hw/i386/topology.h | 93 ++++++++++++++++++++++++++++++++++++++++++++ include/hw/i386/x86.h | 1 2 files changed, 94 insertions(+) diff --git a/include/hw/i386/topology.h b/include/hw/i386/topology.h index 3158157430..d9319dc2ac 100644 --- a/include/hw/i386/topology.h +++ b/include/hw/i386/topology.h @@ -83,6 +83,11 @@ static inline unsigned apicid_die_width(X86CPUTopoInfo *topo_info) return apicid_bitwidth_for_count(topo_info->dies_per_pkg); } +/* Bit width of the node_id field per socket */ +static inline unsigned apicid_node_width_epyc(X86CPUTopoInfo *topo_info) +{ + return apicid_bitwidth_for_count(MAX(topo_info->nodes_per_pkg, 1)); +} /* Bit offset of the Core_ID field */ static inline unsigned apicid_core_offset(X86CPUTopoInfo *topo_info) @@ -103,6 +108,94 @@ static inline unsigned apicid_pkg_offset(X86CPUTopoInfo *topo_info) return apicid_die_offset(topo_info) + apicid_die_width(topo_info); } +#define LLC_OFFSET 3 /* Minimum LLC offset if numa configured */ + +/* Bit offset of the node_id field */ +static inline unsigned apicid_node_offset_epyc(X86CPUTopoInfo *topo_info) +{ + unsigned offset = apicid_die_offset(topo_info) + + apicid_die_width(topo_info); + + if (topo_info->nodes_per_pkg) { + return MAX(LLC_OFFSET, offset); + } else { + return offset; + } +} + +/* Bit offset of the Pkg_ID (socket ID) field */ +static inline unsigned apicid_pkg_offset_epyc(X86CPUTopoInfo *topo_info) +{ + return apicid_node_offset_epyc(topo_info) + apicid_node_width_epyc(topo_info); +} + +/* + * Make APIC ID for the CPU based on Pkg_ID, Core_ID, SMT_ID + * + * The caller must make sure core_id < nr_cores and smt_id < nr_threads. + */ +static inline apic_id_t x86_apicid_from_topo_ids_epyc(X86CPUTopoInfo *topo_info, + const X86CPUTopoIDs *topo_ids) +{ + return (topo_ids->pkg_id << apicid_pkg_offset_epyc(topo_info)) | + (topo_ids->node_id << apicid_node_offset_epyc(topo_info)) | + (topo_ids->die_id << apicid_die_offset(topo_info)) | + (topo_ids->core_id << apicid_core_offset(topo_info)) | + topo_ids->smt_id; +} + +static inline void x86_topo_ids_from_idx_epyc(X86CPUTopoInfo *topo_info, + unsigned cpu_index, + X86CPUTopoIDs *topo_ids) +{ + unsigned nr_nodes = MAX(topo_info->nodes_per_pkg, 1); + unsigned nr_dies = topo_info->dies_per_pkg; + unsigned nr_cores = topo_info->cores_per_die; + unsigned nr_threads = topo_info->threads_per_core; + unsigned cores_per_node = DIV_ROUND_UP((nr_dies * nr_cores * nr_threads), + nr_nodes); + + topo_ids->pkg_id = cpu_index / (nr_dies * nr_cores * nr_threads); + topo_ids->node_id = (cpu_index / cores_per_node) % nr_nodes; + topo_ids->die_id = cpu_index / (nr_cores * nr_threads) % nr_dies; + topo_ids->core_id = cpu_index / nr_threads % nr_cores; + topo_ids->smt_id = cpu_index % nr_threads; +} + +/* + * Calculate thread/core/package IDs for a specific topology, + * based on APIC ID + */ +static inline void x86_topo_ids_from_apicid_epyc(apic_id_t apicid, + X86CPUTopoInfo *topo_info, + X86CPUTopoIDs *topo_ids) +{ + topo_ids->smt_id = apicid & + ~(0xFFFFFFFFUL << apicid_smt_width(topo_info)); + topo_ids->core_id = + (apicid >> apicid_core_offset(topo_info)) & + ~(0xFFFFFFFFUL << apicid_core_width(topo_info)); + topo_ids->die_id = + (apicid >> apicid_die_offset(topo_info)) & + ~(0xFFFFFFFFUL << apicid_die_width(topo_info)); + topo_ids->node_id = + (apicid >> apicid_node_offset_epyc(topo_info)) & + ~(0xFFFFFFFFUL << apicid_node_width_epyc(topo_info)); + topo_ids->pkg_id = apicid >> apicid_pkg_offset_epyc(topo_info); +} + +/* + * Make APIC ID for the CPU 'cpu_index' + * + * 'cpu_index' is a sequential, contiguous ID for the CPU. + */ +static inline apic_id_t x86_apicid_from_cpu_idx_epyc(X86CPUTopoInfo *topo_info, + unsigned cpu_index) +{ + X86CPUTopoIDs topo_ids; + x86_topo_ids_from_idx_epyc(topo_info, cpu_index, &topo_ids); + return x86_apicid_from_topo_ids_epyc(topo_info, &topo_ids); +} /* Make APIC ID for the CPU based on Pkg_ID, Core_ID, SMT_ID * * The caller must make sure core_id < nr_cores and smt_id < nr_threads. diff --git a/include/hw/i386/x86.h b/include/hw/i386/x86.h index d76fd0bbb1..38c2d27910 100644 --- a/include/hw/i386/x86.h +++ b/include/hw/i386/x86.h @@ -42,6 +42,7 @@ typedef uint32_t apic_id_t; typedef struct X86CPUTopoIDs { unsigned pkg_id; + unsigned node_id; unsigned die_id; unsigned core_id; unsigned smt_id; From patchwork Thu Feb 13 18:17:25 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Babu Moger X-Patchwork-Id: 11381009 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id D87601805 for ; Thu, 13 Feb 2020 18:27:39 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 9E5F2217F4 for ; Thu, 13 Feb 2020 18:27:39 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=amdcloud.onmicrosoft.com header.i=@amdcloud.onmicrosoft.com header.b="EaT/W/K3" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 9E5F2217F4 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=amd.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:57738 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j2JD8-0007Db-Sm for patchwork-qemu-devel@patchwork.kernel.org; Thu, 13 Feb 2020 13:27:38 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:41777) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j2J3L-0002Wk-RU for qemu-devel@nongnu.org; Thu, 13 Feb 2020 13:17:33 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1j2J3K-0008FS-2B for qemu-devel@nongnu.org; Thu, 13 Feb 2020 13:17:31 -0500 Received: from mail-co1nam11on2082.outbound.protection.outlook.com ([40.107.220.82]:60704 helo=NAM11-CO1-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1j2J3J-0008CU-Ox for qemu-devel@nongnu.org; Thu, 13 Feb 2020 13:17:30 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=IYqpKbYqE0ddJiGiEafPjZf03YehmMWrrv/5B0Idc45y6ynPjKSQiClZ6XC1yjw9BGTsi19J8lzr2zSf3n/4r0YBu1hyyYJkk+Pa9A8C1Je08ELm0yQVvh+rcHuiqtkYC1AOTZH1OHDY7+1oX9nGNRLtVlW8VW1DEnUT1MffjAq5sEP1IT5vICKn0JE1Di3c+VUMNFQyGxTr5wHxR8IeKcZbl97UQFsmtBjm9XlRPdIuoN5oqgeDoPZQby4Cq2v4Xx/8yo0Pt/Ap8kNpfQdBfgAaZQS6KwS7IAHbPMOjpzt3vQOnQXrGd28KW2IhM782zY1WLtOTCNaHUbfCYakXYg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=/lj0xAV0OSpwF91Oj04PV0bSv6tunIRZzCxDcQahcE8=; b=VzQrM0eOwqJ0OqNhR1s61v0lzRuhWYF92RcMOIRNjJLhhD38l2Hm+D/Uv7FbvCy8o7A9JQuCHGghR22MNVROFDNFZWL+YJxdpPNDkw9Q53Hz67PbNgG/fYwK2FYzRGOLcU+yOCQJTuzQH3jHZx6TwVDmMDHQNL1lY7WFYNKRDzTQ+Hv8wRr4+//r958dJ/21wvLp/StzfJezljpVaR1JIdk2iEiP1CFL5AHghMtF47aO4MUe8XARBkFrGwpNC1go5MayQit94bQ5VBkmCaAWe5ZjVqQg7hh4UXbWGbo7X4AE4l0bDujOcxbo5vxdLdQ+9+2W1tOtWPl575Zk8Imshg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amdcloud.onmicrosoft.com; s=selector2-amdcloud-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=/lj0xAV0OSpwF91Oj04PV0bSv6tunIRZzCxDcQahcE8=; b=EaT/W/K3gB0Sp3ea5IHDkM+vf4RZ5ULzOHw8dO3nXfaBSKQVVHpAB2MoR3OFQ1goy23zDkol15hOtEEUaPGr0oscJXqzBG6gQWLKAG2dB3lglN+m0AMFIcq//dZUXFTdcEp6Ojr2BIIk78BJ7Sif2+BMwxxTBM6YLLfxgr5xnaU= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Babu.Moger@amd.com; Received: from CY4PR12MB1574.namprd12.prod.outlook.com (10.172.71.23) by CY4PR12MB1318.namprd12.prod.outlook.com (10.168.164.138) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2707.24; Thu, 13 Feb 2020 18:17:27 +0000 Received: from CY4PR12MB1574.namprd12.prod.outlook.com ([fe80::e0cc:653a:e9bc:aa8e]) by CY4PR12MB1574.namprd12.prod.outlook.com ([fe80::e0cc:653a:e9bc:aa8e%2]) with mapi id 15.20.2707.030; Thu, 13 Feb 2020 18:17:27 +0000 Subject: [PATCH v4 09/16] target/i386: Cleanup and use the EPYC mode topology functions From: Babu Moger To: ehabkost@redhat.com, marcel.apfelbaum@gmail.com, pbonzini@redhat.com, rth@twiddle.net, mst@redhat.com, imammedo@redhat.com Date: Thu, 13 Feb 2020 12:17:25 -0600 Message-ID: <158161784564.48948.10610888499052239029.stgit@naples-babu.amd.com> In-Reply-To: <158161767653.48948.10578064482878399556.stgit@naples-babu.amd.com> References: <158161767653.48948.10578064482878399556.stgit@naples-babu.amd.com> User-Agent: StGit/unknown-version X-ClientProxiedBy: SN6PR08CA0026.namprd08.prod.outlook.com (2603:10b6:805:66::39) To CY4PR12MB1574.namprd12.prod.outlook.com (2603:10b6:910:e::23) MIME-Version: 1.0 Received: from naples-babu.amd.com (165.204.78.2) by SN6PR08CA0026.namprd08.prod.outlook.com (2603:10b6:805:66::39) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2729.22 via Frontend Transport; Thu, 13 Feb 2020 18:17:26 +0000 X-Originating-IP: [165.204.78.2] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: f3e51231-c6ff-4745-c6bd-08d7b0b0fb21 X-MS-TrafficTypeDiagnostic: CY4PR12MB1318:|CY4PR12MB1318: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:3826; X-Forefront-PRVS: 031257FE13 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4636009)(136003)(366004)(39860400002)(346002)(396003)(376002)(189003)(199004)(66476007)(66556008)(66946007)(81166006)(26005)(186003)(316002)(2906002)(52116002)(8936002)(8676002)(478600001)(103116003)(86362001)(7696005)(5660300002)(81156014)(4326008)(956004)(16526019)(44832011)(55016002); DIR:OUT; SFP:1101; SCL:1; SRVR:CY4PR12MB1318; H:CY4PR12MB1574.namprd12.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; Received-SPF: None (protection.outlook.com: amd.com does not designate permitted sender hosts) X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: YipMIKRuEVt7cE7nG8t0AJdVNfJ9BldWyGeHz4QZRYhzwGU1QoxuZEkSXyD4V5soXTi3ZQpN74WyIM6UBKt8KSIN2i8PDbM1jSmJb7nW1XrGoSoOOej4zf+qszlMTv4CffnCDkxCASH/UIJ4KN7s80Gq6Ukmq6kFI2fZQhICI4WcLiKTimqG1m9GLOW+CLOznKklaJJLTbUh/7AnULnNYtvv7dHGqQzAhBSnBcr5en0D6SDH3ba7QNv29TNg241o6Mn2zzKaMFCLZDZ1kotfjLfYMqEGpupqHrpp8kPGD59l0JGM+9TYFqVh2lRkgycJ8Pesu27LncgoJupmr+OUDGzqO3stASGL/CshSEx+zuHsvQ/s4RFzf3QvgxPxSZ/L88ds+XgBr68VwrN+pZm4YE59pmGqdBMy+1rZRcqfGQRTId506AliqmOuKxBd34IF X-MS-Exchange-AntiSpam-MessageData: pfirflFwcjgyNSRB0BpmynG+V+QOdptZ9+oB2BAlLd50+8mcuks1DvdfzMfc9wTtFCF/Mu3yyImPoBmGE74e7eaP3h+lxSj223oM5k5rW4IKH6yzgRC4Z8MnIAlw88nK6WIn+6nKzw2uGR229R4ojw== X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: f3e51231-c6ff-4745-c6bd-08d7b0b0fb21 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Feb 2020 18:17:27.1821 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: PYrmspCN2iGCZiHUbf44bOVzqhdubmgKy4k0S2BUwD1lj0d/rTdEp/QedLcJAaiP X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR12MB1318 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 40.107.220.82 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Use the new functions from topology.h and delete the unused code. Given the sockets, nodes, cores and threads, the new functions generate apic id for EPYC mode. Removes all the hardcoded values. Signed-off-by: Babu Moger --- target/i386/cpu.c | 162 +++++++++++------------------------------------------ 1 file changed, 35 insertions(+), 127 deletions(-) diff --git a/target/i386/cpu.c b/target/i386/cpu.c index 5d6edfd09b..19675eb696 100644 --- a/target/i386/cpu.c +++ b/target/i386/cpu.c @@ -338,68 +338,15 @@ static void encode_cache_cpuid80000006(CPUCacheInfo *l2, } } -/* - * Definitions used for building CPUID Leaf 0x8000001D and 0x8000001E - * Please refer to the AMD64 Architecture Programmer’s Manual Volume 3. - * Define the constants to build the cpu topology. Right now, TOPOEXT - * feature is enabled only on EPYC. So, these constants are based on - * EPYC supported configurations. We may need to handle the cases if - * these values change in future. - */ -/* Maximum core complexes in a node */ -#define MAX_CCX 2 -/* Maximum cores in a core complex */ -#define MAX_CORES_IN_CCX 4 -/* Maximum cores in a node */ -#define MAX_CORES_IN_NODE 8 -/* Maximum nodes in a socket */ -#define MAX_NODES_PER_SOCKET 4 - -/* - * Figure out the number of nodes required to build this config. - * Max cores in a node is 8 - */ -static int nodes_in_socket(int nr_cores) -{ - int nodes; - - nodes = DIV_ROUND_UP(nr_cores, MAX_CORES_IN_NODE); - - /* Hardware does not support config with 3 nodes, return 4 in that case */ - return (nodes == 3) ? 4 : nodes; -} - -/* - * Decide the number of cores in a core complex with the given nr_cores using - * following set constants MAX_CCX, MAX_CORES_IN_CCX, MAX_CORES_IN_NODE and - * MAX_NODES_PER_SOCKET. Maintain symmetry as much as possible - * L3 cache is shared across all cores in a core complex. So, this will also - * tell us how many cores are sharing the L3 cache. - */ -static int cores_in_core_complex(int nr_cores) -{ - int nodes; - - /* Check if we can fit all the cores in one core complex */ - if (nr_cores <= MAX_CORES_IN_CCX) { - return nr_cores; - } - /* Get the number of nodes required to build this config */ - nodes = nodes_in_socket(nr_cores); - - /* - * Divide the cores accros all the core complexes - * Return rounded up value - */ - return DIV_ROUND_UP(nr_cores, nodes * MAX_CCX); -} - /* Encode cache info for CPUID[8000001D] */ -static void encode_cache_cpuid8000001d(CPUCacheInfo *cache, CPUState *cs, - uint32_t *eax, uint32_t *ebx, - uint32_t *ecx, uint32_t *edx) +static void encode_cache_cpuid8000001d(CPUCacheInfo *cache, + X86CPUTopoInfo *topo_info, + uint32_t *eax, uint32_t *ebx, + uint32_t *ecx, uint32_t *edx) { uint32_t l3_cores; + unsigned nodes = MAX(topo_info->nodes_per_pkg, 1); + assert(cache->size == cache->line_size * cache->associativity * cache->partitions * cache->sets); @@ -408,10 +355,13 @@ static void encode_cache_cpuid8000001d(CPUCacheInfo *cache, CPUState *cs, /* L3 is shared among multiple cores */ if (cache->level == 3) { - l3_cores = cores_in_core_complex(cs->nr_cores); - *eax |= ((l3_cores * cs->nr_threads) - 1) << 14; + l3_cores = DIV_ROUND_UP((topo_info->dies_per_pkg * + topo_info->cores_per_die * + topo_info->threads_per_core), + nodes); + *eax |= (l3_cores - 1) << 14; } else { - *eax |= ((cs->nr_threads - 1) << 14); + *eax |= ((topo_info->threads_per_core - 1) << 14); } assert(cache->line_size > 0); @@ -431,55 +381,17 @@ static void encode_cache_cpuid8000001d(CPUCacheInfo *cache, CPUState *cs, (cache->complex_indexing ? CACHE_COMPLEX_IDX : 0); } -/* Data structure to hold the configuration info for a given core index */ -struct core_topology { - /* core complex id of the current core index */ - int ccx_id; - /* - * Adjusted core index for this core in the topology - * This can be 0,1,2,3 with max 4 cores in a core complex - */ - int core_id; - /* Node id for this core index */ - int node_id; - /* Number of nodes in this config */ - int num_nodes; -}; - -/* - * Build the configuration closely match the EPYC hardware. Using the EPYC - * hardware configuration values (MAX_CCX, MAX_CORES_IN_CCX, MAX_CORES_IN_NODE) - * right now. This could change in future. - * nr_cores : Total number of cores in the config - * core_id : Core index of the current CPU - * topo : Data structure to hold all the config info for this core index - */ -static void build_core_topology(int nr_cores, int core_id, - struct core_topology *topo) -{ - int nodes, cores_in_ccx; - - /* First get the number of nodes required */ - nodes = nodes_in_socket(nr_cores); - - cores_in_ccx = cores_in_core_complex(nr_cores); - - topo->node_id = core_id / (cores_in_ccx * MAX_CCX); - topo->ccx_id = (core_id % (cores_in_ccx * MAX_CCX)) / cores_in_ccx; - topo->core_id = core_id % cores_in_ccx; - topo->num_nodes = nodes; -} - /* Encode cache info for CPUID[8000001E] */ -static void encode_topo_cpuid8000001e(CPUState *cs, X86CPU *cpu, +static void encode_topo_cpuid8000001e(X86CPUTopoInfo *topo_info, X86CPU *cpu, uint32_t *eax, uint32_t *ebx, uint32_t *ecx, uint32_t *edx) { - struct core_topology topo = {0}; - unsigned long nodes; + X86CPUTopoIDs topo_ids = {0}; + unsigned long nodes = MAX(topo_info->nodes_per_pkg, 1); int shift; - build_core_topology(cs->nr_cores, cpu->core_id, &topo); + x86_topo_ids_from_apicid_epyc(cpu->apic_id, topo_info, &topo_ids); + *eax = cpu->apic_id; /* * CPUID_Fn8000001E_EBX @@ -496,12 +408,8 @@ static void encode_topo_cpuid8000001e(CPUState *cs, X86CPU *cpu, * 3 Core complex id * 1:0 Core id */ - if (cs->nr_threads - 1) { - *ebx = ((cs->nr_threads - 1) << 8) | (topo.node_id << 3) | - (topo.ccx_id << 2) | topo.core_id; - } else { - *ebx = (topo.node_id << 4) | (topo.ccx_id << 3) | topo.core_id; - } + *ebx = ((topo_info->threads_per_core - 1) << 8) | (topo_ids.node_id << 3) | + (topo_ids.core_id); /* * CPUID_Fn8000001E_ECX * 31:11 Reserved @@ -510,9 +418,9 @@ static void encode_topo_cpuid8000001e(CPUState *cs, X86CPU *cpu, * 2 Socket id * 1:0 Node id */ - if (topo.num_nodes <= 4) { - *ecx = ((topo.num_nodes - 1) << 8) | (cpu->socket_id << 2) | - topo.node_id; + + if (nodes <= 4) { + *ecx = ((nodes - 1) << 8) | (topo_ids.pkg_id << 2) | topo_ids.node_id; } else { /* * Node id fix up. Actual hardware supports up to 4 nodes. But with @@ -527,10 +435,10 @@ static void encode_topo_cpuid8000001e(CPUState *cs, X86CPU *cpu, * number of nodes. find_last_bit returns last set bit(0 based). Left * shift(+1) the socket id to represent all the nodes. */ - nodes = topo.num_nodes - 1; + nodes -= 1; shift = find_last_bit(&nodes, 8); - *ecx = ((topo.num_nodes - 1) << 8) | (cpu->socket_id << (shift + 1)) | - topo.node_id; + *ecx = (nodes << 8) | (topo_ids.pkg_id << (shift + 1)) | + topo_ids.node_id; } *edx = 0; } @@ -5318,6 +5226,7 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index, uint32_t count, uint32_t signature[3]; X86CPUTopoInfo topo_info; + topo_info.nodes_per_pkg = env->nr_nodes; topo_info.dies_per_pkg = env->nr_dies; topo_info.cores_per_die = cs->nr_cores; topo_info.threads_per_core = cs->nr_threads; @@ -5737,20 +5646,20 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index, uint32_t count, } switch (count) { case 0: /* L1 dcache info */ - encode_cache_cpuid8000001d(env->cache_info_amd.l1d_cache, cs, - eax, ebx, ecx, edx); + encode_cache_cpuid8000001d(env->cache_info_amd.l1d_cache, + &topo_info, eax, ebx, ecx, edx); break; case 1: /* L1 icache info */ - encode_cache_cpuid8000001d(env->cache_info_amd.l1i_cache, cs, - eax, ebx, ecx, edx); + encode_cache_cpuid8000001d(env->cache_info_amd.l1i_cache, + &topo_info, eax, ebx, ecx, edx); break; case 2: /* L2 cache info */ - encode_cache_cpuid8000001d(env->cache_info_amd.l2_cache, cs, - eax, ebx, ecx, edx); + encode_cache_cpuid8000001d(env->cache_info_amd.l2_cache, + &topo_info, eax, ebx, ecx, edx); break; case 3: /* L3 cache info */ - encode_cache_cpuid8000001d(env->cache_info_amd.l3_cache, cs, - eax, ebx, ecx, edx); + encode_cache_cpuid8000001d(env->cache_info_amd.l3_cache, + &topo_info, eax, ebx, ecx, edx); break; default: /* end of info */ *eax = *ebx = *ecx = *edx = 0; @@ -5759,8 +5668,7 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index, uint32_t count, break; case 0x8000001E: assert(cpu->core_id <= 255); - encode_topo_cpuid8000001e(cs, cpu, - eax, ebx, ecx, edx); + encode_topo_cpuid8000001e(&topo_info, cpu, eax, ebx, ecx, edx); break; case 0xC0000000: *eax = env->cpuid_xlevel2; From patchwork Thu Feb 13 18:17:32 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Babu Moger X-Patchwork-Id: 11381005 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 16B431820 for ; Thu, 13 Feb 2020 18:27:31 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id E05AC217F4 for ; Thu, 13 Feb 2020 18:27:30 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=amdcloud.onmicrosoft.com header.i=@amdcloud.onmicrosoft.com header.b="muQfAS9a" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org E05AC217F4 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=amd.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:57734 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j2JD0-00071G-2G for patchwork-qemu-devel@patchwork.kernel.org; Thu, 13 Feb 2020 13:27:30 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:42044) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j2J3R-0002hh-Qn for qemu-devel@nongnu.org; Thu, 13 Feb 2020 13:17:38 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1j2J3Q-00005s-QJ for qemu-devel@nongnu.org; Thu, 13 Feb 2020 13:17:37 -0500 Received: from mail-co1nam11on2064.outbound.protection.outlook.com ([40.107.220.64]:6061 helo=NAM11-CO1-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1j2J3Q-0008Va-Jk for qemu-devel@nongnu.org; Thu, 13 Feb 2020 13:17:36 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=OpkebKYJHFvvR9YeUE0IqLYwA7idFkozc6zpd5sUv2T0un1Q5xazxrAHNvY5+gADr+++5ysz/zsH5O4KeJUH6KVBpfji3FH17rI9gjWZ0b7kP5RWyba1IaR1RVjsPAfQ01gSg4EQSrFK7cndl+WE0M4P0Z1zMBqbNAdorPKKUcN2VIV+McrDJvsrBkxeUx4yYHcrotB6rorHruuvTdlXOQdYPFNtRSeCenW66gcIuknX48njv9c7PHRAHl5JP+fXvcbdDQk6EfgL9EoKAtQx/NHLOHaNspO/0KT/+PEIE3N8a+8RoCaztXEwk5nAcBel472wSSXUdeSM03raDvsLPA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=xIgdlWrg/XYsW0ykVAU3vEyOu1DEy+QY2vvZvhEUZZQ=; b=GNASXAZXYiwwOG79I4a8Z7kQUkl2M3vBd7qJ5N+lGrwns4yrJj8VEdJbdBi5DBtsNo3bSrm+5zvxAS5xZezsKWb9sbbUHMhzbfnVY4yOF0MlPwEIZg7EmWTEhkkWkIysTOh/D2FKeGe/+zDiUynTbdqlFqfxLywGYvT7qXWrYg0rEMkK/etA/uI9Uj0h1iSPS1KFGTgu599lMKIciDSvKMKrGYsggr6CbcXCrYlJS0U2u4LL/BSH9u0iVy6ib5zKgiOfJMcgXiuGCrihgIvt2VZ80DN5K7HabLoUBR/17EedAhefrjWd+FOIA8MBjme+qwYEUzLRiUEWblRist9TRg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amdcloud.onmicrosoft.com; s=selector2-amdcloud-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=xIgdlWrg/XYsW0ykVAU3vEyOu1DEy+QY2vvZvhEUZZQ=; b=muQfAS9a3O4DOdgMLOzijZibJtE7R/k170xfDl0D2zmYbTEV9WOD2s/y8n+MHHv7x9emSD4+wluMsDD+5BVZNb9gHY77h30/DVhSg728OuX8Ioi9QrOXhMHx0kjAGvzVC4Dxp1TqOWaKubgJhjhV/1p6Cro4stL+FYCKMBfHl7g= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Babu.Moger@amd.com; Received: from CY4PR12MB1574.namprd12.prod.outlook.com (10.172.71.23) by CY4PR12MB1318.namprd12.prod.outlook.com (10.168.164.138) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2707.24; Thu, 13 Feb 2020 18:17:34 +0000 Received: from CY4PR12MB1574.namprd12.prod.outlook.com ([fe80::e0cc:653a:e9bc:aa8e]) by CY4PR12MB1574.namprd12.prod.outlook.com ([fe80::e0cc:653a:e9bc:aa8e%2]) with mapi id 15.20.2707.030; Thu, 13 Feb 2020 18:17:34 +0000 Subject: [PATCH v4 10/16] hw/i386: Introduce apicid functions inside X86MachineState From: Babu Moger To: ehabkost@redhat.com, marcel.apfelbaum@gmail.com, pbonzini@redhat.com, rth@twiddle.net, mst@redhat.com, imammedo@redhat.com Date: Thu, 13 Feb 2020 12:17:32 -0600 Message-ID: <158161785243.48948.11368379114010493667.stgit@naples-babu.amd.com> In-Reply-To: <158161767653.48948.10578064482878399556.stgit@naples-babu.amd.com> References: <158161767653.48948.10578064482878399556.stgit@naples-babu.amd.com> User-Agent: StGit/unknown-version X-ClientProxiedBy: DM6PR06CA0053.namprd06.prod.outlook.com (2603:10b6:5:54::30) To CY4PR12MB1574.namprd12.prod.outlook.com (2603:10b6:910:e::23) MIME-Version: 1.0 Received: from naples-babu.amd.com (165.204.78.2) by DM6PR06CA0053.namprd06.prod.outlook.com (2603:10b6:5:54::30) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2729.23 via Frontend Transport; Thu, 13 Feb 2020 18:17:33 +0000 X-Originating-IP: [165.204.78.2] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 6b144d26-e2ae-43d8-94a4-08d7b0b0ff5d X-MS-TrafficTypeDiagnostic: CY4PR12MB1318:|CY4PR12MB1318: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:4125; X-Forefront-PRVS: 031257FE13 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4636009)(136003)(366004)(39860400002)(346002)(396003)(376002)(189003)(199004)(66476007)(66556008)(4744005)(66946007)(81166006)(26005)(186003)(316002)(2906002)(52116002)(8936002)(8676002)(478600001)(103116003)(86362001)(7696005)(5660300002)(81156014)(4326008)(956004)(16526019)(44832011)(55016002); DIR:OUT; SFP:1101; SCL:1; SRVR:CY4PR12MB1318; H:CY4PR12MB1574.namprd12.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; Received-SPF: None (protection.outlook.com: amd.com does not designate permitted sender hosts) X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: FV1stVYQjh3LOj4IP3MJe9L8/giCbNGLJUtgcYZlRIBFbd0tKwYvGW45jbKLi9auRZpS+e6T45a/BCabWPp1VE9Ow/rq+by7NUPOcgARtAI7IC68w+vuRTyL2ypyBO7TWrnULNSIl9KCsN2idBX7f/d4afhJJGc2PgCx9uuSTW+kHJpVlr6X6emsAUGSJf+IrdwyBMya5oDwUJNsF9W5dIcxvFhOVpSMsTp9XHq/pIOIw4jSp/fpi7as4xPWRvyrSCWUpgssuMxHAkj6Cs31xVS5sA/L4rah0xSRHzHivqnAPLbkpEAPXCzPMfDrC3aQUzeRGSJNREv6v3Nvw+aW1vWj01Kxzb8u37Nl3LjmY5Ay4OUN/KYvn3F+irEb/Ip2wxUDTez/8XigDF6f5Vx98dqkM06dKC0E+1c++lShgqa7fxDvXQeS4Eaim1eV6Hsr X-MS-Exchange-AntiSpam-MessageData: EQGorrbhaSBUqgAIA3wDDBHZy8iDZ6SMkM2Yg0JrRC0UL435KvugoqmnvZdz/eNqdrjDzPxJ1U2u+GDg75jVtJ+UxZhv7jI7pPVvqNN/G7ZX3YtThy0UVFEZ9n1eCK29D0eC1eXAbxG8dRRJ402YIQ== X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6b144d26-e2ae-43d8-94a4-08d7b0b0ff5d X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Feb 2020 18:17:34.3299 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: w0Nqq5OacOjVzK9hdY0XJkmtzkVudes/LOqaHVwGjkABNlif33ZPZ96kEkZkqQzD X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR12MB1318 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 40.107.220.64 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Introduce model specific apicid functions inside X86MachineState. These functions will be loaded from X86CPUDefinition. Signed-off-by: Babu Moger --- include/hw/i386/x86.h | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/include/hw/i386/x86.h b/include/hw/i386/x86.h index 38c2d27910..75c2462770 100644 --- a/include/hw/i386/x86.h +++ b/include/hw/i386/x86.h @@ -79,6 +79,15 @@ typedef struct { uint16_t boot_cpus; unsigned smp_dies; + /* Apic id specific handlers */ + uint32_t (*apicid_from_cpu_idx)(X86CPUTopoInfo *topo_info, + unsigned cpu_index); + void (*topo_ids_from_apicid)(apic_id_t apicid, X86CPUTopoInfo *topo_info, + X86CPUTopoIDs *topo_ids); + apic_id_t (*apicid_from_topo_ids)(X86CPUTopoInfo *topo_info, + const X86CPUTopoIDs *topo_ids); + uint32_t (*apicid_pkg_offset)(X86CPUTopoInfo *topo_info); + /* * Address space used by IOAPIC device. All IOAPIC interrupts * will be translated to MSI messages in the address space. From patchwork Thu Feb 13 18:17:39 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Babu Moger X-Patchwork-Id: 11381015 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 1328892A for ; Thu, 13 Feb 2020 18:29:43 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id DDBD321734 for ; Thu, 13 Feb 2020 18:29:42 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=amdcloud.onmicrosoft.com header.i=@amdcloud.onmicrosoft.com header.b="0uRC9Zcp" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org DDBD321734 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=amd.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:57764 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j2JF8-0002Jc-4d for patchwork-qemu-devel@patchwork.kernel.org; Thu, 13 Feb 2020 13:29:42 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:42340) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j2J3Z-0002xj-AZ for qemu-devel@nongnu.org; Thu, 13 Feb 2020 13:17:46 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1j2J3X-0000Pu-SB for qemu-devel@nongnu.org; Thu, 13 Feb 2020 13:17:45 -0500 Received: from mail-bn7nam10on20622.outbound.protection.outlook.com ([2a01:111:f400:7e8a::622]:7556 helo=NAM10-BN7-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1j2J3X-0000MV-JG for qemu-devel@nongnu.org; Thu, 13 Feb 2020 13:17:43 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=H8gP/L1xsxTX/T9gAQ2y9FDnUtvMaDWpIuBT3tep+XLWC5sJ22YxgenX6t63zIxrHwUTHOEiKw3oKd+S8P4FP28tQ9S0lD7gE5IvRYhFfb502nY7+WeDDj3r/DK//l2gksa9EKgpsBXINZKNvCoSQxQijy5A9CY/NKRZ7ECqNZQVZ2NAm8GTw6c4B+A9x/Np/aKOL2XzOpPnxIalf0Nk4gPT61/r5nj6DQg0S6fKDH0h9WNP7AdrH+rjbHXHEqmeNlyZdpt2Ym2LE8NVTVNaCaPo7v5dYea3LtQgE/B3brFTOr++qSb8EkxPDvOye0o0biykBDf2TG5D+lSsuGo2Zw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=HnTOExsJ/Jimv8Fw2PmiV1c0hO+4wHwPEhw/F14qJDk=; b=fr/jjrNJqQqxN+trtb/zQ32Ilwx5xsbzeAdg2fLOgZtQDF5ltBU1CgN6mIThcz9HnXRPc97BUrGaYXf4KivO6eEwSKmOsuaYZOm84GxtCweL6Kbev/ih/tH1qMo7ht9wU/JNgC/9YFCJG1v9+h9Fj/qZvHn3XLXKpZr4WXbjJbceTyTaNgruIe7za/vVKVMyXqGJ3jn4fgQTNbchs+dbQLIf31nqXjOOks1CJyumBXbVShBCuYZOLt925C4hNHfxMcUP7lXOS+9VshIv7k/wlty6i+Esp59LxOD3ZuiVDLJoSsTjlbkXU17xfcRxe97W+YwrnueeZrI6rsv0cfc8hA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amdcloud.onmicrosoft.com; s=selector2-amdcloud-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=HnTOExsJ/Jimv8Fw2PmiV1c0hO+4wHwPEhw/F14qJDk=; b=0uRC9ZcpTD4Aku/SC/v5N+4wM3ggXPMnBeyuB0t1sDx8acGO84VU/t0SX2c2P7Eq2q5XPOv+1fIYfffppGtiinCv8N6oaBLRe5do20mXmj7RpabkdF0dZXjz3w8DQaW+PI+mf3t2y+I2LlVuxzMhdZ+00HRKkfeSIwPGAyeIbyk= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Babu.Moger@amd.com; Received: from CY4PR12MB1574.namprd12.prod.outlook.com (10.172.71.23) by CY4PR12MB1318.namprd12.prod.outlook.com (10.168.164.138) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2707.24; Thu, 13 Feb 2020 18:17:41 +0000 Received: from CY4PR12MB1574.namprd12.prod.outlook.com ([fe80::e0cc:653a:e9bc:aa8e]) by CY4PR12MB1574.namprd12.prod.outlook.com ([fe80::e0cc:653a:e9bc:aa8e%2]) with mapi id 15.20.2707.030; Thu, 13 Feb 2020 18:17:41 +0000 Subject: [PATCH v4 11/16] target/i386: Load apicid model specific handlers from X86CPUDefinition From: Babu Moger To: ehabkost@redhat.com, marcel.apfelbaum@gmail.com, pbonzini@redhat.com, rth@twiddle.net, mst@redhat.com, imammedo@redhat.com Date: Thu, 13 Feb 2020 12:17:39 -0600 Message-ID: <158161785961.48948.12596231683203907680.stgit@naples-babu.amd.com> In-Reply-To: <158161767653.48948.10578064482878399556.stgit@naples-babu.amd.com> References: <158161767653.48948.10578064482878399556.stgit@naples-babu.amd.com> User-Agent: StGit/unknown-version X-ClientProxiedBy: DM6PR17CA0027.namprd17.prod.outlook.com (2603:10b6:5:1b3::40) To CY4PR12MB1574.namprd12.prod.outlook.com (2603:10b6:910:e::23) MIME-Version: 1.0 Received: from naples-babu.amd.com (165.204.78.2) by DM6PR17CA0027.namprd17.prod.outlook.com (2603:10b6:5:1b3::40) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2729.24 via Frontend Transport; Thu, 13 Feb 2020 18:17:40 +0000 X-Originating-IP: [165.204.78.2] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 6f55cfc0-c67e-42d2-b2bf-08d7b0b10363 X-MS-TrafficTypeDiagnostic: CY4PR12MB1318:|CY4PR12MB1318: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:5236; X-Forefront-PRVS: 031257FE13 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4636009)(136003)(366004)(39860400002)(346002)(396003)(376002)(189003)(199004)(66476007)(66556008)(66946007)(81166006)(26005)(186003)(316002)(2906002)(52116002)(8936002)(8676002)(478600001)(103116003)(86362001)(7696005)(5660300002)(81156014)(4326008)(956004)(16526019)(44832011)(55016002); DIR:OUT; SFP:1101; SCL:1; SRVR:CY4PR12MB1318; H:CY4PR12MB1574.namprd12.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; Received-SPF: None (protection.outlook.com: amd.com does not designate permitted sender hosts) X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: /iV5omMBa1tmqJyQAE115ncBdz1RDcpu47dMzpmekMGnJ9D8gSJuKWUoEuBERJkvPX2nsnIwr61Mpt4H84n2/ZDmRLK0X4BYcOee9/zuUYbvpm0e83ILItLdrfRMMZvNG/Ompzp6btOVVTROBBldrkCRxrW1zL0yj5hQRonu9vyAqI7ElrEyvq/rCN+dEsKRXOPmIHvaux1EW3fEY4jD9YtWfrasDPTF3Xg6qi+0HObyrBnZTnpYJWhDv810GVxsrbtJraAdhjUVl1FVxsiGds7od7ckUFIzm4w460LrrzZgqaE3SADSHVBx/6wL66HIOCVMr+quSR9AHuER/ohFBpRbKFERDDV8KzlnCXwv/fN3JjlXGFOzvtv3aCLlFmtf0RtJapvZa0mU6+OJyydnrUkIBNFyiSbztQ0NuoVdCOk8LGQv3Tlf8YZcl+z3FcDG X-MS-Exchange-AntiSpam-MessageData: ORIB9JBcXZ2voNSJ9nb9aj9HulOCagPQev2NBsYbU7fSELPFH8ajXSxCzHZa7SyYZzPTR3tPNTwZgJHHFYr359Ut1e2IkLkaOF67luLWFxPqyLXhgkFMfAVez32ij1WXtOmE2tc9eTNMYPLvj/tXBA== X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6f55cfc0-c67e-42d2-b2bf-08d7b0b10363 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Feb 2020 18:17:41.0579 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: R8I66Yyl0UcWYTo32l7+AZHu0K6CeAxNRSw5x4AaaEEO5gMrhzz9nithElYkqGGl X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR12MB1318 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 2a01:111:f400:7e8a::622 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Load the model specific handlers if available or else default handlers will be loaded. Add the model specific handlers if apicid decoding differs from the standard sequential numbering. Signed-off-by: Babu Moger --- target/i386/cpu.c | 38 ++++++++++++++++++++++++++++++++++++++ target/i386/cpu.h | 1 + 2 files changed, 39 insertions(+) diff --git a/target/i386/cpu.c b/target/i386/cpu.c index 19675eb696..389b68d765 100644 --- a/target/i386/cpu.c +++ b/target/i386/cpu.c @@ -1614,6 +1614,16 @@ typedef struct X86CPUDefinition { FeatureWordArray features; const char *model_id; CPUCaches *cache_info; + + /* Apic id specific handlers */ + uint32_t (*apicid_from_cpu_idx)(X86CPUTopoInfo *topo_info, + unsigned cpu_index); + void (*topo_ids_from_apicid)(apic_id_t apicid, X86CPUTopoInfo *topo_info, + X86CPUTopoIDs *topo_ids); + apic_id_t (*apicid_from_topo_ids)(X86CPUTopoInfo *topo_info, + const X86CPUTopoIDs *topo_ids); + uint32_t (*apicid_pkg_offset)(X86CPUTopoInfo *topo_info); + /* * Definitions for alternative versions of CPU model. * List is terminated by item with version == 0. @@ -1654,6 +1664,34 @@ static const X86CPUVersionDefinition *x86_cpu_def_get_versions(X86CPUDefinition return def->versions ?: default_version_list; } +void cpu_x86_init_apicid_fns(MachineState *machine) +{ + X86CPUClass *xcc = X86_CPU_CLASS(object_class_by_name(machine->cpu_type)); + X86CPUModel *model = xcc->model; + X86CPUDefinition *def = model->cpudef; + X86MachineState *x86ms = X86_MACHINE(machine); + + if (def) { + if (def->apicid_from_cpu_idx) { + x86ms->apicid_from_cpu_idx = def->apicid_from_cpu_idx; + } + if (def->topo_ids_from_apicid) { + x86ms->topo_ids_from_apicid = def->topo_ids_from_apicid; + } + if (def->apicid_from_topo_ids) { + x86ms->apicid_from_topo_ids = def->apicid_from_topo_ids; + } + if (def->apicid_pkg_offset) { + x86ms->apicid_pkg_offset = def->apicid_pkg_offset; + } + } else { + x86ms->apicid_from_cpu_idx = x86_apicid_from_cpu_idx; + x86ms->topo_ids_from_apicid = x86_topo_ids_from_apicid; + x86ms->apicid_from_topo_ids = x86_apicid_from_topo_ids; + x86ms->apicid_pkg_offset = apicid_pkg_offset; + } +} + static CPUCaches epyc_cache_info = { .l1d_cache = &(CPUCacheInfo) { .type = DATA_CACHE, diff --git a/target/i386/cpu.h b/target/i386/cpu.h index 627a8cb9be..64a1cca690 100644 --- a/target/i386/cpu.h +++ b/target/i386/cpu.h @@ -1889,6 +1889,7 @@ void cpu_clear_apic_feature(CPUX86State *env); void host_cpuid(uint32_t function, uint32_t count, uint32_t *eax, uint32_t *ebx, uint32_t *ecx, uint32_t *edx); void host_vendor_fms(char *vendor, int *family, int *model, int *stepping); +void cpu_x86_init_apicid_fns(MachineState *machine); /* helper.c */ bool x86_cpu_tlb_fill(CPUState *cs, vaddr address, int size, From patchwork Thu Feb 13 18:17:46 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Babu Moger X-Patchwork-Id: 11381013 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 0203B139A for ; Thu, 13 Feb 2020 18:29:36 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id CC99821734 for ; Thu, 13 Feb 2020 18:29:35 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=amdcloud.onmicrosoft.com header.i=@amdcloud.onmicrosoft.com header.b="mBjBdVhT" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org CC99821734 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=amd.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:57762 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j2JF1-00029V-0y for patchwork-qemu-devel@patchwork.kernel.org; Thu, 13 Feb 2020 13:29:35 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:42610) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j2J3f-0003Cy-8t for qemu-devel@nongnu.org; Thu, 13 Feb 2020 13:17:52 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1j2J3d-0000dm-Tm for qemu-devel@nongnu.org; Thu, 13 Feb 2020 13:17:51 -0500 Received: from mail-dm6nam11on2043.outbound.protection.outlook.com ([40.107.223.43]:6114 helo=NAM11-DM6-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1j2J3d-0000bY-NS for qemu-devel@nongnu.org; Thu, 13 Feb 2020 13:17:49 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=aoTKMYSX9DIbE16jOumT0EpLVXgbQt1b5vGeYerrSLZ+Um3SFTsJ1Azrf3oh+zZk3jDs8dzKCvnt9Eix2MYyYgq8GzM6RJZZw7zN2wY7kRRxnu2MpuMKQsGcblSDUayjUQcU2/OYadDdzJNhZhVOzzAvZux5gP94FdYMWCVtv+Vq0NwTxi7XhJDam93Vl5u4QNlNJfihlAH68i1JaSPRr62oqf9RS/P98CSEKBbyQu9ssItfzYS8GdWzdDFmMnSzdm+KGDXl/Hk0UKv+Pn2s1TT4zPxbNpbVB50aCtzzopsxR3qPmfK3HTstkis62xMPUvN/pQBlWHBy8NGyNt55+w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=6jcBD25IXAAeks/Woxx18Syfm32L9rY5LYbHICkaLpA=; b=l2yMvSM6+N7YNlWI+DxyYH8WZ/hkNeTswDaKITtx+7GCHsnVyC79bxM4RjUC6MyuVNSMD3jSQl8dogYuh2kDkSQ0QRHiN28+T4SBY2pP/jyZbMnh5IttQS9dt3XXnA1XkjTEBGspM4BDWOhrBhwSikLwWR0aL6+OCoNL25vtSpaQmZIk0vaP+7tddCmAbK/sDOVqscqlJTSDCyC0xzR3IDjoaa95MlXpSBh0dRZAp1PVcqU4Wv6MiIonRzpWFaAp8UkrBzdRjMwoD8vgsd5PZOSCDihsazXZIIEaieXwv8aq8CE7Dyz2IaGNWj8aobhHyVpK/qaFCNtEhh8VHaCV8A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amdcloud.onmicrosoft.com; s=selector2-amdcloud-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=6jcBD25IXAAeks/Woxx18Syfm32L9rY5LYbHICkaLpA=; b=mBjBdVhTaXjI370N8GjVBEYSuBy7+6Ak1oVBRn+6Ikim+43XqfIzL9izpVqWokDsfwbmhjIdHz/7uO9Fpn+kyFpYVVCsu5504QIuvgLsKoW1zIVLYaJl7+BjUx2B3/BtRm6dtw9HSXJLBDO/M1EnReFnyWT38gX3Tta7dukaNa0= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Babu.Moger@amd.com; Received: from CY4PR12MB1574.namprd12.prod.outlook.com (10.172.71.23) by CY4PR12MB1222.namprd12.prod.outlook.com (10.168.166.13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2707.26; Thu, 13 Feb 2020 18:17:48 +0000 Received: from CY4PR12MB1574.namprd12.prod.outlook.com ([fe80::e0cc:653a:e9bc:aa8e]) by CY4PR12MB1574.namprd12.prod.outlook.com ([fe80::e0cc:653a:e9bc:aa8e%2]) with mapi id 15.20.2707.030; Thu, 13 Feb 2020 18:17:47 +0000 Subject: [PATCH v4 12/16] hw/i386: Use the apicid handlers from X86MachineState From: Babu Moger To: ehabkost@redhat.com, marcel.apfelbaum@gmail.com, pbonzini@redhat.com, rth@twiddle.net, mst@redhat.com, imammedo@redhat.com Date: Thu, 13 Feb 2020 12:17:46 -0600 Message-ID: <158161786628.48948.1813866541108702762.stgit@naples-babu.amd.com> In-Reply-To: <158161767653.48948.10578064482878399556.stgit@naples-babu.amd.com> References: <158161767653.48948.10578064482878399556.stgit@naples-babu.amd.com> User-Agent: StGit/unknown-version X-ClientProxiedBy: DM5PR07CA0113.namprd07.prod.outlook.com (2603:10b6:4:ae::42) To CY4PR12MB1574.namprd12.prod.outlook.com (2603:10b6:910:e::23) MIME-Version: 1.0 Received: from naples-babu.amd.com (165.204.78.2) by DM5PR07CA0113.namprd07.prod.outlook.com (2603:10b6:4:ae::42) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2729.22 via Frontend Transport; Thu, 13 Feb 2020 18:17:47 +0000 X-Originating-IP: [165.204.78.2] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: a4e6373a-40e4-423f-e63a-08d7b0b10771 X-MS-TrafficTypeDiagnostic: CY4PR12MB1222:|CY4PR12MB1222: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:3173; X-Forefront-PRVS: 031257FE13 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4636009)(366004)(39860400002)(346002)(136003)(376002)(396003)(189003)(199004)(52116002)(66946007)(66556008)(66476007)(7696005)(26005)(5660300002)(103116003)(956004)(55016002)(4326008)(86362001)(2906002)(44832011)(186003)(16526019)(478600001)(316002)(81156014)(81166006)(8936002)(8676002); DIR:OUT; SFP:1101; SCL:1; SRVR:CY4PR12MB1222; H:CY4PR12MB1574.namprd12.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; Received-SPF: None (protection.outlook.com: amd.com does not designate permitted sender hosts) X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: ec72NGd/irsb4CpFCsmxAS5eAQdO+3BpsIojkIaBB70VNc+Wskn0eSkg8rxNfYyW3Pl/ebdkoYm4zSH6izaggYlfi0FhwXBKDIR3dmu4K3VGPHBahrf/5rnJcZQWPt6o0VOuFxHZ9MaL3V+lMjOTyMZlWmauN6lbQ//jk+03GCyFWBsGWG1ee7gh+41x2Uam5Uk557dQcTnFshCaVuFVEhOz76zcTUhWxTV8B/yzGRVgLSJ27ETL3fv4ubrTcJ8EVL36DOXcsKoWgZgRulLHPFc0ccli8gYA+/BnBmEE9hqATCbM5iU2AFkPVMlVXytYYmw5eGJGWOQWj5sRzX54mxe9KmSjTMBnRnNpf5UzaPVKr3yRPKzj6yRd0ed7k0EajmfoqYnQW+AXKzsXiA/DxgPQpJA9oOj6rfu1TOYTCFdFwMGKEW5AqhtQpQURuRUB X-MS-Exchange-AntiSpam-MessageData: 1Q6up3qYwaQ/9ebFw9o4Eax8QSdMzSyZL29nMa0SSoCwIQPumWDt/dRR9IUo1ssCCU1nx/2xGuXb3WNbSiBPwCdg5yuKETDN/lIAdtm/iTvz1xqVKApA4K/9R1mJMVmMea3315K5Ror0VJi7Rvq/Gw== X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: a4e6373a-40e4-423f-e63a-08d7b0b10771 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Feb 2020 18:17:47.8778 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: mI9hh4xq1X56NW3ZILSGYVmmWTWLQ2p+ftfAIsMXLucblcDH+qDmo0Z4RkDK4WBQ X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR12MB1222 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 40.107.223.43 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Check and Load the apicid handlers from X86CPUDefinition if available. Update the calling convention for the apicid handlers. Signed-off-by: Babu Moger --- hw/i386/pc.c | 6 +++--- hw/i386/x86.c | 27 +++++++++++++++++++++++---- 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/hw/i386/pc.c b/hw/i386/pc.c index be72a49716..93063af6a8 100644 --- a/hw/i386/pc.c +++ b/hw/i386/pc.c @@ -1808,14 +1808,14 @@ static void pc_cpu_pre_plug(HotplugHandler *hotplug_dev, topo_ids.die_id = cpu->die_id; topo_ids.core_id = cpu->core_id; topo_ids.smt_id = cpu->thread_id; - cpu->apic_id = x86_apicid_from_topo_ids(&topo_info, &topo_ids); + cpu->apic_id = x86ms->apicid_from_topo_ids(&topo_info, &topo_ids); } cpu_slot = pc_find_cpu_slot(MACHINE(pcms), cpu->apic_id, &idx); if (!cpu_slot) { MachineState *ms = MACHINE(pcms); - x86_topo_ids_from_apicid(cpu->apic_id, &topo_info, &topo_ids); + x86ms->topo_ids_from_apicid(cpu->apic_id, &topo_info, &topo_ids); error_setg(errp, "Invalid CPU [socket: %u, die: %u, core: %u, thread: %u] with" " APIC ID %" PRIu32 ", valid index range 0:%d", @@ -1836,7 +1836,7 @@ static void pc_cpu_pre_plug(HotplugHandler *hotplug_dev, /* TODO: move socket_id/core_id/thread_id checks into x86_cpu_realizefn() * once -smp refactoring is complete and there will be CPU private * CPUState::nr_cores and CPUState::nr_threads fields instead of globals */ - x86_topo_ids_from_apicid(cpu->apic_id, &topo_info, &topo_ids); + x86ms->topo_ids_from_apicid(cpu->apic_id, &topo_info, &topo_ids); if (cpu->socket_id != -1 && cpu->socket_id != topo_ids.pkg_id) { error_setg(errp, "property socket-id: %u doesn't match set apic-id:" " 0x%x (socket-id: %u)", cpu->socket_id, cpu->apic_id, topo_ids.pkg_id); diff --git a/hw/i386/x86.c b/hw/i386/x86.c index 3d944f68e6..b825861b85 100644 --- a/hw/i386/x86.c +++ b/hw/i386/x86.c @@ -52,6 +52,22 @@ /* Physical Address of PVH entry point read from kernel ELF NOTE */ static size_t pvh_start_addr; +/* + * Check for apicid handlers in X86MachineState. Load them if + * not loaded already. These handlers are loaded from X86CPUDefinition. + */ +static void x86_check_apicid_handlers(MachineState *ms) +{ + X86MachineState *x86ms = X86_MACHINE(ms); + + if (!x86ms->apicid_from_cpu_idx || + !x86ms->topo_ids_from_apicid || + !x86ms->apicid_from_topo_ids || + !x86ms->apicid_pkg_offset) { + cpu_x86_init_apicid_fns(ms); + } +} + /* * Calculates initial APIC ID for a specific CPU index * @@ -70,7 +86,7 @@ uint32_t x86_cpu_apic_id_from_index(X86MachineState *x86ms, init_topo_info(&topo_info, x86ms); - correct_id = x86_apicid_from_cpu_idx(&topo_info, cpu_index); + correct_id = x86ms->apicid_from_cpu_idx(&topo_info, cpu_index); if (x86mc->compat_apic_id_mode) { if (cpu_index != correct_id && !warned && !qtest_enabled()) { error_report("APIC IDs set in compatibility mode, " @@ -148,8 +164,8 @@ int64_t x86_get_default_cpu_node_id(const MachineState *ms, int idx) init_topo_info(&topo_info, x86ms); assert(idx < ms->possible_cpus->len); - x86_topo_ids_from_apicid(ms->possible_cpus->cpus[idx].arch_id, - &topo_info, &topo_ids); + x86ms->topo_ids_from_apicid(ms->possible_cpus->cpus[idx].arch_id, + &topo_info, &topo_ids); return topo_ids.pkg_id % ms->numa_state->num_nodes; } @@ -169,6 +185,9 @@ const CPUArchIdList *x86_possible_cpu_arch_ids(MachineState *ms) return ms->possible_cpus; } + /* Initialize apicid handlers */ + x86_check_apicid_handlers(ms); + ms->possible_cpus = g_malloc0(sizeof(CPUArchIdList) + sizeof(CPUArchId) * max_cpus); ms->possible_cpus->len = max_cpus; @@ -182,7 +201,7 @@ const CPUArchIdList *x86_possible_cpu_arch_ids(MachineState *ms) ms->possible_cpus->cpus[i].vcpus_count = 1; ms->possible_cpus->cpus[i].arch_id = x86_cpu_apic_id_from_index(x86ms, i); - x86_topo_ids_from_apicid(ms->possible_cpus->cpus[i].arch_id, + x86ms->topo_ids_from_apicid(ms->possible_cpus->cpus[i].arch_id, &topo_info, &topo_ids); ms->possible_cpus->cpus[i].props.has_socket_id = true; ms->possible_cpus->cpus[i].props.socket_id = topo_ids.pkg_id; From patchwork Thu Feb 13 18:17:53 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Babu Moger X-Patchwork-Id: 11381011 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 87A8E92A for ; Thu, 13 Feb 2020 18:29:32 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 5234021734 for ; Thu, 13 Feb 2020 18:29:32 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=amdcloud.onmicrosoft.com header.i=@amdcloud.onmicrosoft.com header.b="gRocEXli" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 5234021734 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=amd.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:57758 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j2JEx-00024L-GC for patchwork-qemu-devel@patchwork.kernel.org; Thu, 13 Feb 2020 13:29:31 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:42871) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j2J3l-0003RB-K2 for qemu-devel@nongnu.org; Thu, 13 Feb 2020 13:17:58 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1j2J3k-0000uJ-DE for qemu-devel@nongnu.org; Thu, 13 Feb 2020 13:17:57 -0500 Received: from mail-dm6nam11on2070.outbound.protection.outlook.com ([40.107.223.70]:35872 helo=NAM11-DM6-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1j2J3k-0000sv-6E for qemu-devel@nongnu.org; Thu, 13 Feb 2020 13:17:56 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ez8EdLCX53VGF/f0urRp/3LfTx8Xd8LfA0opCLGk5EqeHHqbid2pSAUu4GEuknvl5kCv4Qnpa75ySouJejl7DsfGH8oH4wm6gZAorCc0RFNFuYbmdsuyn76IQ01qmX+oiOWMiovOFkZfdy0IVE+N1+ICROjdDDgXHFd8OG5AYp1sdZM+zWOmreWF4XVSxj4acW1aN4KKy5I01NzGY/wELuNxQwXAj4DPvV8M40LmcUr2X0ImDPDdCnkGlJClN5pGv8v9Yb1ILlhO2PU1qiNT7/tygqjgmqoAyC+juml7EvmSE1HMGPFRarz/ou1Vy2cPQQO3hUSSgYXdWL4f/MoCEg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=vx3jWkvuTGXZFRu5dVlng5kpV99py/1BnDEzQyaPZGY=; b=m9luCGqVgO5pVxGmkuBkpH/CByR4NQD7ugOve5VgwPF5AojX3HbnAC43b3v/bQH7aERkaHRkw+wAX5rNyu+HFQpc0Gnszt7mOzb08bZIZRh/ul2fFYMFkAxZb7eNScRXt9e40fXrhIUh1GPT1CPnYZ2Cyx1MzE/51+FQOIymPpugABvG3jQcJP4z9y1prDBepiL5udG/DXhzNkgUj5TNB5ig/Potz5cUTsSkE+nvwlk7Nx2jgmHd3dMzvGumJXpQseKearc9iv7XGp+a3/9BAUnQYARIPisvASfogwNQIsqqjGaYsaQ0h1wKsPEHPWx8SMoAA49utUbbnGPAwOSwEg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amdcloud.onmicrosoft.com; s=selector2-amdcloud-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=vx3jWkvuTGXZFRu5dVlng5kpV99py/1BnDEzQyaPZGY=; b=gRocEXliPKSSMle1KJR59sLQU5U1m9D49Nz8f/o7VOMBGgT+UV+cgumwmyqwpVpBWQo6wZq9AHvtLh++8GRrB98ySz085ILqQeK2ayAWts2GjAPIIYqWqqaAogccUP/siQyaP1lnRstlxPEijTJ1+qmHAhoQkfz31MMbOO6oRkA= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Babu.Moger@amd.com; Received: from CY4PR12MB1574.namprd12.prod.outlook.com (10.172.71.23) by CY4PR12MB1222.namprd12.prod.outlook.com (10.168.166.13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2707.26; Thu, 13 Feb 2020 18:17:54 +0000 Received: from CY4PR12MB1574.namprd12.prod.outlook.com ([fe80::e0cc:653a:e9bc:aa8e]) by CY4PR12MB1574.namprd12.prod.outlook.com ([fe80::e0cc:653a:e9bc:aa8e%2]) with mapi id 15.20.2707.030; Thu, 13 Feb 2020 18:17:54 +0000 Subject: [PATCH v4 13/16] target/i386: Add EPYC model specific handlers From: Babu Moger To: ehabkost@redhat.com, marcel.apfelbaum@gmail.com, pbonzini@redhat.com, rth@twiddle.net, mst@redhat.com, imammedo@redhat.com Date: Thu, 13 Feb 2020 12:17:53 -0600 Message-ID: <158161787313.48948.4764091270796216726.stgit@naples-babu.amd.com> In-Reply-To: <158161767653.48948.10578064482878399556.stgit@naples-babu.amd.com> References: <158161767653.48948.10578064482878399556.stgit@naples-babu.amd.com> User-Agent: StGit/unknown-version X-ClientProxiedBy: DM6PR17CA0003.namprd17.prod.outlook.com (2603:10b6:5:1b3::16) To CY4PR12MB1574.namprd12.prod.outlook.com (2603:10b6:910:e::23) MIME-Version: 1.0 Received: from naples-babu.amd.com (165.204.78.2) by DM6PR17CA0003.namprd17.prod.outlook.com (2603:10b6:5:1b3::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2729.22 via Frontend Transport; Thu, 13 Feb 2020 18:17:53 +0000 X-Originating-IP: [165.204.78.2] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: d032832e-a91f-47dd-8b1f-08d7b0b10b70 X-MS-TrafficTypeDiagnostic: CY4PR12MB1222:|CY4PR12MB1222: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:10000; X-Forefront-PRVS: 031257FE13 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4636009)(366004)(39860400002)(346002)(136003)(376002)(396003)(189003)(199004)(52116002)(66946007)(66556008)(66476007)(7696005)(26005)(5660300002)(103116003)(956004)(55016002)(4326008)(86362001)(2906002)(44832011)(186003)(16526019)(478600001)(316002)(81156014)(81166006)(966005)(8936002)(8676002); DIR:OUT; SFP:1101; SCL:1; SRVR:CY4PR12MB1222; H:CY4PR12MB1574.namprd12.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; Received-SPF: None (protection.outlook.com: amd.com does not designate permitted sender hosts) X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: nAaiWZu3+yY4n4HLrHI13OqQq0MOr+oSB/MNINHe+pVnpTNZTpQ55VNw3ztcm4L/hRRvyP7MFdakxY2sUfnkIt3M6ryTbjyfkmcsy1UU3EVxjLHLohiBEBolC8xP8Z3Ry+iN+Pp8aE0zgCnE/CNPXV327yy+9Xn1xL1sOjiC6YpKmzsdiGztAOEWjpElE+3sFBCL8NLS3TpkGXmS9O0eqrt4aHGZzc0foNJ8ve7NuvIY6ioum+mZaKiyh2ZlCxHip57CjezhCV88fElC/vtmSZTSXszspTs3N9JE2EZ5KdSqewZGpcs+pa/Sia9igxmwpbjeoUOWtHAGtJ7uQH//N3fT98rdsHLWNkA5XSt4quEkoWiX02Falwr3m2gtZl+3baqRkMK2Q0imSgtWJpklEYd/KN1dCLW2LhhxH7woFqc/e4C2IU8+TGmAmTkLU9cYDwNyftRTiKq+QSUqK2Nyzdng0zTHDxBHCudqhRkFCWMDFI8RjfiYWoohirsH+f7Lua1tJ8DrATcZ5tDWFoPI/g== X-MS-Exchange-AntiSpam-MessageData: rcJf30jdMgy1Z2JIm+YxUbwomu1Bxknty1+EUp2vIIQSAp2n/yMOKAgrnayDHOprwCXg9vZpdXNG0s6B69ecetOL2iZ+5bpl/Q5OEpl8fGQQvmBMwYg4zE0fabmSL+xMrq3OJyLdyJyK8zloUxmduQ== X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: d032832e-a91f-47dd-8b1f-08d7b0b10b70 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Feb 2020 18:17:54.5928 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: BN7TGUCiwfxFzB6MpA4+WTmsAIGN15AnYV8FfdUfccUrlvUDk51QmoziKvgURsrH X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR12MB1222 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 40.107.223.70 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Add the new EPYC model specific handlers to fix the apicid decoding. The APIC ID is decoded based on the sequence sockets->dies->cores->threads. This works fine for most standard AMD and other vendors' configurations, but this decoding sequence does not follow that of AMD's APIC ID enumeration strictly. In some cases this can cause CPU topology inconsistency. When booting a guest VM, the kernel tries to validate the topology, and finds it inconsistent with the enumeration of EPYC cpu models. The more details are in the bug https://bugzilla.redhat.com/show_bug.cgi?id=1728166. To fix the problem we need to build the topology as per the Processor Programming Reference (PPR) for AMD Family 17h Model 01h, Revision B1 Processors. It is available at https://www.amd.com/system/files/TechDocs/55570-B1_PUB.zip Here is the text from the PPR. Operating systems are expected to use Core::X86::Cpuid::SizeId[ApicIdSize], the number of least significant bits in the Initial APIC ID that indicate core ID within a processor, in constructing per-core CPUID masks. Core::X86::Cpuid::SizeId[ApicIdSize] determines the maximum number of cores (MNC) that the processor could theoretically support, not the actual number of cores that are actually implemented or enabled on the processor, as indicated by Core::X86::Cpuid::SizeId[NC]. Each Core::X86::Apic::ApicId[ApicId] register is preset as follows: • ApicId[6] = Socket ID. • ApicId[5:4] = Node ID. • ApicId[3] = Logical CCX L3 complex ID • ApicId[2:0]= (SMT) ? {LogicalCoreID[1:0],ThreadId} : {1'b0,LogicalCoreID[1:0]} Signed-off-by: Babu Moger --- target/i386/cpu.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/target/i386/cpu.c b/target/i386/cpu.c index 389b68d765..082865d72b 100644 --- a/target/i386/cpu.c +++ b/target/i386/cpu.c @@ -3835,6 +3835,10 @@ static X86CPUDefinition builtin_x86_defs[] = { .xlevel = 0x8000001E, .model_id = "AMD EPYC Processor", .cache_info = &epyc_cache_info, + .apicid_from_cpu_idx = x86_apicid_from_cpu_idx_epyc, + .topo_ids_from_apicid = x86_topo_ids_from_apicid_epyc, + .apicid_from_topo_ids = x86_apicid_from_topo_ids_epyc, + .apicid_pkg_offset = apicid_pkg_offset_epyc, .versions = (X86CPUVersionDefinition[]) { { .version = 1 }, { From patchwork Thu Feb 13 18:17:59 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Babu Moger X-Patchwork-Id: 11381019 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 0C87D92A for ; Thu, 13 Feb 2020 18:33:12 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id D7187222C2 for ; Thu, 13 Feb 2020 18:33:11 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=amdcloud.onmicrosoft.com header.i=@amdcloud.onmicrosoft.com header.b="my6IOFvg" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org D7187222C2 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=amd.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:57834 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j2JIU-00069T-8D for patchwork-qemu-devel@patchwork.kernel.org; Thu, 13 Feb 2020 13:33:10 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:43167) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j2J3u-0003eP-4I for qemu-devel@nongnu.org; Thu, 13 Feb 2020 13:18:08 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1j2J3r-0001Bl-Vv for qemu-devel@nongnu.org; Thu, 13 Feb 2020 13:18:06 -0500 Received: from mail-dm6nam11on2054.outbound.protection.outlook.com ([40.107.223.54]:52256 helo=NAM11-DM6-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1j2J3r-00018r-Q2 for qemu-devel@nongnu.org; Thu, 13 Feb 2020 13:18:03 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=CCWKWSKaljpv6Nfc+VB0Wkb8/BDl32m2+snxXAXtW90LS4eky9QqgIVxNWOiQAI7iSuiz4Kuo4KciDsHhI1ol8mxtSRUbml9wZng2knwmO732V5TMlqnMydIYpaq+54t5dKzgg6J28fj+SX05F+Rk5+MGj0iewLrEJx6s5QZy/Utjj7bsozacTx3081sgDLhchNypBjdvzU8+fnxyFfKL66uiAuvGfmh5iqWRyD4aUKGIaJdYJipVQGMbIdyjA01skQ9joR++ARGRO6jB5kTIPksuo5rdXi+cj+EkB8SX/y3xPIYhCdFn7bIVdgdNgdLL90K0reiPb28pjVaLXx0zA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=9tsL/MUJX5I/sqAwLygswH8EhwfKNLXQYS5v4pDYVkA=; b=ilMA9e/8qOa318bXu5Rac8nE1LFZd5s6WTBx1AKV1X79QvzVwcuxtc45hyXUXWRViIxrRgi16O5oXm80fCRPQdbnufYtbtebsOIqi3z8p+5/yt+/9HTvdhyBtrx0XIF2a/Iu5zd/M/0Aq7Jr2QVaceftrtHZ88bFm+vI4fGn4AzBsbNuOZnDjXfeUaRqReLmkAVw2HaCjwWwmD0pKz1RXFv5POibCF/JaXA3h/Kpnm8/lMkwRIHCpd/cG4P7N03l12w1wbbdiIQlNOA3QT9pjGcaGUp8XxunVYj8rBTubD1ACGPgbOOQFa5elIHBFzEwZzIWZOWg768AkNFELEdtbQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amdcloud.onmicrosoft.com; s=selector2-amdcloud-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=9tsL/MUJX5I/sqAwLygswH8EhwfKNLXQYS5v4pDYVkA=; b=my6IOFvg8Lnp1H3L/la9zZ69xFyWV3S4tlCWPmM7EPUA0G4zlzH0G2hoGMPNbXmDZrVgAnkf3WdiO4uBfkkkac33GyvFb+/ywdFCAYrdHMdpVH86yKIeUFXeuyHFPm5owJ+QEyQb/ycgJRB2D4jxW6qgUyhmjaUPyD3bvYW2mIw= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Babu.Moger@amd.com; Received: from CY4PR12MB1574.namprd12.prod.outlook.com (10.172.71.23) by CY4PR12MB1222.namprd12.prod.outlook.com (10.168.166.13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2707.26; Thu, 13 Feb 2020 18:18:02 +0000 Received: from CY4PR12MB1574.namprd12.prod.outlook.com ([fe80::e0cc:653a:e9bc:aa8e]) by CY4PR12MB1574.namprd12.prod.outlook.com ([fe80::e0cc:653a:e9bc:aa8e%2]) with mapi id 15.20.2707.030; Thu, 13 Feb 2020 18:18:02 +0000 Subject: [PATCH v4 14/16] hw/i386: Move arch_id decode inside x86_cpus_init From: Babu Moger To: ehabkost@redhat.com, marcel.apfelbaum@gmail.com, pbonzini@redhat.com, rth@twiddle.net, mst@redhat.com, imammedo@redhat.com Date: Thu, 13 Feb 2020 12:17:59 -0600 Message-ID: <158161787984.48948.11401269513856632633.stgit@naples-babu.amd.com> In-Reply-To: <158161767653.48948.10578064482878399556.stgit@naples-babu.amd.com> References: <158161767653.48948.10578064482878399556.stgit@naples-babu.amd.com> User-Agent: StGit/unknown-version X-ClientProxiedBy: DM6PR17CA0032.namprd17.prod.outlook.com (2603:10b6:5:1b3::45) To CY4PR12MB1574.namprd12.prod.outlook.com (2603:10b6:910:e::23) MIME-Version: 1.0 Received: from naples-babu.amd.com (165.204.78.2) by DM6PR17CA0032.namprd17.prod.outlook.com (2603:10b6:5:1b3::45) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2729.24 via Frontend Transport; Thu, 13 Feb 2020 18:18:01 +0000 X-Originating-IP: [165.204.78.2] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 662c555e-a083-4921-e5e5-08d7b0b10fe8 X-MS-TrafficTypeDiagnostic: CY4PR12MB1222:|CY4PR12MB1222: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:2958; X-Forefront-PRVS: 031257FE13 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4636009)(366004)(39860400002)(346002)(136003)(376002)(396003)(189003)(199004)(52116002)(66946007)(66556008)(66476007)(7696005)(26005)(5660300002)(103116003)(956004)(55016002)(4326008)(86362001)(2906002)(44832011)(186003)(16526019)(478600001)(316002)(81156014)(81166006)(8936002)(8676002); DIR:OUT; SFP:1101; SCL:1; SRVR:CY4PR12MB1222; H:CY4PR12MB1574.namprd12.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; Received-SPF: None (protection.outlook.com: amd.com does not designate permitted sender hosts) X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: vJ44Y/Y1k6ETRHolTONzcOcz3MDlvzyEL9/IuBVZn0uK5+s8Z6YqjjEgFZZtlWY6Yyy/5I+tAvD7RtpJ3jAHsMZN7kteAS58aDRXPUj0qT3I2jo8s1wj/Imk1C//wWp6WE8aW09oLEjdkXjwmRnsnwyLb0qj8FCNkzUuqAHp07HUrwhuvOUPT30py5iyoErAdw/BgjM4I5XAheYYnOArh/AThnjxM8yZ08bzL2dSggQlejFS4P+0pkzb8cK0Nu1ZjAA/iiyr/meu8E6UPRklL3+XqjCbSeayMUvf3mbNdZY7yt/YencglIsXDttpInpPkUyn96NGupquUg6TXJFF6I8lEDDIiIts8ZweY57of8FB0v1omGo2zCXwcles2Stz5XXr2FXvlCkiiBAZQAHFhipUNT1WePj8XekztVfPbcXwOGwjPygg/yoVibxZYghG X-MS-Exchange-AntiSpam-MessageData: rDPsLegkW6VVKhnLo+VY43Zvx47DkSFblIpHznnKiu/2cRU8kOo2STbhHN8ogAvDn4Pp+zLxg8u7EB/PPjBoP7nPcmnAzpbAy/HAd5e4Op2Hx5dGPEbDGa6ekpmUy9e0yeRtbRlch+cZY+aBMHNkQw== X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 662c555e-a083-4921-e5e5-08d7b0b10fe8 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Feb 2020 18:18:02.0105 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: sapVXe9pWq77rVbWB2A54LHhjSBBeq9Edl0Lj7sAtXXbkN5pO+M6LlhMsWb7p26X X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR12MB1222 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 40.107.223.54 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Apicid calculation depends on knowing the total number of numa nodes for EPYC cpu models. Right now, we are calculating the arch_id while parsing the numa(parse_numa). At this time, it is not known how many total numa nodes are configured in the system. Move the arch_id inside x86_cpus_init. At this time smp parameter is already completed and numa node information is available. Signed-off-by: Babu Moger --- hw/i386/x86.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/hw/i386/x86.c b/hw/i386/x86.c index b825861b85..472dc3eb77 100644 --- a/hw/i386/x86.c +++ b/hw/i386/x86.c @@ -127,6 +127,9 @@ void x86_cpus_init(X86MachineState *x86ms, int default_cpu_version) MachineState *ms = MACHINE(x86ms); MachineClass *mc = MACHINE_GET_CLASS(x86ms); + /* Initialize apicid handlers first */ + x86_check_apicid_handlers(ms); + x86_cpu_set_default_version(default_cpu_version); /* @@ -140,6 +143,11 @@ void x86_cpus_init(X86MachineState *x86ms, int default_cpu_version) x86ms->apic_id_limit = x86_cpu_apic_id_from_index(x86ms, ms->smp.max_cpus - 1) + 1; possible_cpus = mc->possible_cpu_arch_ids(ms); + + for (i = 0; i < ms->smp.cpus; i++) { + ms->possible_cpus->cpus[i].arch_id = x86_cpu_apic_id_from_index(x86ms, i); + } + for (i = 0; i < ms->smp.cpus; i++) { x86_cpu_new(x86ms, possible_cpus->cpus[i].arch_id, &error_fatal); } @@ -164,8 +172,7 @@ int64_t x86_get_default_cpu_node_id(const MachineState *ms, int idx) init_topo_info(&topo_info, x86ms); assert(idx < ms->possible_cpus->len); - x86ms->topo_ids_from_apicid(ms->possible_cpus->cpus[idx].arch_id, - &topo_info, &topo_ids); + x86_topo_ids_from_idx(&topo_info, idx, &topo_ids); return topo_ids.pkg_id % ms->numa_state->num_nodes; } @@ -199,10 +206,7 @@ const CPUArchIdList *x86_possible_cpu_arch_ids(MachineState *ms) ms->possible_cpus->cpus[i].type = ms->cpu_type; ms->possible_cpus->cpus[i].vcpus_count = 1; - ms->possible_cpus->cpus[i].arch_id = - x86_cpu_apic_id_from_index(x86ms, i); - x86ms->topo_ids_from_apicid(ms->possible_cpus->cpus[i].arch_id, - &topo_info, &topo_ids); + x86_topo_ids_from_idx(&topo_info, i, &topo_ids); ms->possible_cpus->cpus[i].props.has_socket_id = true; ms->possible_cpus->cpus[i].props.socket_id = topo_ids.pkg_id; if (x86ms->smp_dies > 1) { From patchwork Thu Feb 13 18:18:07 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Babu Moger X-Patchwork-Id: 11381017 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 7764692A for ; Thu, 13 Feb 2020 18:32:15 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 447E524696 for ; Thu, 13 Feb 2020 18:32:15 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=amdcloud.onmicrosoft.com header.i=@amdcloud.onmicrosoft.com header.b="oVFipI6q" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 447E524696 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=amd.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:57820 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j2JHa-0004y2-D0 for patchwork-qemu-devel@patchwork.kernel.org; Thu, 13 Feb 2020 13:32:14 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:43361) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j2J40-0003mx-Qs for qemu-devel@nongnu.org; Thu, 13 Feb 2020 13:18:18 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1j2J3y-0001Pc-MG for qemu-devel@nongnu.org; Thu, 13 Feb 2020 13:18:11 -0500 Received: from mail-dm6nam11on2040.outbound.protection.outlook.com ([40.107.223.40]:62944 helo=NAM11-DM6-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1j2J3y-0001NI-H2 for qemu-devel@nongnu.org; Thu, 13 Feb 2020 13:18:10 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=PHq05fygmjV7n/DXjEDWC1obgV4hy02sZh3wrUdA0udnxpEUhCIczeUskqK0woI/6YNxZg24367tN+RKI089YxURQCzLJ2ZyXxYZ0Jwr3nS4oN01HQWtsEVMyAb88SSJvTSSkH5zREjQ9qsxpdXITEDHS3hmhdwaWb6K1oUVpMMHgudDe4o3l3NZC/7qpEIF+1CeyljPtBydldoKW8xLIjjv4AzcMq6zb08zoJ6b9wgfpMsIoK8U10DnHMoksvP62Z+kbbZIWnrgSEqL0gi2b9h1yK5pr7bdRuQLAyiaGIz9nCsWPWKnqokWFG8k89nHZZiDAyw2Hf7EWYs5E+YGKw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=82BDvXMRZvf3zVqwwIS/WPswdRRRO0zvBCyK5+YzSn8=; b=lQfIKDPQX5fT8FuL13fvzGffcKlkCk1hCf0gjaGzO0mpegyP+Jgv8qQBoYpdGk02NMARNVhm+XcK0UsG/AZmfK9Bdy+K3Os/eAxGNq0sO8TAFjzgf0qIv7cHTw5AkSu/0OsgyBG0Cnln8qnCewiI/6S7PwmKBB6StDYEgZeTEg3nJ87lNyxzzq/DdA2hqs9nyFxbE00pSr1ZAsUeNtY9fdbCXJUUGOilS3IXKrKnF0tJcZKSP/BsaMFECZ6NvqdgW6Xjt5dkqHBwlkGZa3CGy8HAqjnW1NUIVrtCxuHbZWkuMJ1ss3pbWtq+nBGqhkJRWuCoOF8GQtTZxQV1a6IiBw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amdcloud.onmicrosoft.com; s=selector2-amdcloud-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=82BDvXMRZvf3zVqwwIS/WPswdRRRO0zvBCyK5+YzSn8=; b=oVFipI6q8BP6PaB/U8Bu8nhX/YHykROgORO9o2qMOQ2ZCc8VpY8PqiiFDa3XzkK8Uey6Gfxsb+Y6KiIDFMk1aDks5VVskK5buUEcUGF3Arey126tz7EpTd7kyLQqRZX45A2W05R+/OtB+bVtL+ymOq2B8pMBKAGG4tK32Umxr0k= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Babu.Moger@amd.com; Received: from CY4PR12MB1574.namprd12.prod.outlook.com (10.172.71.23) by CY4PR12MB1222.namprd12.prod.outlook.com (10.168.166.13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2707.26; Thu, 13 Feb 2020 18:18:08 +0000 Received: from CY4PR12MB1574.namprd12.prod.outlook.com ([fe80::e0cc:653a:e9bc:aa8e]) by CY4PR12MB1574.namprd12.prod.outlook.com ([fe80::e0cc:653a:e9bc:aa8e%2]) with mapi id 15.20.2707.030; Thu, 13 Feb 2020 18:18:08 +0000 Subject: [PATCH v4 15/16] i386: Fix pkg_id offset for EPYC cpu models From: Babu Moger To: ehabkost@redhat.com, marcel.apfelbaum@gmail.com, pbonzini@redhat.com, rth@twiddle.net, mst@redhat.com, imammedo@redhat.com Date: Thu, 13 Feb 2020 12:18:07 -0600 Message-ID: <158161788726.48948.3019001029706753681.stgit@naples-babu.amd.com> In-Reply-To: <158161767653.48948.10578064482878399556.stgit@naples-babu.amd.com> References: <158161767653.48948.10578064482878399556.stgit@naples-babu.amd.com> User-Agent: StGit/unknown-version X-ClientProxiedBy: DM6PR17CA0019.namprd17.prod.outlook.com (2603:10b6:5:1b3::32) To CY4PR12MB1574.namprd12.prod.outlook.com (2603:10b6:910:e::23) MIME-Version: 1.0 Received: from naples-babu.amd.com (165.204.78.2) by DM6PR17CA0019.namprd17.prod.outlook.com (2603:10b6:5:1b3::32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2729.25 via Frontend Transport; Thu, 13 Feb 2020 18:18:07 +0000 X-Originating-IP: [165.204.78.2] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: be8cc7bd-c08e-48f8-eefb-08d7b0b113dd X-MS-TrafficTypeDiagnostic: CY4PR12MB1222:|CY4PR12MB1222: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:2449; X-Forefront-PRVS: 031257FE13 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4636009)(366004)(39860400002)(346002)(136003)(376002)(396003)(189003)(199004)(52116002)(66946007)(66556008)(66476007)(7696005)(26005)(5660300002)(103116003)(956004)(55016002)(4326008)(86362001)(2906002)(44832011)(186003)(16526019)(478600001)(316002)(81156014)(81166006)(8936002)(8676002)(170073001); DIR:OUT; SFP:1101; SCL:1; SRVR:CY4PR12MB1222; H:CY4PR12MB1574.namprd12.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; Received-SPF: None (protection.outlook.com: amd.com does not designate permitted sender hosts) X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: dcIO7qq5MH0e76Y13sci6pLomoGKeLsE2os3Bw3NByx7S3/5dKsCbHjit6qhSr7vg1H9O62HlEQ4dQoIvbvKI2MiEGym4egaQ6/PQmujigQNsz342zZm+rg0NeNmVGv3+QQVnQ6FksNhdBuHQkCTPBb3RYvpSpIN3qDx6T19IzeDKY+wGZawDV2/tDfe699I6n7J5ogxPl3gQnaJ/C+7y/ugqNPHU9OKAKhQBRZuXW4HfoLm6Oyu529qTCTJD1cV7a6eiFbb6pVyYGrTtlKg/GY0QyWZR45SsJoW+KwH/LpFROAVb5JgpvLX24kzHZqPi61BsRSu72pk0ZMD2F6iRpC0byNO1TZn8OQxYhVTSp2RlPK6pLbLrer347MCzSTuliACHcoTqndjTJ9R3bEmPBXP2l1XmptXYat1GSNwEs+/cMNzg6Yc1+upfZ0heXk0DZ1tLAXHXxzp5Aicnc3Hp3BhFi0Od10d0fijagF/098AAe2o9nfysjKi5SiFsPyw X-MS-Exchange-AntiSpam-MessageData: frhp6KPQjQJjQBIzCt+mjEQ4s2m7LgeG4R8Q/osId1v70qktjARC/tvHzP1d9BCgmXdKskeV/S8oDMucPx8koBMgDNGhEO8Mo++v4+K+i87byuO2DGvu5sqexXfg2RdDAmMC0dFfdazEmP1j3M3ieQ== X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: be8cc7bd-c08e-48f8-eefb-08d7b0b113dd X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Feb 2020 18:18:08.7375 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: DT9GgzyHwJTQr1dWvR4G1dwcbh9BFfl9jrBNOiXxayrnB2iVUlU/IfifwjTF7Ock X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR12MB1222 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 40.107.223.40 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" If the system is numa configured the pkg_offset needs to be adjusted for EPYC cpu models. Fix it calling the model specific handler. Signed-off-by: Babu Moger --- hw/i386/pc.c | 1 + hw/i386/x86.c | 4 ++++ target/i386/cpu.c | 4 ++-- target/i386/cpu.h | 1 + 4 files changed, 8 insertions(+), 2 deletions(-) diff --git a/hw/i386/pc.c b/hw/i386/pc.c index 93063af6a8..e56780b1f0 100644 --- a/hw/i386/pc.c +++ b/hw/i386/pc.c @@ -1754,6 +1754,7 @@ static void pc_cpu_pre_plug(HotplugHandler *hotplug_dev, env->nr_dies = x86ms->smp_dies; env->nr_nodes = ms->numa_state->num_nodes / ms->smp.sockets; + env->pkg_offset = x86ms->apicid_pkg_offset(&topo_info); /* * If APIC ID is not set, diff --git a/hw/i386/x86.c b/hw/i386/x86.c index 472dc3eb77..99f2a67d69 100644 --- a/hw/i386/x86.c +++ b/hw/i386/x86.c @@ -106,12 +106,16 @@ void x86_cpu_new(X86MachineState *x86ms, int64_t apic_id, Error **errp) Error *local_err = NULL; CPUX86State *env = NULL; MachineState *ms = MACHINE(x86ms); + X86CPUTopoInfo topo_info; + + init_topo_info(&topo_info, x86ms); cpu = object_new(MACHINE(x86ms)->cpu_type); env = &X86_CPU(cpu)->env; env->nr_dies = x86ms->smp_dies; env->nr_nodes = ms->numa_state->num_nodes / ms->smp.sockets; + env->pkg_offset = x86ms->apicid_pkg_offset(&topo_info); object_property_set_uint(cpu, apic_id, "apic-id", &local_err); object_property_set_bool(cpu, true, "realized", &local_err); diff --git a/target/i386/cpu.c b/target/i386/cpu.c index 082865d72b..b793da7c6e 100644 --- a/target/i386/cpu.c +++ b/target/i386/cpu.c @@ -5454,7 +5454,7 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index, uint32_t count, *ecx |= CPUID_TOPOLOGY_LEVEL_SMT; break; case 1: - *eax = apicid_pkg_offset(&topo_info); + *eax = env->pkg_offset; *ebx = cs->nr_cores * cs->nr_threads; *ecx |= CPUID_TOPOLOGY_LEVEL_CORE; break; @@ -5488,7 +5488,7 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index, uint32_t count, *ecx |= CPUID_TOPOLOGY_LEVEL_CORE; break; case 2: - *eax = apicid_pkg_offset(&topo_info); + *eax = env->pkg_offset; *ebx = env->nr_dies * cs->nr_cores * cs->nr_threads; *ecx |= CPUID_TOPOLOGY_LEVEL_DIE; break; diff --git a/target/i386/cpu.h b/target/i386/cpu.h index 64a1cca690..641e1cacdf 100644 --- a/target/i386/cpu.h +++ b/target/i386/cpu.h @@ -1604,6 +1604,7 @@ typedef struct CPUX86State { unsigned nr_dies; unsigned nr_nodes; + unsigned pkg_offset; } CPUX86State; struct kvm_msrs; From patchwork Thu Feb 13 18:18:14 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Babu Moger X-Patchwork-Id: 11381021 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id D2E4692A for ; Thu, 13 Feb 2020 18:34:13 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 4FC3F222C2 for ; Thu, 13 Feb 2020 18:34:13 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=amdcloud.onmicrosoft.com header.i=@amdcloud.onmicrosoft.com header.b="Hy+QHEFv" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 4FC3F222C2 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=amd.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Received: from localhost ([::1]:57852 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j2JJU-0007py-9j for patchwork-qemu-devel@patchwork.kernel.org; Thu, 13 Feb 2020 13:34:12 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:43554) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j2J4A-0003tw-Nh for qemu-devel@nongnu.org; Thu, 13 Feb 2020 13:18:24 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1j2J48-0001f3-Q6 for qemu-devel@nongnu.org; Thu, 13 Feb 2020 13:18:22 -0500 Received: from mail-dm6nam11on2067.outbound.protection.outlook.com ([40.107.223.67]:8065 helo=NAM11-DM6-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1j2J48-0001Zy-3E for qemu-devel@nongnu.org; Thu, 13 Feb 2020 13:18:20 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=nj5bMCww99qvQODZShzbiilHtu5waK+8Adv/PG+PI55sJdNdd7o5VkigaFzhgpLEGQklLV1UUgRr4kz6U087K50neAAFfEnrP+Ff1G7vdQsDw9GRNbCh6HJE3DlQbGnCKSFzFCDWTDBALjLbO/16Kv3SvT/pejccBtbMKVhCziAfQy7Pxl77gPRupWF6H54g5QwVF5kwQu0Vx0eULGwUB05flXwFMtEPuCHETylEovXmYhmQiRhCNv81jDCl0M00+m9E5se8l5lQ01bDQyh+QwtiEGxZhpR5KoWu6idz3qqBDlYDhtKIsmlFrEDsa0BK3B8y5ivM3nC3sU9UVNau+Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=hAQb04Z8pY4pWGNtekpdV2h7RNoU2rwJnd2aRbQmSO0=; b=fkaQ0xUTz5xgsXXW7IwQHehe9ZikCKutnKHwreQ8E1FVbs7t+bAHRhposzdjBlckl6srEIw7nfJBzNGmnFtZc7YpOKZ57JM5BmLR2J3Tc+ECGrPfB1fTZzwcu6TLUX1VrV6o/8EXvQTrUD8Ix5DrHsoG3Tn/uNf65wO/LGfxjnH+tDRrjDvKgY89JKOlw8rE8fy4NNyvWcUSVL6VQH+XdEmxX95OQpl3RFhd7PaLOkMaDA2DuTBACn521wJ120ZmKhwfkm2rag0vTHnq+NFNZk0F3VwIUfHKcOifI4PbNx4VQIacTgZpem6aV9YubCIIB68Kr6WVSQzqtzLYpn3jUw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amdcloud.onmicrosoft.com; s=selector2-amdcloud-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=hAQb04Z8pY4pWGNtekpdV2h7RNoU2rwJnd2aRbQmSO0=; b=Hy+QHEFvY6E8kc24qFSdbAK4mgAkBh39lc1XC++gHsr85ONGqaq1XshmwOaPIXNfsTyoKEZ6ABBr55KWGQeIXTEsUKXQpK4RwCPqpfQdPkbU8uHn67KApvIfgY1duhrcgFvbQEp6VsOYR1xfHdkixlRn1iMZwWResVsoYjMzMYw= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Babu.Moger@amd.com; Received: from CY4PR12MB1574.namprd12.prod.outlook.com (10.172.71.23) by CY4PR12MB1222.namprd12.prod.outlook.com (10.168.166.13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2707.26; Thu, 13 Feb 2020 18:18:15 +0000 Received: from CY4PR12MB1574.namprd12.prod.outlook.com ([fe80::e0cc:653a:e9bc:aa8e]) by CY4PR12MB1574.namprd12.prod.outlook.com ([fe80::e0cc:653a:e9bc:aa8e%2]) with mapi id 15.20.2707.030; Thu, 13 Feb 2020 18:18:15 +0000 Subject: [PATCH v4 16/16] tests: Update the Unit tests From: Babu Moger To: ehabkost@redhat.com, marcel.apfelbaum@gmail.com, pbonzini@redhat.com, rth@twiddle.net, mst@redhat.com, imammedo@redhat.com Date: Thu, 13 Feb 2020 12:18:14 -0600 Message-ID: <158161789401.48948.15080057701047052272.stgit@naples-babu.amd.com> In-Reply-To: <158161767653.48948.10578064482878399556.stgit@naples-babu.amd.com> References: <158161767653.48948.10578064482878399556.stgit@naples-babu.amd.com> User-Agent: StGit/unknown-version X-ClientProxiedBy: DM5PR07CA0085.namprd07.prod.outlook.com (2603:10b6:4:ae::14) To CY4PR12MB1574.namprd12.prod.outlook.com (2603:10b6:910:e::23) MIME-Version: 1.0 Received: from naples-babu.amd.com (165.204.78.2) by DM5PR07CA0085.namprd07.prod.outlook.com (2603:10b6:4:ae::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2729.25 via Frontend Transport; Thu, 13 Feb 2020 18:18:14 +0000 X-Originating-IP: [165.204.78.2] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 86d994ab-6d59-41a8-9ee5-08d7b0b117ee X-MS-TrafficTypeDiagnostic: CY4PR12MB1222:|CY4PR12MB1222: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:4941; X-Forefront-PRVS: 031257FE13 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4636009)(366004)(39860400002)(346002)(136003)(376002)(396003)(189003)(199004)(52116002)(66946007)(66556008)(66476007)(7696005)(26005)(5660300002)(103116003)(956004)(55016002)(4326008)(86362001)(2906002)(44832011)(15650500001)(186003)(16526019)(478600001)(316002)(81156014)(81166006)(8936002)(8676002); DIR:OUT; SFP:1101; SCL:1; SRVR:CY4PR12MB1222; H:CY4PR12MB1574.namprd12.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; Received-SPF: None (protection.outlook.com: amd.com does not designate permitted sender hosts) X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: G4bZEH4uW9TifjN0qGJxZ0WTdB4jA9ndLj0sD2ubutdRI7v+nY6bOfzIrQ3speyK85MpiRY7R8tC2KFcs0yLzDPGechR579KMnGfCq/4L5Kk/V/xg4Ei1y0M2b3ZXlVEsmiB4IneCuL/1oQ9fMYW9yiAtL2/NOIyhVJpVybcTPb+Td7vFxZEETFxZwGPyjDmS5+nHqae3pxsEVpRQfI2gLE3in8Uea2euYTDtsMiBQsARpcX32Kt2e5heXGVDcFwKx0BvT8zESV0hTs9GN+nXlJ0ihDD6Pk+BhUiCGuFheFiuhUPcz/D9ZLx7MBeoGLe1WhdQp4Tl/oi9nN3V9MWUz8tRcmkXqdmMOT9FnjsJ7Qm8G67GQ+xF0Ap3gUUHOLdYL34DxxH0K0TShdz5SCPMI5xZskbdHW7LRf4hDy+iGsIdOojzJnnzKaquky/a2hz X-MS-Exchange-AntiSpam-MessageData: xAMnkc3zHoWg8j+R5s9fjyqvimAWyZmQUfKrkBxcoNEHSKn7GsalK9mfJpkKg/BRSzMhNxJV1hXZhD3GQqa2048mmSz0wmuhA4Yjb/K29VklrHxTAfGPQIO+C9tSVaERa4/gV4oK6dllBuHsJKlr6w== X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 86d994ab-6d59-41a8-9ee5-08d7b0b117ee X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Feb 2020 18:18:15.5857 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: +E+ta8rPzafVP9XwrQsvG6Z59ZhoRBQPgRTv1yI/3Yi/IxBU7VzOzKF+CFo0FyrB X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR12MB1222 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 40.107.223.67 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" Since the topology routines have changed, update the unit tests to use the new APIs. Signed-off-by: Babu Moger --- tests/test-x86-cpuid.c | 115 ++++++++++++++++++++++++++++-------------------- 1 file changed, 68 insertions(+), 47 deletions(-) diff --git a/tests/test-x86-cpuid.c b/tests/test-x86-cpuid.c index 1942287f33..00553c1d77 100644 --- a/tests/test-x86-cpuid.c +++ b/tests/test-x86-cpuid.c @@ -28,79 +28,100 @@ static void test_topo_bits(void) { + X86CPUTopoInfo topo_info = {0}; + /* simple tests for 1 thread per core, 1 core per die, 1 die per package */ - g_assert_cmpuint(apicid_smt_width(1, 1, 1), ==, 0); - g_assert_cmpuint(apicid_core_width(1, 1, 1), ==, 0); - g_assert_cmpuint(apicid_die_width(1, 1, 1), ==, 0); + topo_info = (X86CPUTopoInfo) {0, 1, 1, 1}; + g_assert_cmpuint(apicid_smt_width(&topo_info), ==, 0); + g_assert_cmpuint(apicid_core_width(&topo_info), ==, 0); + g_assert_cmpuint(apicid_die_width(&topo_info), ==, 0); - g_assert_cmpuint(x86_apicid_from_cpu_idx(1, 1, 1, 0), ==, 0); - g_assert_cmpuint(x86_apicid_from_cpu_idx(1, 1, 1, 1), ==, 1); - g_assert_cmpuint(x86_apicid_from_cpu_idx(1, 1, 1, 2), ==, 2); - g_assert_cmpuint(x86_apicid_from_cpu_idx(1, 1, 1, 3), ==, 3); + g_assert_cmpuint(x86_apicid_from_cpu_idx(&topo_info, 0), ==, 0); + g_assert_cmpuint(x86_apicid_from_cpu_idx(&topo_info, 1), ==, 1); + g_assert_cmpuint(x86_apicid_from_cpu_idx(&topo_info, 2), ==, 2); + g_assert_cmpuint(x86_apicid_from_cpu_idx(&topo_info, 3), ==, 3); /* Test field width calculation for multiple values */ - g_assert_cmpuint(apicid_smt_width(1, 1, 2), ==, 1); - g_assert_cmpuint(apicid_smt_width(1, 1, 3), ==, 2); - g_assert_cmpuint(apicid_smt_width(1, 1, 4), ==, 2); - - g_assert_cmpuint(apicid_smt_width(1, 1, 14), ==, 4); - g_assert_cmpuint(apicid_smt_width(1, 1, 15), ==, 4); - g_assert_cmpuint(apicid_smt_width(1, 1, 16), ==, 4); - g_assert_cmpuint(apicid_smt_width(1, 1, 17), ==, 5); - - - g_assert_cmpuint(apicid_core_width(1, 30, 2), ==, 5); - g_assert_cmpuint(apicid_core_width(1, 31, 2), ==, 5); - g_assert_cmpuint(apicid_core_width(1, 32, 2), ==, 5); - g_assert_cmpuint(apicid_core_width(1, 33, 2), ==, 6); - - g_assert_cmpuint(apicid_die_width(1, 30, 2), ==, 0); - g_assert_cmpuint(apicid_die_width(2, 30, 2), ==, 1); - g_assert_cmpuint(apicid_die_width(3, 30, 2), ==, 2); - g_assert_cmpuint(apicid_die_width(4, 30, 2), ==, 2); + topo_info = (X86CPUTopoInfo) {0, 1, 1, 2}; + g_assert_cmpuint(apicid_smt_width(&topo_info), ==, 1); + topo_info = (X86CPUTopoInfo) {0, 1, 1, 3}; + g_assert_cmpuint(apicid_smt_width(&topo_info), ==, 2); + topo_info = (X86CPUTopoInfo) {0, 1, 1, 4}; + g_assert_cmpuint(apicid_smt_width(&topo_info), ==, 2); + + topo_info = (X86CPUTopoInfo) {0, 1, 1, 14}; + g_assert_cmpuint(apicid_smt_width(&topo_info), ==, 4); + topo_info = (X86CPUTopoInfo) {0, 1, 1, 15}; + g_assert_cmpuint(apicid_smt_width(&topo_info), ==, 4); + topo_info = (X86CPUTopoInfo) {0, 1, 1, 16}; + g_assert_cmpuint(apicid_smt_width(&topo_info), ==, 4); + topo_info = (X86CPUTopoInfo) {0, 1, 1, 17}; + g_assert_cmpuint(apicid_smt_width(&topo_info), ==, 5); + + + topo_info = (X86CPUTopoInfo) {0, 1, 30, 2}; + g_assert_cmpuint(apicid_core_width(&topo_info), ==, 5); + topo_info = (X86CPUTopoInfo) {0, 1, 31, 2}; + g_assert_cmpuint(apicid_core_width(&topo_info), ==, 5); + topo_info = (X86CPUTopoInfo) {0, 1, 32, 2}; + g_assert_cmpuint(apicid_core_width(&topo_info), ==, 5); + topo_info = (X86CPUTopoInfo) {0, 1, 33, 2}; + g_assert_cmpuint(apicid_core_width(&topo_info), ==, 6); + + topo_info = (X86CPUTopoInfo) {0, 1, 30, 2}; + g_assert_cmpuint(apicid_die_width(&topo_info), ==, 0); + topo_info = (X86CPUTopoInfo) {0, 2, 30, 2}; + g_assert_cmpuint(apicid_die_width(&topo_info), ==, 1); + topo_info = (X86CPUTopoInfo) {0, 3, 30, 2}; + g_assert_cmpuint(apicid_die_width(&topo_info), ==, 2); + topo_info = (X86CPUTopoInfo) {0, 4, 30, 2}; + g_assert_cmpuint(apicid_die_width(&topo_info), ==, 2); /* build a weird topology and see if IDs are calculated correctly */ /* This will use 2 bits for thread ID and 3 bits for core ID */ - g_assert_cmpuint(apicid_smt_width(1, 6, 3), ==, 2); - g_assert_cmpuint(apicid_core_offset(1, 6, 3), ==, 2); - g_assert_cmpuint(apicid_die_offset(1, 6, 3), ==, 5); - g_assert_cmpuint(apicid_pkg_offset(1, 6, 3), ==, 5); - - g_assert_cmpuint(x86_apicid_from_cpu_idx(1, 6, 3, 0), ==, 0); - g_assert_cmpuint(x86_apicid_from_cpu_idx(1, 6, 3, 1), ==, 1); - g_assert_cmpuint(x86_apicid_from_cpu_idx(1, 6, 3, 2), ==, 2); - - g_assert_cmpuint(x86_apicid_from_cpu_idx(1, 6, 3, 1 * 3 + 0), ==, + topo_info = (X86CPUTopoInfo) {0, 1, 6, 3}; + g_assert_cmpuint(apicid_smt_width(&topo_info), ==, 2); + g_assert_cmpuint(apicid_core_offset(&topo_info), ==, 2); + g_assert_cmpuint(apicid_die_offset(&topo_info), ==, 5); + g_assert_cmpuint(apicid_pkg_offset(&topo_info), ==, 5); + + topo_info = (X86CPUTopoInfo) {0, 1, 6, 3}; + g_assert_cmpuint(x86_apicid_from_cpu_idx(&topo_info, 0), ==, 0); + g_assert_cmpuint(x86_apicid_from_cpu_idx(&topo_info, 1), ==, 1); + g_assert_cmpuint(x86_apicid_from_cpu_idx(&topo_info, 2), ==, 2); + + topo_info = (X86CPUTopoInfo) {0, 1, 6, 3}; + g_assert_cmpuint(x86_apicid_from_cpu_idx(&topo_info, 1 * 3 + 0), ==, (1 << 2) | 0); - g_assert_cmpuint(x86_apicid_from_cpu_idx(1, 6, 3, 1 * 3 + 1), ==, + g_assert_cmpuint(x86_apicid_from_cpu_idx(&topo_info, 1 * 3 + 1), ==, (1 << 2) | 1); - g_assert_cmpuint(x86_apicid_from_cpu_idx(1, 6, 3, 1 * 3 + 2), ==, + g_assert_cmpuint(x86_apicid_from_cpu_idx(&topo_info, 1 * 3 + 2), ==, (1 << 2) | 2); - g_assert_cmpuint(x86_apicid_from_cpu_idx(1, 6, 3, 2 * 3 + 0), ==, + g_assert_cmpuint(x86_apicid_from_cpu_idx(&topo_info, 2 * 3 + 0), ==, (2 << 2) | 0); - g_assert_cmpuint(x86_apicid_from_cpu_idx(1, 6, 3, 2 * 3 + 1), ==, + g_assert_cmpuint(x86_apicid_from_cpu_idx(&topo_info, 2 * 3 + 1), ==, (2 << 2) | 1); - g_assert_cmpuint(x86_apicid_from_cpu_idx(1, 6, 3, 2 * 3 + 2), ==, + g_assert_cmpuint(x86_apicid_from_cpu_idx(&topo_info, 2 * 3 + 2), ==, (2 << 2) | 2); - g_assert_cmpuint(x86_apicid_from_cpu_idx(1, 6, 3, 5 * 3 + 0), ==, + g_assert_cmpuint(x86_apicid_from_cpu_idx(&topo_info, 5 * 3 + 0), ==, (5 << 2) | 0); - g_assert_cmpuint(x86_apicid_from_cpu_idx(1, 6, 3, 5 * 3 + 1), ==, + g_assert_cmpuint(x86_apicid_from_cpu_idx(&topo_info, 5 * 3 + 1), ==, (5 << 2) | 1); - g_assert_cmpuint(x86_apicid_from_cpu_idx(1, 6, 3, 5 * 3 + 2), ==, + g_assert_cmpuint(x86_apicid_from_cpu_idx(&topo_info, 5 * 3 + 2), ==, (5 << 2) | 2); - g_assert_cmpuint(x86_apicid_from_cpu_idx(1, 6, 3, + g_assert_cmpuint(x86_apicid_from_cpu_idx(&topo_info, 1 * 6 * 3 + 0 * 3 + 0), ==, (1 << 5)); - g_assert_cmpuint(x86_apicid_from_cpu_idx(1, 6, 3, + g_assert_cmpuint(x86_apicid_from_cpu_idx(&topo_info, 1 * 6 * 3 + 1 * 3 + 1), ==, (1 << 5) | (1 << 2) | 1); - g_assert_cmpuint(x86_apicid_from_cpu_idx(1, 6, 3, + g_assert_cmpuint(x86_apicid_from_cpu_idx(&topo_info, 3 * 6 * 3 + 5 * 3 + 2), ==, (3 << 5) | (5 << 2) | 2); }