From patchwork Fri Jan 26 21:39:41 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Moger, Babu" X-Patchwork-Id: 10187099 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id CD82D603ED for ; Fri, 26 Jan 2018 21:40:15 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id BF496293D3 for ; Fri, 26 Jan 2018 21:40:15 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id B3F6A2A84A; Fri, 26 Jan 2018 21:40:15 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 20A822A843 for ; Fri, 26 Jan 2018 21:40:15 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752328AbeAZVkO (ORCPT ); Fri, 26 Jan 2018 16:40:14 -0500 Received: from mail-by2nam01on0070.outbound.protection.outlook.com ([104.47.34.70]:19812 "EHLO NAM01-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752017AbeAZVkC (ORCPT ); Fri, 26 Jan 2018 16:40:02 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amdcloud.onmicrosoft.com; s=selector1-amd-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=mN+IsOw9egYoM6JC6uO1a6+mweophr/E9Ne5vWaIN8Q=; b=wSIYxt5XXtTiZO3wTNQSwbv/j7QlGVPnDz5JkoXOjGQhgmX2ArsU+DitkAvjqoR4N5VUgk/CFrgGv0mQYObP0jPmx/KNGTmbRl7GcdQXdK0M/wphuy4DmwitubEb4k7pWt/vrOCWcNCLylghR01VI9q4IRiPSjKdSP9H+O+rt5o= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Babu.Moger@amd.com; Received: from linux-pyp0.amd.com (165.204.77.1) by DM5PR12MB1769.namprd12.prod.outlook.com (10.175.89.150) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.428.17; Fri, 26 Jan 2018 21:39:59 +0000 From: Babu Moger To: pbonzini@redhat.com, rth@twiddle.net, ehabkost@redhat.com, pixo@polepetko.eu Cc: mtosatti@redhat.com, babu.moger@amd.com, qemu-devel@nongnu.org, kvm@vger.kernel.org Subject: [PATCH 2/5] target/i386: Populate AMD Processor Cache Information Date: Fri, 26 Jan 2018 16:39:41 -0500 Message-Id: <20180126213944.7594-3-babu.moger@amd.com> X-Mailer: git-send-email 2.16.0 In-Reply-To: <20180126213944.7594-1-babu.moger@amd.com> References: <20180126213944.7594-1-babu.moger@amd.com> MIME-Version: 1.0 X-Originating-IP: [165.204.77.1] X-ClientProxiedBy: CY4PR04CA0064.namprd04.prod.outlook.com (10.171.243.157) To DM5PR12MB1769.namprd12.prod.outlook.com (10.175.89.150) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: a6cc8039-01e2-4699-ce44-08d5650559ce X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(4534165)(4627221)(201703031133081)(201702281549075)(48565401081)(5600026)(4604075)(2017052603307)(7153060)(7193020); SRVR:DM5PR12MB1769; X-Microsoft-Exchange-Diagnostics: 1; DM5PR12MB1769; 3:Bpap+tINcoazocmFAGIrH7G0ANrXO9JtXMedZ3eYp2DFmarKAByJkr/Te+WlFO+AVPpSjgQbY0el5OHchKVHznsmjsCUsaiwjj0J5ldf+uS1ApJrNpKlSgR6zp2EfoqClG+taM9Ogu6e8wrbYzU0qayOdR+Y38MkqNbLa1ZrIm1ar9qkf05Wy4+cyfNJssp4zZQnStw/Vz+xeQyY2ffaAXgtd+WcVvshaJEuiK8MU97SSnPCrtH2nL1Ca8qKrpQY; 25:ctUQbYxHG05UhjEKYc8CMw4gLP03ExlKUiGKyU4343cw7zQrfdtej5G4J8pZQnVAaDhAoxaQZg06lro9PnIXICFDiNTeDCsK37j8u0CVFxHlpbonKAOGAIgq1VQ4JshcThz2SCFRpoIuaT2a6P4qM42n7UYuJ6XlzTsa/80bJlgKHvcCzFEIvrgGU8tajwrT2reyz0omlMgwQ76CsC6upviiU2w6QLAWpxaQ/LSIaxtf/tiOR07xqM4u0x/jlfKLTjwAIRnud0dDA0wYfO1Ntlx3yU4tjeCV/62PHjtDBU4UpYHLNN4LXzWMarrGlZdV+BNDcB0fOuXy/MdKDKJZ2w==; 31:GPTQP8hSaM4I2JcPo03l4Eq94Sc/3fXZyquZBlO5JkdrFcF9D4SI0DOOmt0wzkELEG3HXTD4jUT1E2B3tyTSsKERlrRE+PLkY/yY7sWAwnJsrJ+Lbz04oiw357IKKGcTkms35jr7X/O+hvsmal+idzjIPP2+q6sQADXv+FUNzKwXrkAU438dM3p4Sfzhp4p2AtiItvczjMlckK3KuKDNy0TR71Rb7HancxEhqqXhML4= X-MS-TrafficTypeDiagnostic: DM5PR12MB1769: X-Microsoft-Exchange-Diagnostics: 1; DM5PR12MB1769; 20:8IQC9f0F5ujlysrImAlMDILD7y2fxvJMyJI2KdbAjvn4TU/5TN6+eE/BSLk6gCXtvq3PjvfLrbGNp46YRpVjOZFu2Myz6p+q5CaCAM1BZoGCiOnZKfLN+bgvZCxssLnc6+nRlekntNi2HrsFtP7X+2RS3OYEvaVPUa5T5K8MkqcTroegq/fjYSw4uvgbTWRCgCrjeVtKA5lvNAq10B754VNlj5wHaVNsXK6kqVMPkXk/rmUBSqOHyn17vvwyoqpj2gILMeMy4WD77CyMRrgrZljXyW02L4i/mryAin6j+CDFTdjOVSrbYaMmySyVCeQVjsCOTy57+qcu8fy+nJfK8OOp7d1SvGmHy3X25WTL8pJoM6qu4BDgVJlOsChd88lVwrgbescx5dbZqH2/OTFn+anRDlyZS9cKsgQKaKSvjLcNjUsVX5MQetBX/ek1vs7mwK1zeynR9Fv6hfKMsLsO2nNCbc58g6CkrOb4+68jB6LOA5XyeFObtKUlEjtreTxN; 4:vEQ9gUVZ0Ao/BaEjK2Oih2SZc3tBEJlOdATbIsnoRbWr/+56L+wvT2HzCmN/cMCqR5I5HxmiR2ibnc1/8H2JbFYh2D4AM+QQjVrPqvmtHBySrV9+H1AHFEpXKrTELUmNVxxjNJgRovEHJtxj3Vr57qY0jsBRURig3L1/JETMmMxgUej172ZOhN9oh4O1uTEZYHI+GGdEUForjJhkeD8bFgoHhbdXKByNDaNnPAgmCZ74xbShBh53hOhFcyKeabw0O6VgAScc6W0smvxptcMySRF760lz5s5yq5mfyIHK4qSiDSVcdEaX/2OcqOqgQomp X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(767451399110); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040501)(2401047)(5005006)(8121501046)(3231077)(2400081)(944501161)(10201501046)(93006095)(93001095)(3002001)(6055026)(6041288)(20161123564045)(20161123558120)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(20161123562045)(6072148)(201708071742011); SRVR:DM5PR12MB1769; BCL:0; PCL:0; RULEID:; SRVR:DM5PR12MB1769; X-Forefront-PRVS: 05641FD966 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(39860400002)(39380400002)(346002)(396003)(376002)(366004)(189003)(199004)(5660300001)(106356001)(51416003)(7696005)(52116002)(53416004)(8936002)(68736007)(386003)(105586002)(8676002)(81156014)(81166006)(50226002)(76176011)(53936002)(6666003)(2950100002)(6486002)(4326008)(16526019)(72206003)(36756003)(86362001)(1076002)(186003)(3846002)(305945005)(2906002)(66066001)(6116002)(47776003)(50466002)(48376002)(16586007)(97736004)(7736002)(478600001)(26005)(25786009)(316002); DIR:OUT; SFP:1101; SCL:1; SRVR:DM5PR12MB1769; H:linux-pyp0.amd.com; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: None (protection.outlook.com: amd.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DM5PR12MB1769; 23:3Xc5GctjQb8SJck3oZjojPolV+n56yGpjZJNkqHFf?= =?us-ascii?Q?dXfXKaY0L2/i93DdVuRCAIgKYUd2iYj4RoBtTzosuJXp3P90vkE0BO2YwQ3n?= =?us-ascii?Q?yBGEvshQ6rEIm9+01Pi/0wirRKJUOHRHzbGxfv6TztPJk/SbqyF6Xq4HoWlM?= =?us-ascii?Q?/t17gOKogECxZ8B5xuc5idI3pC7+Z0pJhgknfy8GE7EzNtAExeoAqeay1Xu/?= =?us-ascii?Q?+tjNKRGHplAHls3VtuEetSiB2Mys7HoYWxG2kB7CB8lb0ewbfQRPuKDszRDy?= =?us-ascii?Q?Xh7gsYQ1m9P339cyEELT87y1hm+jgPQvh25DtWcprBUAcKUOqE8bMsqvL19H?= =?us-ascii?Q?SL928uaoPw2bFvmoX1ayUZ2Ax24gZm51KOmSbcHunIkjXsf8Y97g7wTkKPs7?= =?us-ascii?Q?68dtN/fsGT/4EIyNXUcQeIIGs6BWNS+OL2MaFkmFcB2G1uKVUzrXn5m4iRV6?= =?us-ascii?Q?bUqb3mke9Mq8smxY5QCIFdIXg8OkVjB3zbOWNtbmBlZn4pIMWSAgoQBfjA+8?= =?us-ascii?Q?4DVUSM/awSwQaSsJwrbVjx95Lz6FZVnfa2uLRRgWCDftZOm7E5teRfA+ka9+?= =?us-ascii?Q?kcPuQZ7jiFFMdtq8IkbgzIvEc72QtR2y7+3u1hp8N7Rcjy9R6lM+j/W+IuLg?= =?us-ascii?Q?0/TbuxgTMowyTrNMpSJeiw/Ajv5BZ1w2U1+XgMguq5qD7eO9FSgH0vwlDJNp?= =?us-ascii?Q?VC4gX88ISvSYnY8byWHcHeZ9HVTow3kux21iS+bv6SLRtZb/Z2KdpD0W/1h6?= =?us-ascii?Q?Q+vW1fdEMwZTEHFk7ptOmz0BK5PlIFpHFnQ32wcPueCU3NRl7pvX4flSiq9J?= =?us-ascii?Q?bHLlrqXzdy537SFfDYNUc5BllJSI9awAaKo+B1tiYIUPVvPAk7R63N//x/jC?= =?us-ascii?Q?vriwjdHSzItX1i0Bp8ztbMryI4jmT6dU6qAS/zyea/dOIFpvX+5XRyexLlHq?= =?us-ascii?Q?Hwo6jck+oZmvVPWrBdl+0en2V9lzlK7ZJmAyH8dhHSyaxyCGaIdJjXcM5/0O?= =?us-ascii?Q?3TdFgTTeTByM4DLDEraWrWKUx8E46mgpsiGPCShF8u7nSPnmoeQzASAe9UDp?= =?us-ascii?Q?kq3JKJ72b4o/skXi5iXktF3jEywBNV9pvMZusTvt0B2zcNnMi4PLFyz3Eb9G?= =?us-ascii?Q?R8Jkw0rI0k=3D?= X-Microsoft-Exchange-Diagnostics: 1; DM5PR12MB1769; 6:12Vo9qDCQrj41rEriQOUQaBsA9bmZxVk6HPYE0yjN5p6VB06DVBZOZ/6edg1i1qlX8A/DbDwKimQ/QhlBSUzQx86LR4aRtXYi4RsSiEF6iKH1OffO5ZpRyrmSDfH5gGq4EDzVlYBMLYKPOW6ZisR3LBJ2feRR0iBRfekGq0WOgGQ6rNWSqgDeFGGijkIWOeXxfrQwNihN2QZtVSvaAROk9Y/5/1grGGDQvWmWY+nvrWg1Kn7bx1wKzlphfsMd5qkSzfbWxyRsPmGG8NnuUUnouY5Ii0CXN/IfomvUgJra9KZqJIZzJiZ+EXlDcnMucf81oiZ8C96NX64DMV+qtvCDhcVsnbdecFG1OBISmSnOiI=; 5:1h/nF4LltIFn+t1E59CUUITPfstz5amQTAPkB1S89zlERoubzMc2pnyMktWs9PYYRaeo72SqbRNfpx3RTu27G9+fu5FD+YLyd8dGkQZaYVFq3wl6YExfi5hkKDQx2a7XnOajliX8pOjG7Gjn6jqBkerJi0oNLwPk0XuOwFlsoNQ=; 24:snVAuFMjpvTNAdgggMCtyvHIOyEP1+CoGqXDTbyFZrQAXQzg5xJunyIQ1fVolCjXpkcsdIX+jWLpyERBqhhzAkkeDwXldMKcd4DlDco91f0=; 7:3L7en9M9mAImJ8GR/ELLSDBa7iFaN44ouPSSmJdLzJQeO1kPiV9hn1FrDLJ9zJRRAPZc/XIkRSAw38EN5kxBjnlsEtiHoytxvMvQVaQ87wErxL/d2ZPPd3hM7Zi5PIIL0DkLPULufaPkFpFxz1I11Ze+QrLpouGvIaFK9vqbO3updNpx+6sLQctT82KrxEo3C0f6vMN3r262M93GSqjx5ON5bPzf+BYjd0ZDYx1I3MQOFLFdzBJIU+oeJmhcvlQO SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; DM5PR12MB1769; 20:uk0eEUM1iBlAlzvaa212H+RolIClZYWPEXaw4WdVGFrF8vK23SeG2vyXNmuzP+jolFic/+tiXge97abLpf9nhAblgS897SQRckI5SOnXrLclQL/RI+rhJ4ConII7/U4anmMPYyqLA72fIDL6A91hY+VrvfsdVnUhcx+NiPOskHk8BEJALm8lqYmoSnE/9ifRfQs4tezPPclA7cV2cgbbyOTwVVtjBT1BNI22IjpK0qfFEfLSd4wXLZ9AWzgt7Rxc X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Jan 2018 21:39:59.2197 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: a6cc8039-01e2-4699-ce44-08d5650559ce X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR12MB1769 Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Stanislav Lanci Adds information about cache size and topology from cpuid 0x8000001D leaf for different cache types on AMD processors. Signed-off-by: Stanislav Lanci Signed-off-by: Babu Moger --- target/i386/cpu.c | 76 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ target/i386/kvm.c | 29 ++++++++++++++++++--- 2 files changed, 102 insertions(+), 3 deletions(-) diff --git a/target/i386/cpu.c b/target/i386/cpu.c index cb055f5940..31ee746dac 100644 --- a/target/i386/cpu.c +++ b/target/i386/cpu.c @@ -117,6 +117,7 @@ #define L1I_LINE_SIZE 64 #define L1I_ASSOCIATIVITY 8 #define L1I_SETS 64 +#define L1I_SETS_AMD 256 #define L1I_PARTITIONS 1 /* Size = LINE_SIZE*ASSOCIATIVITY*SETS*PARTITIONS = 32KiB */ #define L1I_DESCRIPTOR CPUID_2_L1I_32KB_8WAY_64B @@ -128,7 +129,9 @@ /* Level 2 unified cache: */ #define L2_LINE_SIZE 64 #define L2_ASSOCIATIVITY 16 +#define L2_ASSOCIATIVITY_AMD 8 #define L2_SETS 4096 +#define L2_SETS_AMD 1024 #define L2_PARTITIONS 1 /* Size = LINE_SIZE*ASSOCIATIVITY*SETS*PARTITIONS = 4MiB */ /*FIXME: CPUID leaf 2 descriptor is inconsistent with CPUID leaf 4 */ @@ -145,6 +148,7 @@ #define L3_N_LINE_SIZE 64 #define L3_N_ASSOCIATIVITY 16 #define L3_N_SETS 16384 +#define L3_N_SETS_AMD 8192 #define L3_N_PARTITIONS 1 #define L3_N_DESCRIPTOR CPUID_2_L3_16MB_16WAY_64B #define L3_N_LINES_PER_TAG 1 @@ -3143,6 +3147,78 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index, uint32_t count, *edx = 0; } break; + case 0x8000001D: /* AMD TOPOEXT cache info */ + if (cpu->cache_info_passthrough) { + host_cpuid(index, count, eax, ebx, ecx, edx); + break; + } else if (env->features[FEAT_8000_0001_ECX] & CPUID_EXT3_TOPOEXT) { + *eax = 0; + switch (count) { + case 0: /* L1 dcache info */ + *eax |= CPUID_4_TYPE_DCACHE | \ + CPUID_4_LEVEL(1) | \ + CPUID_4_SELF_INIT_LEVEL | \ + ((cs->nr_threads - 1) << 14); + *ebx = (L1D_LINE_SIZE - 1) | \ + ((L1D_PARTITIONS - 1) << 12) | \ + ((L1D_ASSOCIATIVITY - 1) << 22); + *ecx = L1D_SETS - 1; + *edx = 0; + break; + case 1: /* L1 icache info */ + *eax |= CPUID_4_TYPE_ICACHE | \ + CPUID_4_LEVEL(1) | \ + CPUID_4_SELF_INIT_LEVEL | \ + ((cs->nr_threads - 1) << 14); + *ebx = (L1I_LINE_SIZE - 1) | \ + ((L1I_PARTITIONS - 1) << 12) | \ + ((L1I_ASSOCIATIVITY_AMD - 1) << 22); + *ecx = L1I_SETS_AMD - 1; + *edx = 0; + break; + case 2: /* L2 cache info */ + *eax |= CPUID_4_TYPE_UNIFIED | \ + CPUID_4_LEVEL(2) | \ + CPUID_4_SELF_INIT_LEVEL | \ + ((cs->nr_threads - 1) << 14); + *ebx = (L2_LINE_SIZE - 1) | \ + ((L2_PARTITIONS - 1) << 12) | \ + ((L2_ASSOCIATIVITY_AMD - 1) << 22); + *ecx = L2_SETS_AMD - 1; + *edx = CPUID_4_INCLUSIVE; + break; + case 3: /* L3 cache info */ + if (!cpu->enable_l3_cache) { + *eax = 0; + *ebx = 0; + *ecx = 0; + *edx = 0; + break; + } + *eax |= CPUID_4_TYPE_UNIFIED | \ + CPUID_4_LEVEL(3) | \ + CPUID_4_SELF_INIT_LEVEL | \ + ((cs->nr_cores * cs->nr_threads - 1) << 14); + *ebx = (L3_N_LINE_SIZE - 1) | \ + ((L3_N_PARTITIONS - 1) << 12) | \ + ((L3_N_ASSOCIATIVITY - 1) << 22); + *ecx = L3_N_SETS_AMD - 1; + *edx = CPUID_4_NO_INVD_SHARING; + break; + default: /* end of info */ + *eax = 0; + *ebx = 0; + *ecx = 0; + *edx = 0; + break; + } + } else { + *eax = 0; + *ebx = 0; + *ecx = 0; + *edx = 0; + } + break; case 0xC0000000: *eax = env->cpuid_xlevel2; *ebx = 0; diff --git a/target/i386/kvm.c b/target/i386/kvm.c index 6f69e2fcfd..8022db7631 100644 --- a/target/i386/kvm.c +++ b/target/i386/kvm.c @@ -898,9 +898,32 @@ int kvm_arch_init_vcpu(CPUState *cs) } c = &cpuid_data.entries[cpuid_i++]; - c->function = i; - c->flags = 0; - cpu_x86_cpuid(env, i, 0, &c->eax, &c->ebx, &c->ecx, &c->edx); + switch (i) { + case 0x8000001d: + /* Query for all AMD cache information leaves */ + for (j = 0; ; j++) { + c->function = i; + c->flags = KVM_CPUID_FLAG_SIGNIFCANT_INDEX; + c->index = j; + cpu_x86_cpuid(env, i, j, &c->eax, &c->ebx, &c->ecx, &c->edx); + + if (c->eax == 0) { + break; + } + if (cpuid_i == KVM_MAX_CPUID_ENTRIES) { + fprintf(stderr, "cpuid_data is full, no space for " + "cpuid(eax:0x%x,ecx:0x%x)\n", i, j); + abort(); + } + c = &cpuid_data.entries[cpuid_i++]; + } + break; + default: + c->function = i; + c->flags = 0; + cpu_x86_cpuid(env, i, 0, &c->eax, &c->ebx, &c->ecx, &c->edx); + break; + } } /* Call Centaur's CPUID instructions they are supported. */