From nobody Thu Oct 30 15:22:15 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1525985190405804.6807276948502; Thu, 10 May 2018 13:46:30 -0700 (PDT) Received: from localhost ([::1]:35569 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fGsSL-0004fZ-HE for importer@patchew.org; Thu, 10 May 2018 16:46:29 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:57145) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fGsOB-0005PW-7k for qemu-devel@nongnu.org; Thu, 10 May 2018 16:42:15 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fGsO7-0004Wq-S8 for qemu-devel@nongnu.org; Thu, 10 May 2018 16:42:11 -0400 Received: from mail-sn1nam01on0041.outbound.protection.outlook.com ([104.47.32.41]:36736 helo=NAM01-SN1-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 1fGsO7-0004Vg-Nh for qemu-devel@nongnu.org; Thu, 10 May 2018 16:42:07 -0400 Received: from bmoger-ubuntu.amd.com (165.204.78.1) by SN1PR12MB2478.namprd12.prod.outlook.com (2603:10b6:802:29::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.755.16; Thu, 10 May 2018 20:42:04 +0000 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=LOrf2ZTvW/oITKTfBoWLL+8IurByohb658T4BdCEPPI=; b=HsA5DvRQRkK5UrzVOKiyAtpwRH8Ep46NvD206n0mGX68OcZGIKnChVaJ8e0W2+zzDJDABd0XeNGChnqX6sOhhJtTv4tM/UEaNxUVPZ87doUH760ZvcA94PpzawrSSV4J5LgDmEN+vxJvJVvRkDanACLnnZHhFaWm4fMT8niTcm0= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Babu.Moger@amd.com; From: Babu Moger To: mst@redhat.com, marcel.apfelbaum@gmail.com, pbonzini@redhat.com, rth@twiddle.net, ehabkost@redhat.com, mtosatti@redhat.com Date: Thu, 10 May 2018 15:41:43 -0500 Message-Id: <20180510204148.11687-4-babu.moger@amd.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180510204148.11687-1-babu.moger@amd.com> References: <20180510204148.11687-1-babu.moger@amd.com> MIME-Version: 1.0 X-Originating-IP: [165.204.78.1] X-ClientProxiedBy: SN4PR0801CA0024.namprd08.prod.outlook.com (2603:10b6:803:29::34) To SN1PR12MB2478.namprd12.prod.outlook.com (2603:10b6:802:29::17) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(4534165)(4627221)(201703031133081)(201702281549075)(5600026)(48565401081)(2017052603328)(7153060)(7193020); SRVR:SN1PR12MB2478; X-Microsoft-Exchange-Diagnostics: 1; SN1PR12MB2478; 3:+kObvYOyQRMmGzSi++P0CCEaMhEUhvP1/Qw2eLahwwBhny9K/X50QBj7kFGPbXC1HDMzrxKbevlFHJBIFZHILLWLK+35RB+AtEalVMH1mrzV24WFr4CJiAiZkTx5f1B28I0ootIk1jWWx/elJgXjOz8KS95Wl2UT2D4APNSuDjopdjLdApaQqOa1dE9e704CZuDniXj5AM37E7foA86CFz2qkRCGypzGHJHRe09hqO8+ky7FHm5z6eUbNbL9hckx; 25:HZXz8tS+7B0bRi3EYQXi0AzZ+kMLv42oGQTp6KZQWjdExDDruCxpHIeTwoTT5fN/0DSDdnPcpzzaJPjOKzobYxbBxub8mSnWlT7mwBthlvDSxibhbeLRWtqlRQpskzTMckrylHUWr16n5KjX+mfieKVsAPzX4Z+cXSLIuE/UTVRTyotvd+DlQxGPzYAFjxQdkjuyYgHtZJTtIyAsYHoHehaj1IhQGUippTxDn9vUjWFrLR8uNgyIIPsqxRMSx6NhB/7HfwOWalQ326fcfTvCKlFg4sO8nicMERDI2bTw3A+UEWpDmQ5N8L47R1GfotYgox4RqhtdolHVWKCN/Lz4/A==; 31:/zkN1Cw7JGywUTcF4TH2D7x4aCDpqsW+rrn6IjGh+PnCBadRsifKqiNgrrJQBH+bcxeBtLtvC5RTu/6AVqLa6VuS2DhMYUx0NibrNVKZEZTszBks+2me2tUPOvZBwGZ/Lt7HL38fe957s2bJjXr4CcOsWc6xo0K1+Ltzzmw4N65XUDOrsUsnDbZs3Qz4qNbyGsRjWbD5T83+dv6XNoJfJKR+YdlVos10OXVkkr+yZhg= X-MS-TrafficTypeDiagnostic: SN1PR12MB2478: X-Microsoft-Exchange-Diagnostics: 1; SN1PR12MB2478; 20:uIuOgXh/mHXpRLxnlSb9Cs0FnTzb0RDnt8LdaiUziGNG8oh+yJTB1HIJejiLF5QpC2VIu9nxwZg2mt2DqRWTrSNSHaqrKh/fa083LO9rcEepqbIMmmDpKuQeSezEocY7oFL5T+D8i2snNDBUSF9MCAMjiQtMeBtv5S+FIZmq+N6nB9OrBKOy0O1OrHQQg7CaPiLRsPJBltdyaq/uJ2n6vPoMdyw9t95XY6Fj4yx6YUwCOzm5MdzIWjPW12cHhUEyZnvHQE+ir1WnuAFDA1UcsVA8wTKdmrb+j3kvvy9uebpH4XymiueT/TJwkRk9XYwtjA1yydwwviLF5tD8JHG/r9jI4TUzD/X96KvdlXug353vCAxDzMltle7BB4fN5yzs2O+aCHGiXv+HLmw+k6+awZw6WLOS4XvScElKKP7POxl23YtP7KRvUY9v/lO+uqB9EEDX4xC1RGe53B4OSnW6omVnGfDxrT6ZVnRwIyDuoGtJTCQSd4diSBLT2sWeaO0A; 4:hImsihxln8i33RrQtpDQnUtsvbm66h3AL6hwLYExKqWCmR051UufM8wdsl5NprOvg90syben9BctWxnqh+jwL10sckp76qyzrVBGsXOIQnGt1dYaKG0zsZNdSf5rne1ZZ8t1p4tMGeoP4h4vcNPxwRhCEQO0qeN0XfaIXDF1HNIMr31sPncfDQ6Z/NdfkZx6MgMJYGoVbB4tYyf2eylJPoW9f1MXL5b4lNM7B9W0uts7wIhoSsFaMjWEJYT5BjuiqyczeHuEjm7WzY6FqhoIvkIpXeOdM5l4LzZ1p039LCQjV+L7c1FvuvgqEZhwa0Ez X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(767451399110); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(10201501046)(3002001)(93006095)(93001095)(3231254)(944501410)(52105095)(6055026)(149027)(150027)(6041310)(20161123558120)(20161123562045)(20161123560045)(20161123564045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(6072148)(201708071742011); SRVR:SN1PR12MB2478; BCL:0; PCL:0; RULEID:; SRVR:SN1PR12MB2478; X-Forefront-PRVS: 066898046A X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(346002)(366004)(376002)(396003)(39860400002)(39380400002)(189003)(199004)(476003)(446003)(48376002)(50466002)(50226002)(2616005)(53936002)(76176011)(97736004)(4326008)(11346002)(16526019)(8676002)(86362001)(186003)(7736002)(956004)(44832011)(305945005)(6486002)(81156014)(2906002)(8936002)(52116002)(7696005)(486006)(81166006)(386003)(3846002)(26005)(25786009)(68736007)(51416003)(45080400002)(106356001)(5660300001)(316002)(36756003)(16586007)(105586002)(53416004)(7416002)(6666003)(6116002)(39060400002)(72206003)(66066001)(478600001)(47776003)(1076002); DIR:OUT; SFP:1101; SCL:1; SRVR:SN1PR12MB2478; H:bmoger-ubuntu.amd.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: None (protection.outlook.com: amd.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; SN1PR12MB2478; 23:9e0PTD9xc6HFh8a4ZN+H00EVFM7aCTZhvNDwvtwO1?= =?us-ascii?Q?Xtvd2rzKa1mjrVOzgh9l3fTCo6ohaHe1XorPdZfh+K0ELaEQPxnTBK97Y9+h?= =?us-ascii?Q?YSHR508lVg44iBhbA78j+Cse9LHtUWML+QBDXZ3prCLnwjOdHMtoPCk7Pcet?= =?us-ascii?Q?3KZW5Ay7k17qC8cTKsTXJprY/LT9/DByKbcPVotbD2Zd+iRtduoyLe41fqKW?= =?us-ascii?Q?yxrRnl8MuqFHLEBoJjMgkN23HksPBa8tyg5+ooC2nPf+kQWx2elIfMDz9e6n?= =?us-ascii?Q?2mdPjvuDh1pK7vD+FpfJkbD6bUPRGHGvYZiCiszRY+FXGdzJj4wXVc86Ie/6?= =?us-ascii?Q?P2YXdr9aFwZxZSMqnkB+G+bBfflte+zMM5hHTtkAgpd9PTq8c0K7R+Zu5M5Z?= =?us-ascii?Q?HQAge6qUPi3p27+w0dqjLe9ByARvljmoSr7GFcMahK1pS8OuqqR8TKfq+PEl?= =?us-ascii?Q?EU++qZPOq5f+8jS/VLHh707bKzsHf8KMITcR482Hc/siYvpKWU1aTbx+Fv/C?= =?us-ascii?Q?pvjwun5T0Ilqs8DSKwPqgd35MQxHsN01rQzh2sp8glOX/bi2z/Q1KcB3jZd/?= =?us-ascii?Q?lX2zLpCAVfe57qEoIhAYjGs0UhwYqReymE/0wqqSRKUHLqHAcdMV1dinntUv?= =?us-ascii?Q?4mOC64dV9I6mJsi43Cq9oI9mLEhVDOIWP1irtVnI67kmmrgVhUtpY9kp612X?= =?us-ascii?Q?q4Rvxy5iJ8MByX04qSiMUwbpabfeuwZClC6rz52VY4Ea6+d0JM+CKILO11I8?= =?us-ascii?Q?5z5DCpebdHVQZ1a/RNMw53hDKSomXgrUdkmtoUl0/Q0XzKZAO9hrm15Yxoj8?= =?us-ascii?Q?AesIg5+a7+tMUEi8lYrcnR7x0X1Xx68TOi0P2MjQ8tPPlJDbfywNUoDu5Xqe?= =?us-ascii?Q?e76skCJ1+3j6vhL0l4dDEwbBu3JxK8sGpCcPfIcB/JhofKeKdVoBGP4HaW69?= =?us-ascii?Q?R03Bja+lThjtnFrNCYQjsF2bs8c5QEOqpLkkMa4rw3tEyAR7c35ftpaOH9zO?= =?us-ascii?Q?dz1hsOeUhAz0Fk5H5BMPkMZVS1yQv5vV+MFmAIEaA7VJR1VLwAiQSxdkzfos?= =?us-ascii?Q?gvV4WOuzhi793mkdevhB1jqPhZ+d5yhiEd60h07G7U+eJobDJWr5RIpYT3/w?= =?us-ascii?Q?6EX2BcHfgWqG3mpAZbQmkKTtA20pGEXEznK2RxNWFJkuOtl2zrkI6kRBTN6b?= =?us-ascii?Q?vV9Vu6ELjsRZNpTJgGbemzYeICV9LRytz/kmtxNmFpc/QT21w1IKAFDeC3bn?= =?us-ascii?Q?ddMK3FXUVprBpPAPM5mloJi+lSnxv8bEC8RXoixx6EwrnACRLnFgWveAgSCl?= =?us-ascii?B?dz09?= X-Microsoft-Antispam-Message-Info: gPEx3+qeTi68SbIAjQ0KAy9kCG8KDl48+gzNYf1490GEX1CFyHE7HjnONq/w9+vGHfJ9QjYn5Z4Vd/IC6yMEIabxyPGhBrM13WCKCYozh+T+a0zsZy6mPinzh6w+DdZvkLlkqIXuZ8LVOmyVtNaz0LiL+Tq2eWJ9hkjDoG1ejjngQKWHyPT+VFb3lGLHfqg9 X-Microsoft-Exchange-Diagnostics: 1; SN1PR12MB2478; 6:TZHwWayPKPzCVTWcCoSWv1Ry5Wb2RHTIYOFXbDoJQ4TOAiYq2Kt9NFSXwoTX4LBjyESI5Z75O9k8dpn8BjTccbC0e8U+lSC6t6H2Wd2SgHO9dcXU9RfCwN5vaRdhioByaegcSEFPAeK9Uz973HF0EiHQQdH/3Gax1aRiHUSrKzjIT8hz3bHESUMZHVepveKIfYYq5wAQKBgU0aVMLSrKe1BGIoQvLf/2DhjbqbyVFS09HA38TTd6lcNaLg8+bubbCy3Ra1nx9aaYmQZRgA0Ud2TFN6reTcqICDyg855GO36os3ooBxgYodDosRf23t/A7V3s8FMFgk6iu0zegek1MzbIkrpWQqGQARZupCslmwaHgICJpk7yVKItK5NrbPYpXOZIHIsrby3B94m6e/WjNM+9ctlQVTt3bq806LtzP4QmLzFcTo0mXcmZtPi4AWCKiPZT/oqJg2NY/KZfsqJkVA==; 5:uYouH5nVlqmcBTCZyAHNn6RXiQMQiJnGIY9nM1sFuUmGHOPb1MFQCNf8bec58WyoqYuNEB0siNMXsVNnzGDm1QAeEuUCmhNZ282XxIRTZsAveRoKld9kZ/1+GUifgjYzqfrmp80ZTB5xJn3QXIAP54ARdfDZs1uOC8QR7sRsii8=; 24:2X6Oe6Jf+pAHqXLOHoXOyIdPFksVK8d50tm+mHFzYLcmDJj9q75QL8vDSp3GercZWpejFKQ29JyDpJFtSMm6zIyX2yCejtoQIo73Bo6ZnL8= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; SN1PR12MB2478; 7:auBJ9t3ZKC4e0InlLE+nAYFntVM4oHmlvwLeuD4Cgv5pQ+VKRpUF7fguwtgjsygNWWmM8xu+bav+8DoC+otoikuu0PfmLkEFnSjBkvM3zBcUYSeapdy8ujhXnXep8gnhVzCjKJgyMgLexVMdOfZjE/XcNhb00GpXIwDRneTSSQ5FxATK2G67GgRQ+e+8BPbxYgGwEmnlAcv9AnKc10FQZBUYkRVyxqO7GDOkObXlF9bY5oDXpU7dPzZq//PnADZt; 20:zbmN/CW/vRUfLW86ylDRndW+DnYHc171ObwSLpbmxeaqHxkil9EXcFdd74bPZPm/CJ1L4DsDQEIAGm9aKs2JcCh+YIIoZqEkJkk9X7Aci4g3506sRuiXuXPKs2bRnKokm03OLuLHi/HzjnXeiz/0vVltm119AZPzPSsEty4CbzQiVRcRja2LOqSmPG2OKCvy3yuQG7ciVyiwDlTX4EFyOtZ9/ab8kv0Y1ymeQ8NGPESbRSwkRXTbkZJ9EpDtUYPy X-MS-Office365-Filtering-Correlation-Id: 6e7359c7-231f-41e7-6033-08d5b6b67db5 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 May 2018 20:42:04.9166 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 6e7359c7-231f-41e7-6033-08d5b6b67db5 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN1PR12MB2478 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 104.47.32.41 Subject: [Qemu-devel] [PATCH v8 3/8] i386: Add new property to control cache info X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: geoff@hostfission.com, babu.moger@amd.com, kash@tripleback.net, qemu-devel@nongnu.org, kvm@vger.kernel.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The property legacy-cache will be used to control the cache information. If user passes "-cpu legacy-cache" then older information will be displayed even if the hardware supports new information. Otherwise use the statically loaded cache definitions if available. Signed-off-by: Babu Moger Tested-by: Geoffrey McRae --- include/hw/i386/pc.h | 8 ++++ target/i386/cpu.c | 97 ++++++++++++++++++++++++++++++++------------ target/i386/cpu.h | 5 +++ 3 files changed, 84 insertions(+), 26 deletions(-) diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h index 2e834e6ded..df15deefca 100644 --- a/include/hw/i386/pc.h +++ b/include/hw/i386/pc.h @@ -304,6 +304,14 @@ int e820_add_entry(uint64_t, uint64_t, uint32_t); int e820_get_num_entries(void); bool e820_get_entry(int, uint32_t, uint64_t *, uint64_t *); =20 +#define PC_COMPAT_2_12 \ + HW_COMPAT_2_12 \ + {\ + .driver =3D TYPE_X86_CPU,\ + .property =3D "legacy-cache",\ + .value =3D "on",\ + }, + #define PC_COMPAT_2_11 \ HW_COMPAT_2_11 \ {\ diff --git a/target/i386/cpu.c b/target/i386/cpu.c index 3a74c4b1e4..d97b290b08 100644 --- a/target/i386/cpu.c +++ b/target/i386/cpu.c @@ -336,10 +336,14 @@ static void encode_cache_cpuid80000006(CPUCacheInfo *= l2, } } =20 -/* Definitions of the hardcoded cache entries we expose: */ +/* + * Definitions of the hardcoded cache entries we expose: + * These are legacy cache values. If there is a need to change any + * of these values please use builtin_x86_defs + */ =20 /* L1 data cache: */ -static CPUCacheInfo l1d_cache =3D { +static CPUCacheInfo legacy_l1d_cache =3D { .type =3D DCACHE, .level =3D 1, .size =3D 32 * KiB, @@ -352,7 +356,7 @@ static CPUCacheInfo l1d_cache =3D { }; =20 /*FIXME: CPUID leaf 0x80000005 is inconsistent with leaves 2 & 4 */ -static CPUCacheInfo l1d_cache_amd =3D { +static CPUCacheInfo legacy_l1d_cache_amd =3D { .type =3D DCACHE, .level =3D 1, .size =3D 64 * KiB, @@ -366,7 +370,7 @@ static CPUCacheInfo l1d_cache_amd =3D { }; =20 /* L1 instruction cache: */ -static CPUCacheInfo l1i_cache =3D { +static CPUCacheInfo legacy_l1i_cache =3D { .type =3D ICACHE, .level =3D 1, .size =3D 32 * KiB, @@ -379,7 +383,7 @@ static CPUCacheInfo l1i_cache =3D { }; =20 /*FIXME: CPUID leaf 0x80000005 is inconsistent with leaves 2 & 4 */ -static CPUCacheInfo l1i_cache_amd =3D { +static CPUCacheInfo legacy_l1i_cache_amd =3D { .type =3D ICACHE, .level =3D 1, .size =3D 64 * KiB, @@ -393,7 +397,7 @@ static CPUCacheInfo l1i_cache_amd =3D { }; =20 /* Level 2 unified cache: */ -static CPUCacheInfo l2_cache =3D { +static CPUCacheInfo legacy_l2_cache =3D { .type =3D UNIFIED_CACHE, .level =3D 2, .size =3D 4 * MiB, @@ -406,7 +410,7 @@ static CPUCacheInfo l2_cache =3D { }; =20 /*FIXME: CPUID leaf 2 descriptor is inconsistent with CPUID leaf 4 */ -static CPUCacheInfo l2_cache_cpuid2 =3D { +static CPUCacheInfo legacy_l2_cache_cpuid2 =3D { .type =3D UNIFIED_CACHE, .level =3D 2, .size =3D 2 * MiB, @@ -416,7 +420,7 @@ static CPUCacheInfo l2_cache_cpuid2 =3D { =20 =20 /*FIXME: CPUID leaf 0x80000006 is inconsistent with leaves 2 & 4 */ -static CPUCacheInfo l2_cache_amd =3D { +static CPUCacheInfo legacy_l2_cache_amd =3D { .type =3D UNIFIED_CACHE, .level =3D 2, .size =3D 512 * KiB, @@ -428,7 +432,7 @@ static CPUCacheInfo l2_cache_amd =3D { }; =20 /* Level 3 unified cache: */ -static CPUCacheInfo l3_cache =3D { +static CPUCacheInfo legacy_l3_cache =3D { .type =3D UNIFIED_CACHE, .level =3D 3, .size =3D 16 * MiB, @@ -3243,6 +3247,10 @@ static void x86_cpu_load_def(X86CPU *cpu, X86CPUDefi= nition *def, Error **errp) env->features[w] =3D def->features[w]; } =20 + /* Store Cache information from the X86CPUDefinition if available */ + env->cache_info =3D def->cache_info; + cpu->legacy_cache =3D def->cache_info ? 0 : 1; + /* Special cases not set in the X86CPUDefinition structs: */ /* TODO: in-kernel irqchip for hvf */ if (kvm_enabled()) { @@ -3592,11 +3600,21 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index= , uint32_t count, if (!cpu->enable_l3_cache) { *ecx =3D 0; } else { - *ecx =3D cpuid2_cache_descriptor(&l3_cache); + if (env->cache_info && !cpu->legacy_cache) { + *ecx =3D cpuid2_cache_descriptor(&env->cache_info->l3_cach= e); + } else { + *ecx =3D cpuid2_cache_descriptor(&legacy_l3_cache); + } + } + if (env->cache_info && !cpu->legacy_cache) { + *edx =3D (cpuid2_cache_descriptor(&env->cache_info->l1d_cache)= << 16) | + (cpuid2_cache_descriptor(&env->cache_info->l1i_cache) <= < 8) | + (cpuid2_cache_descriptor(&env->cache_info->l2_cache)); + } else { + *edx =3D (cpuid2_cache_descriptor(&legacy_l1d_cache) << 16) | + (cpuid2_cache_descriptor(&legacy_l1i_cache) << 8) | + (cpuid2_cache_descriptor(&legacy_l2_cache_cpuid2)); } - *edx =3D (cpuid2_cache_descriptor(&l1d_cache) << 16) | - (cpuid2_cache_descriptor(&l1i_cache) << 8) | - (cpuid2_cache_descriptor(&l2_cache_cpuid2)); break; case 4: /* cache info: needed for Core compatibility */ @@ -3609,27 +3627,35 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index= , uint32_t count, } } else { *eax =3D 0; + CPUCacheInfo *l1d, *l1i, *l2, *l3; + if (env->cache_info && !cpu->legacy_cache) { + l1d =3D &env->cache_info->l1d_cache; + l1i =3D &env->cache_info->l1i_cache; + l2 =3D &env->cache_info->l2_cache; + l3 =3D &env->cache_info->l3_cache; + } else { + l1d =3D &legacy_l1d_cache; + l1i =3D &legacy_l1i_cache; + l2 =3D &legacy_l2_cache; + l3 =3D &legacy_l3_cache; + } switch (count) { case 0: /* L1 dcache info */ - encode_cache_cpuid4(&l1d_cache, - 1, cs->nr_cores, + encode_cache_cpuid4(l1d, 1, cs->nr_cores, eax, ebx, ecx, edx); break; case 1: /* L1 icache info */ - encode_cache_cpuid4(&l1i_cache, - 1, cs->nr_cores, + encode_cache_cpuid4(l1i, 1, cs->nr_cores, eax, ebx, ecx, edx); break; case 2: /* L2 cache info */ - encode_cache_cpuid4(&l2_cache, - cs->nr_threads, cs->nr_cores, + encode_cache_cpuid4(l2, cs->nr_threads, cs->nr_cores, eax, ebx, ecx, edx); break; case 3: /* L3 cache info */ pkg_offset =3D apicid_pkg_offset(cs->nr_cores, cs->nr_thre= ads); if (cpu->enable_l3_cache) { - encode_cache_cpuid4(&l3_cache, - (1 << pkg_offset), cs->nr_cores, + encode_cache_cpuid4(l3, (1 << pkg_offset), cs->nr_core= s, eax, ebx, ecx, edx); break; } @@ -3842,8 +3868,13 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index,= uint32_t count, (L1_ITLB_2M_ASSOC << 8) | (L1_ITLB_2M_ENTRIES); *ebx =3D (L1_DTLB_4K_ASSOC << 24) | (L1_DTLB_4K_ENTRIES << 16) | \ (L1_ITLB_4K_ASSOC << 8) | (L1_ITLB_4K_ENTRIES); - *ecx =3D encode_cache_cpuid80000005(&l1d_cache_amd); - *edx =3D encode_cache_cpuid80000005(&l1i_cache_amd); + if (env->cache_info && !cpu->legacy_cache) { + *ecx =3D encode_cache_cpuid80000005(&env->cache_info->l1d_cach= e); + *edx =3D encode_cache_cpuid80000005(&env->cache_info->l1i_cach= e); + } else { + *ecx =3D encode_cache_cpuid80000005(&legacy_l1d_cache_amd); + *edx =3D encode_cache_cpuid80000005(&legacy_l1i_cache_amd); + } break; case 0x80000006: /* cache info (L2 cache) */ @@ -3859,9 +3890,17 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index,= uint32_t count, (L2_DTLB_4K_ENTRIES << 16) | \ (AMD_ENC_ASSOC(L2_ITLB_4K_ASSOC) << 12) | \ (L2_ITLB_4K_ENTRIES); - encode_cache_cpuid80000006(&l2_cache_amd, - cpu->enable_l3_cache ? &l3_cache : NULL, - ecx, edx); + if (env->cache_info && !cpu->legacy_cache) { + encode_cache_cpuid80000006(&env->cache_info->l2_cache, + cpu->enable_l3_cache ? + &env->cache_info->l3_cache : NULL, + ecx, edx); + } else { + encode_cache_cpuid80000006(&legacy_l2_cache_amd, + cpu->enable_l3_cache ? + &legacy_l3_cache : NULL, + ecx, edx); + } break; case 0x80000007: *eax =3D 0; @@ -5039,6 +5078,12 @@ static Property x86_cpu_properties[] =3D { false), DEFINE_PROP_BOOL("vmware-cpuid-freq", X86CPU, vmware_cpuid_freq, true), DEFINE_PROP_BOOL("tcg-cpuid", X86CPU, expose_tcg, true), + /* + * lecacy_cache defaults to CPU model being chosen. This is set in + * x86_cpu_load_def based on cache_info which is initialized in + * builtin_x86_defs + */ + DEFINE_PROP_BOOL("legacy-cache", X86CPU, legacy_cache, false), =20 /* * From "Requirements for Implementing the Microsoft diff --git a/target/i386/cpu.h b/target/i386/cpu.h index 372f8b7ef5..31715d167d 100644 --- a/target/i386/cpu.h +++ b/target/i386/cpu.h @@ -1394,6 +1394,11 @@ struct X86CPU { */ bool enable_l3_cache; =20 + /* Compatibility bits for old machine types. + * If true present the old cache topology information + */ + bool legacy_cache; + /* Compatibility bits for old machine types: */ bool enable_cpuid_0xb; =20 --=20 2.17.0