From nobody Sun Apr 5 16:31:36 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=citrix.com); dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=2; a=rsa-sha256; t=1774376412; cv=pass; d=zohomail.com; s=zohoarc; b=Y8xA2/CaZh/NArR9X0iN5ie6dkkBU357N0a/2LqasVedNlR/bf4Q/wamb51QO5cDafZZiE9QPzc+OqIKW0YbIxtkBfxIuNkbepmG9FI0kcK8f03o7mPhF+c2+3078V3RxJZwp9Mcbc54QNMJDjYAu1xCgnZFn781im1iKKiM/vc= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774376412; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=hQE140WqrdSbZEDIjgDe1+jOyuXiUrVJVSGp4gkd+CE=; b=hZoS/dr2CQ7USqf9JfidF8MokUMKdor/cKZ4pRKUu08gLesBh2/edp9a3qm4k/cZxr0ulr1T67MzEY1TPCZzvwTtwrv3Mie2tOqlxrwRPtJQ6nb189DNa8Enl9YIQnvxZ51j3iEij+/E8QGypWNkGw0EQSvQPpFCkMWfqCbkxNw= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=citrix.com); dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1774376412032733.8755029827639; Tue, 24 Mar 2026 11:20:12 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1261240.1554321 (Exim 4.92) (envelope-from ) id 1w56M1-0003e8-H8; Tue, 24 Mar 2026 18:19:49 +0000 Received: by outflank-mailman (output) from mailman id 1261240.1554321; Tue, 24 Mar 2026 18:19:49 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1w56M1-0003dO-DO; Tue, 24 Mar 2026 18:19:49 +0000 Received: by outflank-mailman (input) for mailman id 1261240; Tue, 24 Mar 2026 18:19:48 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1w56M0-0003bO-Qs for xen-devel@lists.xenproject.org; Tue, 24 Mar 2026 18:19:48 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1w56M0-00Db5a-4H for xen-devel@lists.xenproject.org; Tue, 24 Mar 2026 19:19:48 +0100 Received: from [10.42.69.3] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 69c2d5ae-bab6-0a2a0a5309dd-0a2a4503b5fc-30 for ; Tue, 24 Mar 2026 19:19:48 +0100 Received: from [52.101.57.48] (helo=BN8PR05CU002.outbound.protection.outlook.com) by tlsNG-33051d.mxtls.expurgate.net with ESMTPS (eXpurgate 4.55.2) (envelope-from ) id 69c2d5c2-1947-0a2a45030019-34653930eb5c-3 for ; Tue, 24 Mar 2026 19:19:47 +0100 Received: from CH8PR03MB8274.namprd03.prod.outlook.com (2603:10b6:610:2ba::5) by CH4PR03MB7771.namprd03.prod.outlook.com (2603:10b6:610:237::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9723.25; Tue, 24 Mar 2026 18:19:45 +0000 Received: from CH8PR03MB8274.namprd03.prod.outlook.com ([fe80::ebe2:32c1:d2be:a096]) by CH8PR03MB8274.namprd03.prod.outlook.com ([fe80::ebe2:32c1:d2be:a096%5]) with mapi id 15.20.9745.019; Tue, 24 Mar 2026 18:19:45 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=citrix.com header.i="@citrix.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=EHQy3XKvoar89pFgfYPY/6C1iBO7Hs7Kj3oMHwa1Kpr+UwL1W90ZWK0N8broURgvHrzftqZeO4OgVjDC+ZpNZz2ulcKr7JUD4VkX6XlnvbDJPSw6hIW00T5QfI0IYB59ExrITW2jd7aEm9xytMCyEu1vQXxFBH1hDul7ApsK9rJVzbQ/j+VW3tXyecmi6yFVUEiZqXJhszC+5trCjZfpUlnECYI39mH+JHfP0ZZm2gSzQCIFINzl9CmkNQwkwpF3yPZx8bwhRDFvjQfc3+aZND076Uj0oVo+DDNSSgFOOJQVHbH5VQDbcCO337g32tlqWo3IG/AKr7NuF8GMJQCYsg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=hQE140WqrdSbZEDIjgDe1+jOyuXiUrVJVSGp4gkd+CE=; b=ev18N0TTZBxMDe1uMOuTwdGtBhbssjMFREYdRHGirjCjxCMPFkN59MZuzoIGYV09HeQYOm0lrsjT0V1KlMVPA19eAOpJVOiRRTIy5vrxyFp7nvFnJhEWvWT5q2ZEwVTINZ4Zl/aoWX6PeAvcOVg6GYT20rvhQPBm6pgSJgqJOTVUfhlkWRhOy+Bo2NbhloMHLZNxwlbHzirvP++iz6Yb0/mii9+JEMhOL7yOlC95T22R4GviyD9/LN6XlM8ADdsCXue0X+aNpYEil2a8Y2zpo9+LXoEL6ePBI+DnX7whkbkDkMzdLW3FbtMwv+gZtknCd6JzBnWetB1KK9B0Uve4qw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=hQE140WqrdSbZEDIjgDe1+jOyuXiUrVJVSGp4gkd+CE=; b=vl+35MLWDchl4U5KtuEd7K37v73uglMfsiJkMFwzLkpFtFVBali8D0rKEmVZlcfVnLIZLkVnl5oAkMx6EhXLki+vdpyWWnlJ3klcA6psYh6OkValxkDc7TAymcmJxYw0yJKNImeHlAo2Q9+HTLrwUM9rECoXIbeyEXR5M0cdhuo= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=citrix.com; From: Ross Lagerwall To: xen-devel@lists.xenproject.org Cc: Jan Beulich , Andrew Cooper , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= , Ross Lagerwall Subject: [PATCH v2 1/9] x86/domain: Ensure a vCPU's FPU is reset early Date: Tue, 24 Mar 2026 18:19:29 +0000 Message-ID: <20260324181937.2465574-2-ross.lagerwall@citrix.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260324181937.2465574-1-ross.lagerwall@citrix.com> References: <20260324181937.2465574-1-ross.lagerwall@citrix.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: LO4P123CA0303.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:196::20) To CH8PR03MB8274.namprd03.prod.outlook.com (2603:10b6:610:2ba::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH8PR03MB8274:EE_|CH4PR03MB7771:EE_ X-MS-Office365-Filtering-Correlation-Id: e974cbeb-4719-4c35-3669-08de89d1ed54 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014|18002099003|22082099003|56012099003; X-Microsoft-Antispam-Message-Info: z9ZTi9k0gw1fUgsJ1Htew8lBbCSxZnualftAs3TRX3FdPD9JXLriVLNx4FQywgXWVAxNXCCwVWXFa52RoG+x/CRK4AATQzXguSZsAz21JSYzObQV7Gz5IXtw45IDq8fydifvDpYN/8PlBoQj5x/84nt5ehQ37PXpGisoFM+gNVD0EPJ8zYUZqwg93LDXjECE/cr1E5yYz3GfQpd4gDpXdJK+KNvPkzvHKT1E/0BCI8p9gHq8N5QjM6PvFLROichWzOnPpVNois/a7I6JIL3iJ5urEvFju2p/0kpmSmF0val9SDLJ3i4l1S51Tkmz7BSn3rVc10B86lxyp2jTGV8EQnmbm1nFO4A2euGJGmHj+Llt+XgU6PTZAW+zAgF3FfzVbclrm/ABISun81FPBcAzW1ogQ2ov5Nx+Q6IWP7oFkxrKaXdc1cyUd0TQV49ix4M/nCr7HxIrHtHDKvBVdJFcjLmJLyZbu/uJHtYEeAQK54O5X+x6G7qJoiI1EM5NsvfqgJevXs76zzrDCjrO00suy5qm7f0ZFWxR4QncyvF/uSeAyI/UR5RpdzCSTQ5lezjTX+29Sf8UOWo/Kkd56ikV6AGyEDLoEqV4mR5/Zs9PDD4TRK5586Q1X5QvazTqds+YVDPW+Upv7nDblzEhBQubRsJmBJTee2I1zuo6WgPXXIwIHFQRU7SGdJfuwEOR0ZEXypeJHLsz220lgdGN6BL5FdEQbKUyQp+/ZViGrUu8EbM= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH8PR03MB8274.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(18002099003)(22082099003)(56012099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?aTHjmrtyWjQUFahxtTpupdo8SYcU+zoHLfJpWLbWcuFHV6TrEhh8T/1YVe6m?= =?us-ascii?Q?9nEZM0myHevCSwSOUxB841kaJ2Cg3dpaxWCCInPyw6/WgpnUxAnERLqTN3rX?= =?us-ascii?Q?FEXMwOX976ghy0trEs+t0OMRhEh6zDtkuELu3s4DI8q/XBMLv855ZL4wgX0l?= =?us-ascii?Q?fg7kpxmV7WYB9U0HgB7dU8ERJYmVwBjjV+nIBHSj+rwQpnLDpJV2GWT5K0Tb?= =?us-ascii?Q?OtDBIWZui7ds1iFTknXNfXAk6IV1E5cz85Ti6UglatQQzXHUZlA3mTCdBs87?= =?us-ascii?Q?2/2Kw7442AM6fbp2qnGD1+7mIWUnMjdk94ZNBW+KuxnVy1UkF5vP1TTgVxPH?= =?us-ascii?Q?KjNzcSTZ6IWMd+fsQbb+GWBd9fXuAMZd6Rxgwegxa4lZ0jb43L6d/MO6dmJA?= =?us-ascii?Q?aLPSY07ZCTjQSFFEYVHDsyzcHV8V81RWb96OBHTz44t5qRocwY3yjcj/2eu2?= =?us-ascii?Q?9YvgvR51GYGxKlu9AYDl/xbKfNpodssO/UzFiZXthl//WYKoKtF9F5G50ar8?= =?us-ascii?Q?xGx6BPSwZoJ4ELmrC0NAjhMTKLP1omaM5Bf8afbqP+OAAypwL6hFyFqTvffY?= =?us-ascii?Q?h1qquOXXeNmh+bYnZKl99CaCSAGGItBpfpAzjfPFmIjN8XCp0Ei1H3O1byyz?= =?us-ascii?Q?v4f8ykbDRP4iVVY6HjK9gIKSXZ7PsgZc2sgONfXj8q2vqUyE4BTgaMxFmCI2?= =?us-ascii?Q?8uMk7lOCUnRtsaTM6ehjQ58TNttUqSLJnxfsAvci3E88bnT7zI3//H5TGllJ?= =?us-ascii?Q?1fWBq+zikvGY0hNlLENLNglAjhwf5fbVIJhEqX3yymDIQnlds+X7O+zNevTe?= =?us-ascii?Q?2J/Ufv5s4Fah5BHGxhboDHUNoJ+ZybbZPS5IIdFSSOrhap/ncVnPrNsVAXgy?= =?us-ascii?Q?bwA9g14nQWL+nCSSuHTMAsZZ2ykli7t1/u2NZ52UoAADpe9PFQHcPPBgN50N?= =?us-ascii?Q?RXH6ctblG6N61B/3dJLSxlKg9i9/FJH3JJR+ghW+ztvQnuyVrtIqDODBB8xI?= =?us-ascii?Q?8YWVHYn95XkyVCpn7LSacNOVe/yw26xNJurMOVCIa+Z8ok3uHdpX/eRHwSQq?= =?us-ascii?Q?Jg+36PLOgcQ+BNgz/yMNbbXAee1vprKIP+rbqzgMS2T3dkHV9sK3DeALHdMj?= =?us-ascii?Q?WoZDq8FSPXudVMLtJ4DUa6nmYWkDYRi8lzV256zFsVGCZJkLDUaw3iXGuJUO?= =?us-ascii?Q?m1cZZylRE4deSA1a11DTFnDneiRnO0hKXlxIJUCCdMhNX7o6Yl5u54FTlZje?= =?us-ascii?Q?PbX8x61nZdEudwK9gimeLHbcGlyPVHdHxTCo50A910JHcnS3M4qojQyTZzVn?= =?us-ascii?Q?CuLBbhZAAEQ91iQKAM7Y6gDOSa+pvZzUXb3wA6IE1R3bOtqxqRkbamtsjVFp?= =?us-ascii?Q?cGXrEnWIrNLaZmRQEkHBaVXurwLgi92xo9k81AccsH7OyS0jwKY+BCU22ppf?= =?us-ascii?Q?1CI29R+fTOBf3XuQdO2gVXBVpubRduWjnyOlQufWLFzOzQlBivIaIMz03xj9?= =?us-ascii?Q?wHjktCQeMaujkVjGTu0iF0MQrseqYxSLZgIjOcR5ycTo+zIqtLRc/VnhJXcB?= =?us-ascii?Q?8Fp9Tzx+Ts4EqI6Cb1T5MhArj6FUQWpd2CckbSDg5ebWjAJU1T0//Btplsg5?= =?us-ascii?Q?fLJ5c0gW+WTebBkPH43Sw0iL28MLLY0u9HjBhLhoUruYUInD4Fy5TXkD0+VA?= =?us-ascii?Q?gjzFun/q3BNMrCvb8FcbFbbBeUxNx0XG6Upvni3lCL4D0dSwc71Vynxqdb+j?= =?us-ascii?Q?8/mv5dwcKgl3Zj74ubwRP8xHXWNDnVw=3D?= X-OriginatorOrg: citrix.com X-MS-Exchange-CrossTenant-Network-Message-Id: e974cbeb-4719-4c35-3669-08de89d1ed54 X-MS-Exchange-CrossTenant-AuthSource: CH8PR03MB8274.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Mar 2026 18:19:45.6738 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: rtQWYFt+6ELIxK//J1rt6nPoWAdT0xjwdeypliDYJukgaTPW01sYf/L7AQqFpy1Jaa5sZEunJjaRglljTxyN4IZ2zh0qY5TCrG7x1I/24R4= X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH4PR03MB7771 X-purgate-ID: tlsNG-33051d/1774376388-4846E72C-DFA12B32/0/0 X-purgate-type: clean X-purgate-size: 911 X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1774376413540154100 Content-Type: text/plain; charset="utf-8" When using eager-fpu, a vCPU's FPU is always marked as initialized on context switch but it is possible that neither vcpu_reset_fpu() nor vcpu_setup_fpu() has been called on it. If that happens, arch_get_info_guest() would return a block of all 0's for the FPU context claiming it to be valid. Fix this by calling vcpu_reset_fpu() during vCPU creation. Signed-off-by: Ross Lagerwall --- New in v2 xen/arch/x86/domain.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/xen/arch/x86/domain.c b/xen/arch/x86/domain.c index 9ba2774762cc..82da1c5d7b38 100644 --- a/xen/arch/x86/domain.c +++ b/xen/arch/x86/domain.c @@ -522,6 +522,8 @@ int arch_vcpu_create(struct vcpu *v) if ( (rc =3D vcpu_init_fpu(v)) !=3D 0 ) return rc; =20 + vcpu_reset_fpu(v); + vmce_init_vcpu(v); =20 arch_vcpu_regs_init(v); --=20 2.53.0 From nobody Sun Apr 5 16:31:36 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=citrix.com); dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=2; a=rsa-sha256; t=1774376417; cv=pass; d=zohomail.com; s=zohoarc; b=IwI0fh8M8NCJKorKQO45YPwm7nHN9e/xuh8Gv62MbmhJDiwnzoMLZ4Oz5QwLAjYrH7r+IfnRleMm+cTLHybj+pZR28DDvN2s/Wz35n6Qg7zCI9n8NLArRYlpdm8rXgw7UlEv9w7eCZhXT3xWbinogLlbJkwwa4+m+7U3GgJhvZI= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774376417; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=2wYMxjp6Ztn3OKgr+Kj5cB1smirnWjdwasezqGKeb+8=; b=CnKSTrmG0vE8P4M54uREwQII2eeYxzhGvxeYOcNxp4KVzAVI3jGV0Wm7pyDwBdMT4kIg7ySkg6xuyBoG2BavkDUeg7wGpzzjg5uavXFToLADt0KNpz/iU7kFs+cWJNP5ozthUxlZhcad8X/GefM9ifJ4MkvqqPYBjOmw5QQI80Y= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=citrix.com); dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1774376417962233.25450805714695; Tue, 24 Mar 2026 11:20:17 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1261241.1554335 (Exim 4.92) (envelope-from ) id 1w56M8-00045U-TX; Tue, 24 Mar 2026 18:19:56 +0000 Received: by outflank-mailman (output) from mailman id 1261241.1554335; Tue, 24 Mar 2026 18:19:56 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1w56M8-00045N-P3; Tue, 24 Mar 2026 18:19:56 +0000 Received: by outflank-mailman (input) for mailman id 1261241; Tue, 24 Mar 2026 18:19:55 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1w56M7-000440-IU for xen-devel@lists.xenproject.org; Tue, 24 Mar 2026 18:19:55 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1w56M6-00A2x9-Un for xen-devel@lists.xenproject.org; Tue, 24 Mar 2026 19:19:54 +0100 Received: from [10.42.69.5] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 69c2d5a3-e002-0a2a0a5209dd-0a2a4505e79a-32 for ; Tue, 24 Mar 2026 19:19:54 +0100 Received: from [40.93.196.34] (helo=SA9PR02CU001.outbound.protection.outlook.com) by tlsNG-c201ff.mxtls.expurgate.net with ESMTPS (eXpurgate 4.55.2) (envelope-from ) id 69c2d5c9-5aeb-0a2a45050019-285dc422f0cc-3 for ; Tue, 24 Mar 2026 19:19:54 +0100 Received: from CH8PR03MB8274.namprd03.prod.outlook.com (2603:10b6:610:2ba::5) by CH4PR03MB7771.namprd03.prod.outlook.com (2603:10b6:610:237::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9723.25; Tue, 24 Mar 2026 18:19:50 +0000 Received: from CH8PR03MB8274.namprd03.prod.outlook.com ([fe80::ebe2:32c1:d2be:a096]) by CH8PR03MB8274.namprd03.prod.outlook.com ([fe80::ebe2:32c1:d2be:a096%5]) with mapi id 15.20.9745.019; Tue, 24 Mar 2026 18:19:50 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=citrix.com header.i="@citrix.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ahhF7RNlLQWX0UJbJ00j31vT1XsI4lwvk09L8n8bOrzGQb9o8zSoKMIxSFsl3dd3MAe7d8a2hnVihH376trEgyKKRlCbSRqFLv+fSqzBbfVWpB3q71x7cPO9eOYpqOzDj0v425ZxcUdiwh4mruC/fhsPkgIZkpyuWBauJGAkWA5p0xL3r8BeEUkse8J6b4obbSc6m/7B+HJwvQI2XbpCasfZRNqIdNmNaFRXwF4qFdZrmYMEAwQntJo+NhZHd63c1AxyyR1EtsOLIqJGoXXr7/ToTa3C17D2YzjJ45hP4FfTKXxuhEDcb7BZFvPU0g2GnpuxuQ5vddrQU7xTGpb8mg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=2wYMxjp6Ztn3OKgr+Kj5cB1smirnWjdwasezqGKeb+8=; b=mtGSICZ5SXUC0Ur1g7DodHR4tm/HhbThk4CeAGqF3Ua4b6jwseQsF77ZN3ZjT2gM3iMvjbSUoKD/ZbBptC3OsUqYJEU5p+imIe4UfAw4pRf+UZCtA9qSCR1jxxtoPNnVacDZkhfh8oopk2+vBJwFLwO9uMWlHLkFSM+cpTzlwcf2D0MwRFIFy1wbw6BwwvUsB1JYa9gal+T7OJdNjJiR8GeOqeeQxZaeyjvYh7RKWBUk+tv3gN7iEQdlJSWRi84C+dpd7KkPwWmCzpLUKNzim+KU6pxWDxGk5e1EAuQfrWqP9t7b6pGPQeWD21uTz3FSJCzYx1S+9AcYIjDiKiTCsg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=2wYMxjp6Ztn3OKgr+Kj5cB1smirnWjdwasezqGKeb+8=; b=dFapwf2GxGlvjCNYxNwcbUnwtrPB+T3iZg62LY9hHcDQ2Yi8tl8uhY8kA+X/O47WWEeDyLrIV79p2+f3qlzC5M0URelcjykDTW6q6z/VJIz+TPWE3zcuLGKAiDi/m/J+dV6iXjjcT2qDBeFu3Vlhyf7GNubGrDmAs2/Xe29+ZOE= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=citrix.com; From: Ross Lagerwall To: xen-devel@lists.xenproject.org Cc: Andrew Cooper , Anthony PERARD , Michal Orzel , Jan Beulich , Julien Grall , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= , Stefano Stabellini , Ross Lagerwall Subject: [PATCH v2 2/9] x86: Always use eager-fpu Date: Tue, 24 Mar 2026 18:19:30 +0000 Message-ID: <20260324181937.2465574-3-ross.lagerwall@citrix.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260324181937.2465574-1-ross.lagerwall@citrix.com> References: <20260324181937.2465574-1-ross.lagerwall@citrix.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: LO4P265CA0316.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:390::20) To DS0PR03MB8272.namprd03.prod.outlook.com (2603:10b6:8:28f::23) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH8PR03MB8274:EE_|CH4PR03MB7771:EE_ X-MS-Office365-Filtering-Correlation-Id: a45a4603-db05-499e-cd68-08de89d1ea4b X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014|18002099003|22082099003|56012099003; X-Microsoft-Antispam-Message-Info: Wq/qdSjDYxA2ZVPLEauisoMGCozkRbhEOC1et/+VLoi/4v0rCviel/EqFod57e4wSXKlf15URfMU3iUcWJSj07fzBLiOFke+YEJk+5ngCRZ7vLZOsDcoYndTkgbNXDovk88ZW0msxFqN7grmCmyIPtyWESR+KxCIPeSGXepMuQjPeOW9yTu19xRqHdA85KBqxU/zGok2kryIDKNQInaRKYDOFbd8mbc8sMWYy/MUBJWgoDyYm+OrAWv4OtncIhOsRZBHRGxTO691aOeyXoo4SHkbF8YAH9Zu4naofSSy7SwNKyt+vMqTVRdlY8tvCc1qzJqmiiSlrsvkAzANXFd3Xz9p8cv1zPgE6i2wNbF8lHBT1mzrAovtpNTJ18f220D+fmCETkP0beeUNhacKNaP+hgqVXuDR0sD5HiAMIBo8PWrWchDntLxEPEk7rVlN5G/zyppAQsLdqyFMsn5l5p5Az6nbLe80yZAmD44vygNsgZhzTUN/3Ahs09GeP0sr7LzpTIzKVnapsTvgB3x58hYgOBetuAomvYAjCxOa3CVTsfhiNDN1NjEbMpUDKnV7Qyq2e0jqYhx4Y/vdZXn1x3pvxa4pgkzZwwsHsVHfJmzRaFKdxkmkh8e46ZlxP/f86kRhfPcBreNbnTTrLcMXgjggATQjbiRxvEV1uDBdCfAKOlxj66CyKtUQQw3Xu36l/AfVMr+bd1qUzPDQgfLXz3BY1Kc6WTV9VdLnrnKdjmW6wc= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH8PR03MB8274.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(18002099003)(22082099003)(56012099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?CydBiId7rXYzqfQhKu/I8oTVWFbA/liIGhUYyk7YMiID5ivq1htZfZz4vBkF?= =?us-ascii?Q?g33BIiGEViwGWyxTNdN3U+x1M/cRaqCmn7+7o0BYwjdNMsqCGLDvn8byvxY6?= =?us-ascii?Q?/qs6i07w+YuE5ijCXzjX9rm0zgfYLUENm19rpY1ESIMtyAOnW3JfbvIg7Ikz?= =?us-ascii?Q?7EMrM0YQTnNOLp9bwz1cgaN2Y9QvC0UKvKy7qNskEPnZW131SbASWo8scpG/?= =?us-ascii?Q?vjGtxzadeKsLxc+s3gTcelLIz1cG7y3mP4py9iXT5SSCnJUBo5AGdENqOwUT?= =?us-ascii?Q?HVU2+wvZqC4nsY7WfiSDfsrmnyOZOfX3aDqtH8pfG41kf2v62qnOt24DNojN?= =?us-ascii?Q?0dXl5ggXDUXxWjtvMISi7vgw/2v7tUOiGwfPusipUFi4pDTPCi75j1rAluKU?= =?us-ascii?Q?MiMm1IYztI0EICQTpaCWAbfDbfR5GGnwsaUX4uBmpvquJqvgsL1yre5rULUs?= =?us-ascii?Q?OEbXTeItO0Tn9xnmzm3p+zav26gENXGEdfOcvboge4ui/vMoEstFVciZuSQV?= =?us-ascii?Q?tGzhcOb71Rt2Ax4LIWEhfgiOry4K+aaZukpu4ZPr05dvItqbYPVsnkWXt/jV?= =?us-ascii?Q?P6fA5qErbdzln8iafXZCN1nvDS4Eo6iCmzLxYaV7UTVk8dc4so/5M1Hht9QV?= =?us-ascii?Q?BBmhYmFvZkJXcPwVCtN6WAx/KEaWkdis//G9fyIOe1z7woRtuKAIv3Cay6kd?= =?us-ascii?Q?NlK5CZUEbod4SmKVostQWQz2nTMJSnrYQ3FkLeaC2Yun5BI1sqkWbnCRA824?= =?us-ascii?Q?6DzaCtRRdgfkJR9N1jY5IHPspFuckEVzI15R6vZ4efvGCJ/p1jHR+QMEsUlZ?= =?us-ascii?Q?HcfNq1CfsNx/TtTNV05tvrGOINZTIcA1tzKazEvfLj6zX+czpOFIqYHIDDDM?= =?us-ascii?Q?OAAI33paMNFtt8Co1bYDkulrMEq5TRpHD7xO5cFC7XTTV5i5DjvyQLlsi032?= =?us-ascii?Q?mwxOv1tfp0q6mUoOl6UudCS08Py9LlgnuU4LasePVAJibKtDVsKitmc2XQCN?= =?us-ascii?Q?kETkwRq8zY4ff/8GSIzaLuLD7jcIjcAhzQsaeNEYwGRInhfNNbDRVXa1Dk50?= =?us-ascii?Q?UnezPZ/2v7gYTn8PgoUFlgimjCfqGZBCcK/FghX/Xm64VH9M3FHte0teRpwt?= =?us-ascii?Q?9hxLiEkqU84aqwi/1clvbcrhbE1NA0Ui30QE+LDp6UnVR+wY5vZ6scOSJkox?= =?us-ascii?Q?jI++/UfkbVixVo/RRN5fjDZNrWMT9XTGYzFO3X6DEWjiAYEpcHZ6s8n8jJss?= =?us-ascii?Q?kuG+AeuFl8CD8bt9g+v1Sk77kvBxVmC8xlOXqP5evpPHWXT8ydNXXc98WNiW?= =?us-ascii?Q?ZWH7TZTdTA/Bz56P6Fkae5lidpiPVJaAXkLfPe+y+y8lcZVZ/2be6v2xdRTA?= =?us-ascii?Q?Zqtln1C/h+QSM2Rlm4z4cC7tby7yIgi47YozjYz8NThdokj82Gtmh12k1R/z?= =?us-ascii?Q?2tPOQc5An0eg9xGD9lEXX59rOntFMGA81HdColfLmE0ixorxgY4Csp/uBCIF?= =?us-ascii?Q?G3MmqCRcaa/ywSmgwP/HHaP7lJlbzA5mtJsfWt44Gxw49EwfllEIdoCk5xhU?= =?us-ascii?Q?WSTsdfJqpkLMtSI7mnbPIHYW6VEqaFr2vsqeEar/UNLGyczt1N5xBOEsMcv+?= =?us-ascii?Q?hxwnDgHB1ALgZCKI+j0jNLoWrv6UjLG+B1yjeeqpzWvJuyJL6CXOkftbUwFJ?= =?us-ascii?Q?fpVMolNKroh5cYvowSU/VS6JFhxpDdMJQ/jOiZumea0aaHafB8p+YBXuqG68?= =?us-ascii?Q?e5a8ESaQ4JgkRBTMvsLuNlOE9t507Do=3D?= X-OriginatorOrg: citrix.com X-MS-Exchange-CrossTenant-Network-Message-Id: a45a4603-db05-499e-cd68-08de89d1ea4b X-MS-Exchange-CrossTenant-AuthSource: DS0PR03MB8272.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Mar 2026 18:19:50.1388 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: YpLa04H0jQcmQmkXhIi6z6vaszhAg2R6uhgUxJK64wzilxys/hl816whHeOidBKogPOrnW91g5WFjYbPM9YAq/DUqk6dq0k9MR6aiK4aSN0= X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH4PR03MB7771 X-purgate-ID: tlsNG-c201ff/1774376394-20695488-34E44475/0/0 X-purgate-type: clean X-purgate-size: 11235 X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1774376419419154100 Content-Type: text/plain; charset="utf-8" Lazy FPU avoids some work during a context switch but pushes more expensive costs elsewhere: * For a workload running some Windows VMs, I measured about 83% of context switches out had used the FPU so most of the time the FPU save/restore is not avoided, just delayed. * A key difference between 32-bit and 64-bit OSes is that %xmm is in the base featureset for 64-bit and thus gets ubiquitous use in userspace. This is likely why we hit 83%. * Setting/clearing the cr0.TS bit is serializing and reportedly slower than the processor optimized xsave/restore. * Linux uses PKRU so a partial xsave/restore is performed on each context switch anyway, followed by a second xsave/restore at some point during execution. This interferes with the 'modified' optimisation that hardware uses to try and reduce the cost of the following XSAVE. There is no measurable performance benefit for using lazy FPU and it adds unwanted complexity so remove the option and always use eager-fpu. Signed-off-by: Ross Lagerwall Reviewed-by: Andrew Cooper --- In v2: Expanded the commit message docs/misc/hypfs-paths.pandoc | 2 - docs/misc/xen-command-line.pandoc | 7 +-- xen/arch/x86/i387.c | 2 +- xen/arch/x86/include/asm/spec_ctrl.h | 1 - xen/arch/x86/spec_ctrl.c | 88 ++-------------------------- 5 files changed, 6 insertions(+), 94 deletions(-) diff --git a/docs/misc/hypfs-paths.pandoc b/docs/misc/hypfs-paths.pandoc index e86f7d0dbef9..1553cb0bcb7f 100644 --- a/docs/misc/hypfs-paths.pandoc +++ b/docs/misc/hypfs-paths.pandoc @@ -108,12 +108,10 @@ A populated Xen hypervisor file system might look lik= e the following example: active-hvm/ directory for mitigations active in hvm doami= ns msr-spec-ctrl "No" or "Yes" rsb "No" or "Yes" - eager-fpu "No" or "Yes" md-clear "No" or "Yes" active-pv/ directory for mitigations active in pv doamins msr-spec-ctrl "No" or "Yes" rsb "No" or "Yes" - eager-fpu "No" or "Yes" md-clear "No" or "Yes" xpti "No" or list of "dom0", "domU", "PCID-on" l1tf-shadow "No" or list of "dom0", "domU" diff --git a/docs/misc/xen-command-line.pandoc b/docs/misc/xen-command-line= .pandoc index ebdca007d26b..6c77129732bf 100644 --- a/docs/misc/xen-command-line.pandoc +++ b/docs/misc/xen-command-line.pandoc @@ -2470,7 +2470,7 @@ By default SSBD will be mitigated at runtime (i.e `ss= bd=3Druntime`). > {msr-sc,rsb,verw,{ibpb,bhb}-entry}=3D|{pv,hvm}=3D, > bti-thunk=3Dretpoline|lfence|jmp,bhb-seq=3Dshort|tsx|long, > {ibrs,ibpb,ssbd,psfd, -> eager-fpu,l1d-flush,branch-harden,srb-lock, +> l1d-flush,branch-harden,srb-lock, > unpriv-mmio,gds-mit,div-scrub,lock-harden, > bhi-dis-s,bp-spec-reduce,ibpb-alt}=3D ]` =20 @@ -2574,11 +2574,6 @@ On hardware supporting IBPB (Indirect Branch Predict= ion Barrier), the `ibpb=3D` option can be used to force (the default) or prevent Xen from issuing bran= ch prediction barriers on vcpu context switches. =20 -On all hardware, the `eager-fpu=3D` option can be used to force or prevent= Xen -from using fully eager FPU context switches. This is currently implemente= d as -a global control. By default, Xen will choose to use fully eager context -switches on hardware believed to speculate past #NM exceptions. - On hardware supporting L1D_FLUSH, the `l1d-flush=3D` option can be used to= force or prevent Xen from issuing an L1 data cache flush on each VMEntry. Irrespective of Xen's setting, the feature is virtualised for HVM guests to diff --git a/xen/arch/x86/i387.c b/xen/arch/x86/i387.c index b84cd6f7a9e1..954ba3b1799b 100644 --- a/xen/arch/x86/i387.c +++ b/xen/arch/x86/i387.c @@ -297,7 +297,7 @@ void save_fpu_enable(void) /* Initialize FPU's context save area */ int vcpu_init_fpu(struct vcpu *v) { - v->arch.fully_eager_fpu =3D opt_eager_fpu; + v->arch.fully_eager_fpu =3D true; =20 return xstate_alloc_save_area(v); } diff --git a/xen/arch/x86/include/asm/spec_ctrl.h b/xen/arch/x86/include/as= m/spec_ctrl.h index 505e3ab863f0..8f82533c416a 100644 --- a/xen/arch/x86/include/asm/spec_ctrl.h +++ b/xen/arch/x86/include/asm/spec_ctrl.h @@ -79,7 +79,6 @@ static always_inline void spec_ctrl_new_guest_context(voi= d) extern int8_t opt_ibpb_ctxt_switch; extern bool opt_ssbd; extern int8_t opt_bhi_dis_s; -extern int8_t opt_eager_fpu; extern int8_t opt_l1d_flush; =20 extern bool bsp_delay_spec_ctrl; diff --git a/xen/arch/x86/spec_ctrl.c b/xen/arch/x86/spec_ctrl.c index dd0413e1fc13..bc8538a56f0e 100644 --- a/xen/arch/x86/spec_ctrl.c +++ b/xen/arch/x86/spec_ctrl.c @@ -61,7 +61,6 @@ static int8_t __initdata opt_psfd =3D -1; int8_t __ro_after_init opt_bhi_dis_s =3D -1; =20 int8_t __ro_after_init opt_ibpb_ctxt_switch =3D -1; -int8_t __ro_after_init opt_eager_fpu =3D -1; int8_t __ro_after_init opt_l1d_flush =3D -1; static bool __initdata opt_branch_harden =3D IS_ENABLED(CONFIG_SPECULATIVE_HARDEN_BRANCH); @@ -104,8 +103,6 @@ static int __init cf_check parse_spec_ctrl(const char *= s) opt_msr_sc_pv =3D false; opt_msr_sc_hvm =3D false; =20 - opt_eager_fpu =3D 0; - if ( opt_xpti_hwdom < 0 ) opt_xpti_hwdom =3D 0; if ( opt_xpti_domu < 0 ) @@ -336,8 +333,6 @@ static int __init cf_check parse_spec_ctrl(const char *= s) /* Misc settings. */ else if ( (val =3D parse_boolean("ibpb", s, ss)) >=3D 0 ) opt_ibpb_ctxt_switch =3D val; - else if ( (val =3D parse_boolean("eager-fpu", s, ss)) >=3D 0 ) - opt_eager_fpu =3D val; else if ( (val =3D parse_boolean("l1d-flush", s, ss)) >=3D 0 ) opt_l1d_flush =3D val; else if ( (val =3D parse_boolean("branch-harden", s, ss)) >=3D 0 ) @@ -648,32 +643,30 @@ static void __init print_details(enum ind_thunk thunk) * mitigation support for guests. */ #ifdef CONFIG_HVM - printk(" Support for HVM VMs:%s%s%s%s%s%s%s%s\n", + printk(" Support for HVM VMs:%s%s%s%s%s%s%s\n", (boot_cpu_has(X86_FEATURE_SC_MSR_HVM) || boot_cpu_has(X86_FEATURE_SC_RSB_HVM) || boot_cpu_has(X86_FEATURE_IBPB_ENTRY_HVM) || opt_bhb_entry_hvm || amd_virt_spec_ctrl || - opt_eager_fpu || opt_verw_hvm) ? "" : = " None", + opt_verw_hvm) ? "" : = " None", boot_cpu_has(X86_FEATURE_SC_MSR_HVM) ? " MSR_SPEC_CTRL" : = "", (boot_cpu_has(X86_FEATURE_SC_MSR_HVM) || amd_virt_spec_ctrl) ? " MSR_VIRT_SPEC_CTR= L" : "", boot_cpu_has(X86_FEATURE_SC_RSB_HVM) ? " RSB" : = "", - opt_eager_fpu ? " EAGER_FPU" : = "", opt_verw_hvm ? " VERW" : = "", boot_cpu_has(X86_FEATURE_IBPB_ENTRY_HVM) ? " IBPB-entry" : = "", opt_bhb_entry_hvm ? " BHB-entry" : = ""); =20 #endif #ifdef CONFIG_PV - printk(" Support for PV VMs:%s%s%s%s%s%s%s\n", + printk(" Support for PV VMs:%s%s%s%s%s%s\n", (boot_cpu_has(X86_FEATURE_SC_MSR_PV) || boot_cpu_has(X86_FEATURE_SC_RSB_PV) || boot_cpu_has(X86_FEATURE_IBPB_ENTRY_PV) || opt_bhb_entry_pv || - opt_eager_fpu || opt_verw_pv) ? "" : = " None", + opt_verw_pv) ? "" : = " None", boot_cpu_has(X86_FEATURE_SC_MSR_PV) ? " MSR_SPEC_CTRL" : = "", boot_cpu_has(X86_FEATURE_SC_RSB_PV) ? " RSB" : = "", - opt_eager_fpu ? " EAGER_FPU" : = "", opt_verw_pv ? " VERW" : = "", boot_cpu_has(X86_FEATURE_IBPB_ENTRY_PV) ? " IBPB-entry" : = "", opt_bhb_entry_pv ? " BHB-entry" : = ""); @@ -959,75 +952,6 @@ static bool __init rsb_is_full_width(void) return true; } =20 -/* Calculate whether this CPU speculates past #NM */ -static bool __init should_use_eager_fpu(void) -{ - /* - * Assume all unrecognised processors are ok. This is only known to - * affect Intel Family 6 processors. - */ - if ( boot_cpu_data.vendor !=3D X86_VENDOR_INTEL || - boot_cpu_data.family !=3D 6 ) - return false; - - switch ( boot_cpu_data.model ) - { - /* - * Core processors since at least Nehalem are vulnerable. - */ - case 0x1e: /* Nehalem */ - case 0x1f: /* Auburndale / Havendale */ - case 0x1a: /* Nehalem EP */ - case 0x2e: /* Nehalem EX */ - case 0x25: /* Westmere */ - case 0x2c: /* Westmere EP */ - case 0x2f: /* Westmere EX */ - case 0x2a: /* SandyBridge */ - case 0x2d: /* SandyBridge EP/EX */ - case 0x3a: /* IvyBridge */ - case 0x3e: /* IvyBridge EP/EX */ - case 0x3c: /* Haswell */ - case 0x3f: /* Haswell EX/EP */ - case 0x45: /* Haswell D */ - case 0x46: /* Haswell H */ - case 0x3d: /* Broadwell */ - case 0x47: /* Broadwell H */ - case 0x4f: /* Broadwell EP/EX */ - case 0x56: /* Broadwell D */ - case 0x4e: /* Skylake M */ - case 0x55: /* Skylake X */ - case 0x5e: /* Skylake D */ - case 0x66: /* Cannonlake */ - case 0x67: /* Cannonlake? */ - case 0x8e: /* Kabylake M */ - case 0x9e: /* Kabylake D */ - return true; - - /* - * Atom processors are not vulnerable. - */ - case 0x1c: /* Pineview */ - case 0x26: /* Lincroft */ - case 0x27: /* Penwell */ - case 0x35: /* Cloverview */ - case 0x36: /* Cedarview */ - case 0x37: /* Baytrail / Valleyview (Silvermont) */ - case 0x4d: /* Avaton / Rangely (Silvermont) */ - case 0x4c: /* Cherrytrail / Brasswell */ - case 0x4a: /* Merrifield */ - case 0x5a: /* Moorefield */ - case 0x5c: /* Goldmont */ - case 0x5f: /* Denverton */ - case 0x7a: /* Gemini Lake */ - return false; - - default: - printk("Unrecognised CPU model %#x - assuming vulnerable to LazyFP= U\n", - boot_cpu_data.model); - return true; - } -} - /* * https://www.amd.com/content/dam/amd/en/documents/corporate/cr/speculati= ve-return-stack-overflow-whitepaper.pdf */ @@ -2221,10 +2145,6 @@ void __init init_speculation_mitigations(void) =20 div_calculations(hw_smt_enabled); =20 - /* Check whether Eager FPU should be enabled by default. */ - if ( opt_eager_fpu =3D=3D -1 ) - opt_eager_fpu =3D should_use_eager_fpu(); - /* (Re)init BSP state now that default_scf has been calculated. */ init_shadow_spec_ctrl_state(get_cpu_info()); =20 --=20 2.53.0 From nobody Sun Apr 5 16:31:36 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=citrix.com); dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=2; a=rsa-sha256; t=1774376418; cv=pass; d=zohomail.com; s=zohoarc; b=SOoBMUPA2cDRWItkp57+PSZn6ymmPET93DymvTs3YsscO4/T3v1kUUmpaJS78XisIV7VGYweB1WaATszY1dlfkDCdHMNLuicW36wbaXKkts3Pu4IjuNg4KjF4MK9xnkfBAC4/m1P/d5FFif4IB60MfmzSIktb8zeqW3DHUEK3Cc= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774376418; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=qI+LNjy72D4wHoOthvYhwfj9bAoz+vROImIxBQ8ISLY=; b=jKP2Iu/U9DOUod/YMYDKSRyicAs5MH/Zwf+j1eLTEK1NQrgmmaKfrdKVMu1mQUCTCBIZ3278dLROxa/OsE6UTlxE6Wsnj7epI2pC4rAvpcKvHeX+IpJ85RLd3ltbl1CEMxmx+e7Ymaj9SEoCCSIlaAJxjZPb4j6ewbnQK5Lyftg= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=citrix.com); dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 177437641852040.466144288818214; Tue, 24 Mar 2026 11:20:18 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1261245.1554344 (Exim 4.92) (envelope-from ) id 1w56MC-0004Lu-2b; Tue, 24 Mar 2026 18:20:00 +0000 Received: by outflank-mailman (output) from mailman id 1261245.1554344; Tue, 24 Mar 2026 18:20:00 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1w56MB-0004Lh-W9; Tue, 24 Mar 2026 18:19:59 +0000 Received: by outflank-mailman (input) for mailman id 1261245; Tue, 24 Mar 2026 18:19:58 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1w56MA-0004Jf-1p for xen-devel@lists.xenproject.org; Tue, 24 Mar 2026 18:19:58 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1w56M9-00Db9Z-9u for xen-devel@lists.xenproject.org; Tue, 24 Mar 2026 19:19:57 +0100 Received: from [10.42.69.3] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 69c2d5ae-bab6-0a2a0a5309dd-0a2a4503b5fc-46 for ; Tue, 24 Mar 2026 19:19:57 +0100 Received: from [40.93.196.11] (helo=SA9PR02CU001.outbound.protection.outlook.com) by tlsNG-33051d.mxtls.expurgate.net with ESMTPS (eXpurgate 4.55.2) (envelope-from ) id 69c2d5cb-1947-0a2a45030019-285dc40b1c1a-3 for ; Tue, 24 Mar 2026 19:19:56 +0100 Received: from CH8PR03MB8274.namprd03.prod.outlook.com (2603:10b6:610:2ba::5) by CH4PR03MB7771.namprd03.prod.outlook.com (2603:10b6:610:237::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9723.25; Tue, 24 Mar 2026 18:19:54 +0000 Received: from CH8PR03MB8274.namprd03.prod.outlook.com ([fe80::ebe2:32c1:d2be:a096]) by CH8PR03MB8274.namprd03.prod.outlook.com ([fe80::ebe2:32c1:d2be:a096%5]) with mapi id 15.20.9745.019; Tue, 24 Mar 2026 18:19:54 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=citrix.com header.i="@citrix.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ZGKfpUK4b9Nwc50kQU+h2txy+LktN8gLAgrf5g5yTDw5wDMQGkyE3fQLOSBfuQ1YLOnGnjJkPWuZaVCJz2lLABxmqLMgN3XGpidBHu3p5WOTHjtVY+o1pCmaoUd/Na/+GpLTpt1djgDHIS7dP1M8qwzA38YyM9T1ZTt3AP44zMMlUvaSSceAYxLVO8uQIu19S9clgp+X3ZmLle89uOmA0GevBQ2y/n4M2Z3ncQaVzzpN2FCd1fikWxL1vNYjWB9I8rGLNhaaPlEfK4aXfaljWS8mzKcXDbr//WaNGOHt9gJs8Eh+/wEMounCLgv9BndHi0+/s0KpP54EtR3TP/i8dw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=qI+LNjy72D4wHoOthvYhwfj9bAoz+vROImIxBQ8ISLY=; b=L1+/e3wuGBpwZenvlDwS1S5P7PYsuD9aa43gPfig0DQii3UNpQJWQHxI6NnxZTp+U9MRyuj3AgZfWWxIS+YeArn1UZ4cm94US3Pt4ELRSwOFiu/lmniMnVaNZlvX6CG/ofzllBBooB2F0XToFOTrPFPEb7WQDJR6gvm+2echDInFKwfNyN6D4n+hGwpV2jHScYtPEWfMU/fMJ8xQtfuRRAsuNIKw2Ito8/1LJGI1ulFZYtwGoCKGakguEh6lPzl/pxmOUmpdfqFW+TUtcwgS9rOI+HIPnEMag2a4EUoJOgbQ46/gZNDj65FNxESaEpCXZw96Quuxsoq/AQ7TB/TcBw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=qI+LNjy72D4wHoOthvYhwfj9bAoz+vROImIxBQ8ISLY=; b=qLV/5GO3UnvirntbrR4tJg0GccmeS2n5pPIfBzUEjfxTl9hl36rcdI4slCojga5RJAx0AiVKsd6THx1E/d12UlWu7W/uROSluvcxB981nsm0z8q6CqmQe/obpIEQ+3uz9ZhbgnfMpxqiqxKPmFZe/vxzOKO8Ymh8GKbilJMT9hE= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=citrix.com; From: Ross Lagerwall To: xen-devel@lists.xenproject.org Cc: Jan Beulich , Andrew Cooper , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= , Ross Lagerwall Subject: [PATCH v2 3/9] x86/vmx: Remove lazy FPU support Date: Tue, 24 Mar 2026 18:19:31 +0000 Message-ID: <20260324181937.2465574-4-ross.lagerwall@citrix.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260324181937.2465574-1-ross.lagerwall@citrix.com> References: <20260324181937.2465574-1-ross.lagerwall@citrix.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: LO4P265CA0318.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:390::17) To DS0PR03MB8272.namprd03.prod.outlook.com (2603:10b6:8:28f::23) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH8PR03MB8274:EE_|CH4PR03MB7771:EE_ X-MS-Office365-Filtering-Correlation-Id: 9d9fc831-f0c5-49ed-f3d7-08de89d1ecef X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014|18002099003|22082099003|56012099003; X-Microsoft-Antispam-Message-Info: GuE5X3Iom0ad4IIm0+J47VrN2502B9OHbqnJzaOm18a0eqm0TT0HQGdV31iDIK0CaSKJWA+u2iY2l5CxoDLQdxd5u+Y5EWKD2YMqGc6xONEkv5qdeYO3/6pz50EPtu+LZ18vw/gXa70xYWca6lJeyyQKeoWcqv0CaZ+oY0tBxeKwVZ+rtKP+teGs2c42gNAYLKzpCK60LduoiXKydbpqfWAZ2shIC9oUMeF33dBUzHegJBBDnIDZ1U1CvSaO0T37IVsx1rUOyfJxQBahhQIdNcb/LY5kkvRx0vi/xAZtfMmYweIrllrYcW57/+sw/tFJF7jrIVAQOEWASFihTuWw/JoG/PQ4XzmGLGPuOYz2T9ae+2Sb/donAgoFCbLIGCGbFFyN1SoZLoq9DPb206HIrCpdDT6vn+7dS6i9TQ5TzSrL0sIWJ4gNNVjXkWGz5zXSZZDG6snGCM2yNispj/hWaWHNXZ5l+frcMXgEVB4oorUr4atmNX9krXI+g8F6DCjCvKkwyWnShw2vQUxG4xSVTKisqo4E8ZrnKiWT+Ejw6YtQo7B/7g7UGx2rr3RvDpZGq7G+1jx/q46NNKqgr+LDYWRv+lhmURbLWOyD8Q9+n1bG9JfV57gwigaMmmvRRfMM0xIqtKUTpHS81yYZp+Oza6nK7Ei2NPVmgXWMZ2GZTLBPKNDjt2YysIy/E1zUTXur//x2OOpDvihVGJBY55GUe3Va4OBAcRcntSGsZGjdU74= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH8PR03MB8274.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(18002099003)(22082099003)(56012099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?q3+ZZatHTrwZ2voEB46PZjkMGiqapB2A+EwLpPmmSjuy9bLPSZgwuPxaydRr?= =?us-ascii?Q?19jbHneiL+YBsJgM6LKn4tSKyGiEIaY2TGG4vwSQ+4lgmP7lvAMBqIT+LpP8?= =?us-ascii?Q?jC5Ik92doIs3SgMh2gYukE88EJ+LuVpiSJ0tjbwbs07LpPfEFMwAIalZgHgy?= =?us-ascii?Q?eYmAkkZDkfN6u6CM4I+WBDKCRrmIrWFxXn1k4xy5CrF5RkVuoi/47P6pxFeA?= =?us-ascii?Q?BsjEgM/wt9XY8KuPK7jw7nb8zDPGl2sptdCUIi0mF/HUYCcs8/QenBwl4PW6?= =?us-ascii?Q?Bz3lCcik67tTuhgTXcmS5z6fcQxVu1NzTCxbIDslmAG9lfs713Ktjlcp5mAd?= =?us-ascii?Q?SRf5shWph3/TdIxichcIuJeGstDOwZPiNJC5eIG14TDX9ZqXWRFWoiMYdQ4j?= =?us-ascii?Q?in2rsWcjtyztg9dXbpXGeAsZwmMGM2C1MyZ/4K/62ggwFtGdgJjmFSo3ZLwn?= =?us-ascii?Q?bBwi41COhknQJkiwiuEmlJtTEj2rbuDoMvmJPh/eD74GQtZOhgp+cZbPmeYm?= =?us-ascii?Q?M16ah65sy6f71Rx4YGxXPk1WdqzvPgAX248/63YJknODtb+ljJyAuvWCERKk?= =?us-ascii?Q?yyJDdoM6+LYVofHLqrR4iMDt3XYoH/mP10g5C/o9WJ8zAcZ03VDv7yaVyOwS?= =?us-ascii?Q?jY8v8Z9KH1SYt5cce2gP7CehhHtpe1xe+ZpYhAwCEpu5Sn93yxkZx8QhVWtX?= =?us-ascii?Q?z0AhNas150GkayWIOWeZE+mP+UJmZ4DlqvqbedFzyjGzvwErjAY0B+nXgSUY?= =?us-ascii?Q?UO8Nbqd7TqXPKMFcAOeug5MeIFTtouu711wK3AnJrcgyT+emHbG0Q6qHS6vY?= =?us-ascii?Q?sOoQKVpUwyWl8ZIUXsMAlXYcguwkb5VmZYNWdkKorN4ae3JeSoyE8PmXJanD?= =?us-ascii?Q?NZ2js1LU0ALK0hs275620GJlRIES/vgOld83RUgu8PU1I6H7XQnpq6KT2925?= =?us-ascii?Q?iGcsDlbsqkpe57DWyGRP0LzXr2rZHhjuIkUNjCflXTssIPUHynf0K1jUTQE1?= =?us-ascii?Q?hlLzTdc9bpbYPBGUVYaTxtdG1Il6enEh+6Yb21iNU0KGCvSZdSgsSxR0S3yA?= =?us-ascii?Q?kjHd1pj2psnZH1hPTejll5BEdQZEZxAuR5yWdCAfucLmchJeU+Zp18bS9QdV?= =?us-ascii?Q?WwA7mak4oW+0fEZRWgSD4vnJw07fqj6YfKXLj3q2oPU/NqjVnBcMlFMK3Kei?= =?us-ascii?Q?7ynHviPWEkUbhNf0xq/6cSqL0JCFwgqoUzwDxx2ExSLoBfdqDzKKYTiokFIq?= =?us-ascii?Q?RrB8oDRvxG0ZN6NPubUQ6+2Pp2l7cHk8TK8eXj1+qgPpmglSfSIe2uXASny/?= =?us-ascii?Q?uDShIY/xnf0tlOwlwTzW0k6yVgJ4TInUTbRkzCqaTTqKTGfQ5QsdzCSPUjiA?= =?us-ascii?Q?W5za/cFFO76+dPpEpZkRzgA+zmxpH/wjLuiEo/cNvnTrJbOi6ZQwG27/f74z?= =?us-ascii?Q?JHXBTTSPQHJ5t3e93V1i+cmhsp5zO72EgOcpgP9h/VbOA7VuIZ1llVZHFIpp?= =?us-ascii?Q?wW8etSOY+FeI+49cFHcMxn7XbuCNJqH7YtZqcSRd0PzS27hcawWouZvdYi4u?= =?us-ascii?Q?OYhKfNEo0j1I4LP/+gnVq8adqVemqfXNU1Z68//EJGQeclW7l6b2WBr7Tax6?= =?us-ascii?Q?XGYEAK1WpC6t5Ho9wVgtlOWS4b3sJ9s8496nDI0lg3p8/LNTHcQYn35aELr2?= =?us-ascii?Q?ivpFPveElnz3+Yj7+hM5yaUM46EiggfYB75nGGyXaUrPSX54x4gI+DJhOCNn?= =?us-ascii?Q?Vh5dcMtMcC85ITZkkNu+nY2ApG4cmRA=3D?= X-OriginatorOrg: citrix.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9d9fc831-f0c5-49ed-f3d7-08de89d1ecef X-MS-Exchange-CrossTenant-AuthSource: DS0PR03MB8272.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Mar 2026 18:19:54.4400 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: nuWAKn8HaD7Dsk7OK67C79xbh7YyXkmW2a9cK8x78QmVY5fRcFbiab/IJa6jvfHIT5X2gs7+1TKRVMl4pc/pc0aWbFx2HdQqZCK2pyPnF74= X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH4PR03MB7771 X-purgate-ID: tlsNG-33051d/1774376397-4866F72C-7F8B867D/0/0 X-purgate-type: clean X-purgate-size: 9025 X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1774376419427154100 Content-Type: text/plain; charset="utf-8" Remove lazy FPU support from the VMX code since fully_eager_fpu is now always true. No functional change intended. Signed-off-by: Ross Lagerwall Reviewed-by: Andrew Cooper --- Unchanged in v2 xen/arch/x86/hvm/vmx/vmcs.c | 8 +-- xen/arch/x86/hvm/vmx/vmx.c | 70 +------------------------ xen/arch/x86/hvm/vmx/vvmx.c | 15 +----- xen/arch/x86/include/asm/hvm/vmx/vmcs.h | 2 - 4 files changed, 5 insertions(+), 90 deletions(-) diff --git a/xen/arch/x86/hvm/vmx/vmcs.c b/xen/arch/x86/hvm/vmx/vmcs.c index c2e7f9aed39f..8e52ef4d497a 100644 --- a/xen/arch/x86/hvm/vmx/vmcs.c +++ b/xen/arch/x86/hvm/vmx/vmcs.c @@ -1247,10 +1247,7 @@ static int construct_vmcs(struct vcpu *v) __vmwrite(HOST_TR_SELECTOR, TSS_SELECTOR); =20 /* Host control registers. */ - v->arch.hvm.vmx.host_cr0 =3D read_cr0() & ~X86_CR0_TS; - if ( !v->arch.fully_eager_fpu ) - v->arch.hvm.vmx.host_cr0 |=3D X86_CR0_TS; - __vmwrite(HOST_CR0, v->arch.hvm.vmx.host_cr0); + __vmwrite(HOST_CR0, read_cr0()); __vmwrite(HOST_CR4, mmu_cr4_features); if ( cpu_has_vmx_efer ) __vmwrite(HOST_EFER, read_efer()); @@ -1330,8 +1327,7 @@ static int construct_vmcs(struct vcpu *v) __vmwrite(VMCS_LINK_POINTER, ~0UL); =20 v->arch.hvm.vmx.exception_bitmap =3D HVM_TRAP_MASK - | (paging_mode_hap(d) ? 0 : (1U << X86_EXC_PF)) - | (v->arch.fully_eager_fpu ? 0 : (1U << X86_EXC_NM)); + | (paging_mode_hap(d) ? 0 : (1U << X86_EXC_PF)); =20 if ( cpu_has_vmx_notify_vm_exiting ) __vmwrite(NOTIFY_WINDOW, vm_notify_window); diff --git a/xen/arch/x86/hvm/vmx/vmx.c b/xen/arch/x86/hvm/vmx/vmx.c index 82c55f49aea9..03daf2f52bf2 100644 --- a/xen/arch/x86/hvm/vmx/vmx.c +++ b/xen/arch/x86/hvm/vmx/vmx.c @@ -68,7 +68,6 @@ static void cf_check vmx_update_guest_cr( struct vcpu *v, unsigned int cr, unsigned int flags); static void cf_check vmx_update_guest_efer(struct vcpu *v); static void cf_check vmx_wbinvd_intercept(void); -static void cf_check vmx_fpu_dirty_intercept(void); static int cf_check vmx_msr_read_intercept( unsigned int msr, uint64_t *msr_content); static int cf_check vmx_msr_write_intercept( @@ -1130,41 +1129,6 @@ static int cf_check vmx_load_vmcs_ctxt(struct vcpu *= v, struct hvm_hw_cpu *ctxt) return 0; } =20 -static void vmx_fpu_enter(struct vcpu *v) -{ - vcpu_restore_fpu_lazy(v); - v->arch.hvm.vmx.exception_bitmap &=3D ~(1u << X86_EXC_NM); - vmx_update_exception_bitmap(v); - v->arch.hvm.vmx.host_cr0 &=3D ~X86_CR0_TS; - __vmwrite(HOST_CR0, v->arch.hvm.vmx.host_cr0); -} - -static void cf_check vmx_fpu_leave(struct vcpu *v) -{ - ASSERT(!v->fpu_dirtied); - ASSERT(read_cr0() & X86_CR0_TS); - - if ( !(v->arch.hvm.vmx.host_cr0 & X86_CR0_TS) ) - { - v->arch.hvm.vmx.host_cr0 |=3D X86_CR0_TS; - __vmwrite(HOST_CR0, v->arch.hvm.vmx.host_cr0); - } - - /* - * If the guest does not have TS enabled then we must cause and handle= an - * exception on first use of the FPU. If the guest *does* have TS enab= led - * then this is not necessary: no FPU activity can occur until the gue= st - * clears CR0.TS, and we will initialise the FPU when that happens. - */ - if ( !(v->arch.hvm.guest_cr[0] & X86_CR0_TS) ) - { - v->arch.hvm.hw_cr[0] |=3D X86_CR0_TS; - __vmwrite(GUEST_CR0, v->arch.hvm.hw_cr[0]); - v->arch.hvm.vmx.exception_bitmap |=3D (1u << X86_EXC_NM); - vmx_update_exception_bitmap(v); - } -} - static void cf_check vmx_ctxt_switch_from(struct vcpu *v) { /* @@ -1187,8 +1151,6 @@ static void cf_check vmx_ctxt_switch_from(struct vcpu= *v) vmx_vmcs_reload(v); } =20 - if ( !v->arch.fully_eager_fpu ) - vmx_fpu_leave(v); vmx_save_guest_msrs(v); vmx_restore_host_msrs(); vmx_save_dr(v); @@ -1771,17 +1733,6 @@ static void cf_check vmx_update_guest_cr( else nvmx_set_cr_read_shadow(v, 0); =20 - if ( !(v->arch.hvm.guest_cr[0] & X86_CR0_TS) ) - { - if ( v !=3D current ) - { - if ( !v->arch.fully_eager_fpu ) - hw_cr0_mask |=3D X86_CR0_TS; - } - else if ( v->arch.hvm.hw_cr[0] & X86_CR0_TS ) - vmx_fpu_enter(v); - } - realmode =3D !(v->arch.hvm.guest_cr[0] & X86_CR0_PE); =20 if ( !vmx_unrestricted_guest(v) && @@ -2915,7 +2866,6 @@ static struct hvm_function_table __initdata_cf_clobbe= r vmx_function_table =3D { .update_guest_cr =3D vmx_update_guest_cr, .update_guest_efer =3D vmx_update_guest_efer, .cpuid_policy_changed =3D vmx_cpuid_policy_changed, - .fpu_leave =3D vmx_fpu_leave, .set_guest_pat =3D vmx_set_guest_pat, .get_guest_pat =3D vmx_get_guest_pat, .set_tsc_offset =3D vmx_set_tsc_offset, @@ -2927,7 +2877,6 @@ static struct hvm_function_table __initdata_cf_clobbe= r vmx_function_table =3D { .cpu_up =3D vmx_cpu_up, .cpu_down =3D vmx_cpu_down, .wbinvd_intercept =3D vmx_wbinvd_intercept, - .fpu_dirty_intercept =3D vmx_fpu_dirty_intercept, .msr_read_intercept =3D vmx_msr_read_intercept, .msr_write_intercept =3D vmx_msr_write_intercept, .handle_cd =3D vmx_handle_cd, @@ -3281,20 +3230,6 @@ void update_guest_eip(void) hvm_inject_hw_exception(X86_EXC_DB, X86_EVENT_NO_EC); } =20 -static void cf_check vmx_fpu_dirty_intercept(void) -{ - struct vcpu *curr =3D current; - - vmx_fpu_enter(curr); - - /* Disable TS in guest CR0 unless the guest wants the exception too. */ - if ( !(curr->arch.hvm.guest_cr[0] & X86_CR0_TS) ) - { - curr->arch.hvm.hw_cr[0] &=3D ~X86_CR0_TS; - __vmwrite(GUEST_CR0, curr->arch.hvm.hw_cr[0]); - } -} - static void vmx_dr_access(unsigned long exit_qualification, struct cpu_user_regs *regs) { @@ -4543,10 +4478,7 @@ void asmlinkage vmx_vmexit_handler(struct cpu_user_r= egs *regs) domain_pause_for_debugger(); } break; - case X86_EXC_NM: - TRACE(TRC_HVM_TRAP, vector); - vmx_fpu_dirty_intercept(); - break; + case X86_EXC_PF: __vmread(EXIT_QUALIFICATION, &exit_qualification); __vmread(VM_EXIT_INTR_ERROR_CODE, &ecode); diff --git a/xen/arch/x86/hvm/vmx/vvmx.c b/xen/arch/x86/hvm/vmx/vvmx.c index 38952f06961e..e4cdfe55c18e 100644 --- a/xen/arch/x86/hvm/vmx/vvmx.c +++ b/xen/arch/x86/hvm/vmx/vvmx.c @@ -1238,9 +1238,6 @@ static void virtual_vmentry(struct cpu_user_regs *reg= s) regs->rsp =3D get_vvmcs(v, GUEST_RSP); regs->rflags =3D get_vvmcs(v, GUEST_RFLAGS); =20 - /* updating host cr0 to sync TS bit */ - __vmwrite(HOST_CR0, v->arch.hvm.vmx.host_cr0); - /* Setup virtual ETP for L2 guest*/ if ( nestedhvm_paging_mode_hap(v) ) /* This will setup the initial np2m for the nested vCPU */ @@ -1468,9 +1465,6 @@ static void virtual_vmexit(struct cpu_user_regs *regs) /* VM exit clears all bits except bit 1 */ regs->rflags =3D X86_EFLAGS_MBS; =20 - /* updating host cr0 to sync TS bit */ - __vmwrite(HOST_CR0, v->arch.hvm.vmx.host_cr0); - if ( cpu_has_vmx_virtual_intr_delivery ) nvmx_update_apicv(v); =20 @@ -2458,19 +2452,14 @@ int nvmx_n2_vmexit_handler(struct cpu_user_regs *re= gs, __vmread(VM_EXIT_INTR_INFO, &intr_info); vector =3D intr_info & INTR_INFO_VECTOR_MASK; /* - * decided by L0 and L1 exception bitmap, if the vetor is set by - * both, L0 has priority on #PF and #NM, L1 has priority on others + * decided by L0 and L1 exception bitmap, if the vector is set by + * both, L0 has priority on #PF, L1 has priority on others */ if ( vector =3D=3D X86_EXC_PF ) { if ( paging_mode_hap(v->domain) ) nvcpu->nv_vmexit_pending =3D 1; } - else if ( vector =3D=3D X86_EXC_NM ) - { - if ( v->fpu_dirtied ) - nvcpu->nv_vmexit_pending =3D 1; - } else if ( (intr_info & valid_mask) =3D=3D valid_mask ) { exec_bitmap =3D get_vvmcs(v, EXCEPTION_BITMAP); diff --git a/xen/arch/x86/include/asm/hvm/vmx/vmcs.h b/xen/arch/x86/include= /asm/hvm/vmx/vmcs.h index 879ec10cefd0..88bded5190c9 100644 --- a/xen/arch/x86/include/asm/hvm/vmx/vmcs.h +++ b/xen/arch/x86/include/asm/hvm/vmx/vmcs.h @@ -149,8 +149,6 @@ struct vmx_vcpu { DECLARE_BITMAP(eoi_exit_bitmap, X86_IDT_VECTORS); struct pi_desc pi_desc; =20 - unsigned long host_cr0; - /* Do we need to tolerate a spurious EPT_MISCONFIG VM exit? */ bool ept_spurious_misconfig; =20 --=20 2.53.0 From nobody Sun Apr 5 16:31:36 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=citrix.com); dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=2; a=rsa-sha256; t=1774376424; cv=pass; d=zohomail.com; s=zohoarc; b=eHRK9F11BGx4WJFjz73k+OjMlmrVEaE0CbVhLg2cqRrL5+8FwQZqhTHygpm+sGnS21G5YPGosYPFZeb40V5hbw0begirSFCXHWTO3iBHiMfnWP4hSaIqe7+HcK5djMqUjWNiXD49gJvN6eGSguTRTqeS1i+EUdVBghgsKxsx7Vc= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774376424; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=lAZdBNMrrBRBDiGfwjpi8MoTXE7T10SPeC1xSqxiPIk=; b=GsogY1EEL5CqHoWKXe7/F7JD5E6QfHKtleXydqT/F/mWT9rEY+YQiT50Yeb4813jA80Su4N1Wm4kYhc3BG6zcCrWj7MFGA8sZ0oScwT7iI+xS/eCw2y169NwFunluw037N+89S4VzBdKA4+VfqFvWYrw9l2SkW8s56UGp2ACMes= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=citrix.com); dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1774376424704836.9824154516859; Tue, 24 Mar 2026 11:20:24 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1261251.1554353 (Exim 4.92) (envelope-from ) id 1w56MH-0005G4-Gj; Tue, 24 Mar 2026 18:20:05 +0000 Received: by outflank-mailman (output) from mailman id 1261251.1554353; Tue, 24 Mar 2026 18:20:05 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1w56MH-0005FT-DO; Tue, 24 Mar 2026 18:20:05 +0000 Received: by outflank-mailman (input) for mailman id 1261251; Tue, 24 Mar 2026 18:20:04 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1w56MF-0004y4-Vn for xen-devel@lists.xenproject.org; Tue, 24 Mar 2026 18:20:04 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1w56MF-00FIpx-Bp for xen-devel@lists.xenproject.org; Tue, 24 Mar 2026 19:20:03 +0100 Received: from [10.42.69.7] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 69c2d5b0-2eae-0a2a0a5409dd-0a2a4507818a-30 for ; Tue, 24 Mar 2026 19:20:03 +0100 Received: from [52.101.57.44] (helo=BN8PR05CU002.outbound.protection.outlook.com) by tlsNG-ef75cf.mxtls.expurgate.net with ESMTPS (eXpurgate 4.55.2) (envelope-from ) id 69c2d5d1-fd74-0a2a45070019-3465392cb817-3 for ; Tue, 24 Mar 2026 19:20:02 +0100 Received: from CH8PR03MB8274.namprd03.prod.outlook.com (2603:10b6:610:2ba::5) by CH4PR03MB7771.namprd03.prod.outlook.com (2603:10b6:610:237::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9723.25; Tue, 24 Mar 2026 18:20:00 +0000 Received: from CH8PR03MB8274.namprd03.prod.outlook.com ([fe80::ebe2:32c1:d2be:a096]) by CH8PR03MB8274.namprd03.prod.outlook.com ([fe80::ebe2:32c1:d2be:a096%5]) with mapi id 15.20.9745.019; Tue, 24 Mar 2026 18:19:59 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=citrix.com header.i="@citrix.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=puZWUU2MDoSheW/KpCTsqQQjF6r99zS+7B4K+NFaIBnT4RPaOhsSo6o4WmfHfWZDU3tX9KHWVlh40vBSHAX7G3FHCiUA+ctFnqrVxG65Y+MYBm7sNtx0uFq5B7pNVUgshBm3heawtRzNE8q+T1De9ft16a0dbEtj3bUuS0LBxG5xw6EJLCB+OUfpzrR4YdAcLL76OzcwBgDKp6KRZq+CJTxkdjZFzVYEM7Sg2a3lbus+ipLYLlMrGyCFm166o2HYPfHReeuVbFgYY4SJGSvBW91orbNxDbqBVmGbsxG2DkDmm6WbMuvb0YGtXFUu7EwHfBsDrAZLUkN16MA56EDeZA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=lAZdBNMrrBRBDiGfwjpi8MoTXE7T10SPeC1xSqxiPIk=; b=XWBTkAY1jcxwC+tc0JPNC3Fgdvl6iaa1NSDYZLCLRTDhGDOmHBCeR2ZUfQHWTjj5uGukIm4uyPxw2GXtxQnpSmTnPmSBfdMb+yiIyAf6aoAuYsymS1/RTRGXApxCVFsqrZB8km0Tm4hJUVldSo+ZU6XQ28kzCqxhWe/7HA4HCOxcBhrB3YJ8oK4LNMvb5k1pxTuVh+YHD2TtHlUTs2nw9iRpBcHRouOb/YngdqE0SKhhtyhjAw1Tc2TBHcNknIHX1Hu0J+ULHLjsBtgbggc1SBxUYSXl9fobxQXIqysqbQ0Aq2vDy7ft8gcq8dTAX3CWboEFRbqQ5ClvFoHa+k08Qg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=lAZdBNMrrBRBDiGfwjpi8MoTXE7T10SPeC1xSqxiPIk=; b=k3EvrkDtf2bKyPOxIkZmpd9SA0Fildamyhxn42L8qqSWdxK4zrln+DyuM3Ja3Ges685AA3ScJnmer5QsICAKz1/XDfWsfQCtZeSKv0Vk8uHki4fGZ2InS1/Bj8XP/3O7EuNr9XCoz9JFmAFKeNhuSFqH2MPMMS6j+3lLE9Tw/JU= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=citrix.com; From: Ross Lagerwall To: xen-devel@lists.xenproject.org Cc: Jan Beulich , Andrew Cooper , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= , Jason Andryuk , Ross Lagerwall Subject: [PATCH v2 4/9] x86/svm: Remove lazy FPU support Date: Tue, 24 Mar 2026 18:19:32 +0000 Message-ID: <20260324181937.2465574-5-ross.lagerwall@citrix.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260324181937.2465574-1-ross.lagerwall@citrix.com> References: <20260324181937.2465574-1-ross.lagerwall@citrix.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AS4P195CA0037.EURP195.PROD.OUTLOOK.COM (2603:10a6:20b:65a::26) To CH8PR03MB8274.namprd03.prod.outlook.com (2603:10b6:610:2ba::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH8PR03MB8274:EE_|CH4PR03MB7771:EE_ X-MS-Office365-Filtering-Correlation-Id: 8a32f7a4-2303-4ac3-34ee-08de89d1f595 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014|18002099003|22082099003|56012099003; X-Microsoft-Antispam-Message-Info: dbgTbAzYYFhiJhZFTv7qoMFG6pXWo47Vb/YZpLFq4DsgQwKFoI1/KxR3VQ+fet4lPbMkoVrJ+5sadXd7XKzQvhfbdsonV6apDbJ9LnRDZVF+68gyYOYQQg1a1DFOrbH711YZAp5I9Pv2d0gwD9C6LTvP+6YGhdNmn8GIeqPBw/o5ZF3rGenjGRqdlhA0Ukanz8DDUFnpztYCFZFgkGzr9qcP9IQZqgD1SnUU/OhlqZVldO5XTaYIu1uvLfmB6PXeLTXg7ptMG3RROwmxnEWvPlHZImLYpyXtyZB4+TbQ4s0R798TvjHLqV6y11x6fMV690tRMGCoIiYRczAO0HSRJ7dE6axDjfeW/uhSkb/ac5ldXobiXEu0lH4Kus4EEDmQaq9y8YJRQFR4+WMaGdrtCoFeriEJWgcv54eWTNQsfsip5N/aWPHp1Bk9rDUMTEebD1qkRYcsd6zeD2gxp8rbvyBRDh+zWXKL9h3kdrz1/9AnyTf5FJISRBeGYzBqWFCnqqvSnajpj2gzRPrRMcAwXhvY/CPmGWR6UID55ESBZnh8NzL+YI9avcc51pDR04oVOv1ij3WtNz4ySvrqFeeJRCYaTlt2GP5hghUljeMEHVLVKU1YxNyYHPuhahJahSmGeVX+0laaPFSiB8zcrrNBOcHSvru4GWNF3lwaIU+OD66/s9R+NOVN6WHi7H2nFX8Vc+99e5/py3mpptsOdgOAxRQxhhMj6fXWKjIOQRGcjEc= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH8PR03MB8274.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(18002099003)(22082099003)(56012099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?f/03EbPy11gXcP/MI/O/teh0Qb0NWB0STXvnXSk6wF7D8BxuUWAx92NcfT+7?= =?us-ascii?Q?8FwYIbHeUKzTkSbftrRTmvutQ+xkEAeSDKT+Qe5ZwARxujmdco0NrbkRmPAo?= =?us-ascii?Q?h1ZOU4+kae8J1cFVBZWgwRowxdNehBIeSSR/k/gCqV4oE5GykIZvOP5625PL?= =?us-ascii?Q?t7m1sIyBw8Gso1yfJF/LU6QsCmczen6qm1y2zJGGVobhnZi6KPZwKcuTOQxF?= =?us-ascii?Q?C2eAqo9Z8yQNO0xBfEl2fHfKL8BPtFL2VNiJDLsLtbEIYCvxzLrRca0oPLz9?= =?us-ascii?Q?IWoLCI6QaDv4Ug15F3bYE+nwkLZU463RxMhxcLqEdwSmYkkzaFq/jDlU6RFW?= =?us-ascii?Q?VolB25ws8RmyCg6CzBOe3uk4TccWtxzbcfQm7XIXwlzWQbDCQ0nr+xnOdZam?= =?us-ascii?Q?IQB3ecsB9qXWjg6pD4uOlTs748c0kCfIkaJR+Mq8lmZx5ZAY4OujZWbHM0Xn?= =?us-ascii?Q?JS4ljhnzd/1cMjUYJvMhqWTOroTsXgpZtTD9xEgWSz02fi4+NV+j47vq5L2z?= =?us-ascii?Q?dWucfRBXMLDehIocaFBVykAPPkDUeMbmLvuPtcGxdldyZEpHrUUOzdx9lUul?= =?us-ascii?Q?CPaSnViu1k/tpOgGtqyeByw8n45d2tvj1rLVQ8BB5F9mvluCn6fBs+flmbOq?= =?us-ascii?Q?1KBVNTeB4n+gGJxApL7XXwrgcecqk0SovRPxJ+waSx/cePyWa9vIdTB7gwwt?= =?us-ascii?Q?CMh+JBql6c2PvUhGNzcYbEHkScfhTKtdQn4Kk8P208VRTOorML0m4bmkZ2R9?= =?us-ascii?Q?PBsm0DOPBN47AVYpZK7TmSKYg3PNiBUyi15uZ8n+kr8r4L/pquFoPkiCFvnJ?= =?us-ascii?Q?rvx/tMul6jdjGxPAsYAQAhXfux4BB/IwUBbqbm5irEfXQELWQrdhx0vNieIh?= =?us-ascii?Q?nZpP9HXosUw6rA9DGytH21mMMi/HI/gjV7EkhGdADmBhv/1XZ/0pj1OMKHSP?= =?us-ascii?Q?QRm5Rf1bXGLHN2Eq0d2ST6daZajhPlWLBB4oxC9etf+5x9iUk8QO336FAEdO?= =?us-ascii?Q?TeN8DQYMX63zm484v6IAFLYNhuUKJkJovf8vlOSoboQ/fYENn+uij4IobOxy?= =?us-ascii?Q?RaKq2inRoBcnypcAVwkE6ps/EwK90HWI9WrpUK/FnZREs6TFBwg259HXTTq+?= =?us-ascii?Q?iu1TD6VUudaNug8I9SPk4n/PpyWd/emCljT+ISml5PusIUNE8jIx2apYpq6j?= =?us-ascii?Q?JuXs8+x/ozWOXmhMkNqlMWgajOI9CQGrLB2Y+3Ar8CB/U8Y+Ne8b+kOG2FKu?= =?us-ascii?Q?XlJkONc+OP0k8x2kP+oh19WPE+GC+fuTpV+ijsI/EFGOnulV1VZp6vs7nSz2?= =?us-ascii?Q?Dl2i+R+RLGhp3L0I7fwSEpADccw+D4yuPVi+iziVuAvrMLMV7Vf3sz8cvRaV?= =?us-ascii?Q?8cwUkh4/T3FskhlFycWngDr0dgOWAlalkngHoN1OhTd3r07tFOJzDpHSvAqH?= =?us-ascii?Q?DiZabC2CiULpIHclMyo9px5eXi09ujMzUjaXbDaIIClqUiJFh3Okz2JHgPAg?= =?us-ascii?Q?5aNNP7C6a5xAFLQLunsdcQL+jywwnIMxZfwhetvehtWt/3fihQb/XSEW2NH6?= =?us-ascii?Q?MfNcWiOVQVkVMrFfLTcoxAlun30ZYWs4swZNNQlf4sjuGTepCk0DNpfurToO?= =?us-ascii?Q?ilKzZX+CK2bAdzKU0Q1BpNGu8T8m3Wodi+IDea6ZgLyxkTkFjVhhhXOzbo7U?= =?us-ascii?Q?suteX+l+xh4tdGwLEC1gNKuPwzyYVGJvyFZG1dwvrPCp4qt/XQ0jxzwU8dKm?= =?us-ascii?Q?Trw3oQJBR1QFtWJUX6IIIh4Sn/XGOCs=3D?= X-OriginatorOrg: citrix.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8a32f7a4-2303-4ac3-34ee-08de89d1f595 X-MS-Exchange-CrossTenant-AuthSource: CH8PR03MB8274.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Mar 2026 18:19:59.6156 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 3MowXxwG4scbHrrL4TjdGLDd3ufRzwCtafyQOg6+7AZ30JysOJu3rAAo5FG0N9+fP221BRlwi2F66bMqkZciJ2o+FQQ2gkZxX5T7rpGrzwI= X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH4PR03MB7771 X-purgate-ID: tlsNG-ef75cf/1774376403-4FAA5303-0B8D85AC/0/0 X-purgate-type: clean X-purgate-size: 11655 X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1774376425931158500 Content-Type: text/plain; charset="utf-8" Remove lazy FPU support from the SVM code since fully_eager_fpu is now always true. No functional change intended. Signed-off-by: Ross Lagerwall Reviewed-by: Andrew Cooper --- Unchanged in v2 xen/arch/x86/hvm/svm/nestedsvm.c | 67 +------------------- xen/arch/x86/hvm/svm/svm.c | 81 +----------------------- xen/arch/x86/hvm/svm/vmcb.c | 4 +- xen/arch/x86/include/asm/hvm/svm-types.h | 6 -- 4 files changed, 4 insertions(+), 154 deletions(-) diff --git a/xen/arch/x86/hvm/svm/nestedsvm.c b/xen/arch/x86/hvm/svm/nested= svm.c index a63ec613465f..ef6fa5d23b67 100644 --- a/xen/arch/x86/hvm/svm/nestedsvm.c +++ b/xen/arch/x86/hvm/svm/nestedsvm.c @@ -165,58 +165,6 @@ int cf_check nsvm_vcpu_reset(struct vcpu *v) return 0; } =20 -static uint64_t nestedsvm_fpu_vmentry(uint64_t n1cr0, - struct vmcb_struct *vvmcb, - struct vmcb_struct *n1vmcb, struct vmcb_struct *n2vmcb) -{ - uint64_t vcr0; - - vcr0 =3D vvmcb->_cr0; - if ( !(n1cr0 & X86_CR0_TS) && (n1vmcb->_cr0 & X86_CR0_TS) ) - { - /* - * svm_fpu_leave() run while l1 guest was running. - * Sync FPU state with l2 guest. - */ - vcr0 |=3D X86_CR0_TS; - n2vmcb->_exception_intercepts |=3D (1U << X86_EXC_NM); - } - else if ( !(vcr0 & X86_CR0_TS) && (n2vmcb->_cr0 & X86_CR0_TS) ) - { - /* - * svm_fpu_enter() run while l1 guest was running. - * Sync FPU state with l2 guest. - */ - vcr0 &=3D ~X86_CR0_TS; - n2vmcb->_exception_intercepts &=3D ~(1U << X86_EXC_NM); - } - - return vcr0; -} - -static void nestedsvm_fpu_vmexit(struct vmcb_struct *n1vmcb, - struct vmcb_struct *n2vmcb, uint64_t n1cr0, uint64_t guest_cr0) -{ - if ( !(guest_cr0 & X86_CR0_TS) && (n2vmcb->_cr0 & X86_CR0_TS) ) - { - /* - * svm_fpu_leave() run while l2 guest was running. - * Sync FPU state with l1 guest. - */ - n1vmcb->_cr0 |=3D X86_CR0_TS; - n1vmcb->_exception_intercepts |=3D (1U << X86_EXC_NM); - } - else if ( !(n1cr0 & X86_CR0_TS) && (n1vmcb->_cr0 & X86_CR0_TS) ) - { - /* - * svm_fpu_enter() run while l2 guest was running. - * Sync FPU state with l1 guest. - */ - n1vmcb->_cr0 &=3D ~X86_CR0_TS; - n1vmcb->_exception_intercepts &=3D ~(1U << X86_EXC_NM); - } -} - static int nsvm_vcpu_hostsave(struct vcpu *v, unsigned int inst_len) { struct nestedsvm *svm =3D &vcpu_nestedsvm(v); @@ -246,7 +194,6 @@ static int nsvm_vcpu_hostsave(struct vcpu *v, unsigned = int inst_len) static int nsvm_vcpu_hostrestore(struct vcpu *v, struct cpu_user_regs *reg= s) { struct nestedvcpu *nv =3D &vcpu_nestedhvm(v); - struct nestedsvm *svm =3D &vcpu_nestedsvm(v); struct vmcb_struct *n1vmcb, *n2vmcb; int rc; =20 @@ -281,8 +228,6 @@ static int nsvm_vcpu_hostrestore(struct vcpu *v, struct= cpu_user_regs *regs) gdprintk(XENLOG_ERR, "hvm_set_cr4 failed, rc: %u\n", rc); =20 /* CR0 */ - nestedsvm_fpu_vmexit(n1vmcb, n2vmcb, - svm->ns_cr0, v->arch.hvm.guest_cr[0]); v->arch.hvm.guest_cr[0] =3D n1vmcb->_cr0 | X86_CR0_PE; n1vmcb->rflags &=3D ~X86_EFLAGS_VM; rc =3D hvm_set_cr0(n1vmcb->_cr0 | X86_CR0_PE, true); @@ -290,7 +235,6 @@ static int nsvm_vcpu_hostrestore(struct vcpu *v, struct= cpu_user_regs *regs) hvm_inject_hw_exception(X86_EXC_GP, 0); if ( rc !=3D X86EMUL_OKAY ) gdprintk(XENLOG_ERR, "hvm_set_cr0 failed, rc: %u\n", rc); - svm->ns_cr0 =3D v->arch.hvm.guest_cr[0]; =20 /* CR2 */ v->arch.hvm.guest_cr[2] =3D n1vmcb->_cr2; @@ -418,7 +362,6 @@ static int nsvm_vmcb_prepare4vmrun(struct vcpu *v, stru= ct cpu_user_regs *regs) struct vmcb_struct *ns_vmcb, *n1vmcb, *n2vmcb; vmcbcleanbits_t clean =3D {}; int rc; - uint64_t cr0; =20 ns_vmcb =3D nv->nv_vvmcx; n1vmcb =3D nv->nv_n1vmcx; @@ -452,7 +395,6 @@ static int nsvm_vmcb_prepare4vmrun(struct vcpu *v, stru= ct cpu_user_regs *regs) * safed here. * The overhead comes from (ordered from highest to lowest): * - svm_ctxt_switch_to (CPU context switching) - * - svm_fpu_enter, svm_fpu_leave (lazy FPU switching) * - emulated CLGI (clears VINTR intercept) * - host clears VINTR intercept * Test results show that the overhead is high enough that the @@ -551,10 +493,8 @@ static int nsvm_vmcb_prepare4vmrun(struct vcpu *v, str= uct cpu_user_regs *regs) gdprintk(XENLOG_ERR, "hvm_set_cr4 failed, rc: %u\n", rc); =20 /* CR0 */ - svm->ns_cr0 =3D v->arch.hvm.guest_cr[0]; - cr0 =3D nestedsvm_fpu_vmentry(svm->ns_cr0, ns_vmcb, n1vmcb, n2vmcb); v->arch.hvm.guest_cr[0] =3D ns_vmcb->_cr0; - rc =3D hvm_set_cr0(cr0, true); + rc =3D hvm_set_cr0(ns_vmcb->_cr0, true); if ( rc =3D=3D X86EMUL_EXCEPTION ) hvm_inject_hw_exception(X86_EXC_GP, 0); if ( rc !=3D X86EMUL_OKAY ) @@ -1305,11 +1245,6 @@ nestedsvm_check_intercepts(struct vcpu *v, struct cp= u_user_regs *regs, case VMEXIT_INTR: case VMEXIT_NMI: return NESTEDHVM_VMEXIT_HOST; - case VMEXIT_EXCEPTION_NM: - /* Host must handle lazy fpu context switching first. - * Then inject the VMEXIT if L1 guest intercepts this. - */ - return NESTEDHVM_VMEXIT_HOST; =20 case VMEXIT_NPF: if ( nestedhvm_paging_mode_hap(v) ) diff --git a/xen/arch/x86/hvm/svm/svm.c b/xen/arch/x86/hvm/svm/svm.c index 243c41fb13a8..2546705d245c 100644 --- a/xen/arch/x86/hvm/svm/svm.c +++ b/xen/arch/x86/hvm/svm/svm.c @@ -104,38 +104,6 @@ static void cf_check svm_cpu_down(void) write_efer(read_efer() & ~EFER_SVME); } =20 -static void svm_fpu_enter(struct vcpu *v) -{ - struct vmcb_struct *n1vmcb =3D vcpu_nestedhvm(v).nv_n1vmcx; - - vcpu_restore_fpu_lazy(v); - vmcb_set_exception_intercepts( - n1vmcb, - vmcb_get_exception_intercepts(n1vmcb) & ~(1U << X86_EXC_NM)); -} - -static void cf_check svm_fpu_leave(struct vcpu *v) -{ - struct vmcb_struct *n1vmcb =3D vcpu_nestedhvm(v).nv_n1vmcx; - - ASSERT(!v->fpu_dirtied); - ASSERT(read_cr0() & X86_CR0_TS); - - /* - * If the guest does not have TS enabled then we must cause and handle= an - * exception on first use of the FPU. If the guest *does* have TS enab= led - * then this is not necessary: no FPU activity can occur until the gue= st - * clears CR0.TS, and we will initialise the FPU when that happens. - */ - if ( !(v->arch.hvm.guest_cr[0] & X86_CR0_TS) ) - { - vmcb_set_exception_intercepts( - n1vmcb, - vmcb_get_exception_intercepts(n1vmcb) | (1U << X86_EXC_NM)); - vmcb_set_cr0(n1vmcb, vmcb_get_cr0(n1vmcb) | X86_CR0_TS); - } -} - static void cf_check svm_update_guest_cr( struct vcpu *v, unsigned int cr, unsigned int flags) { @@ -145,20 +113,6 @@ static void cf_check svm_update_guest_cr( switch ( cr ) { case 0: - { - unsigned long hw_cr0_mask =3D 0; - - if ( !(v->arch.hvm.guest_cr[0] & X86_CR0_TS) ) - { - if ( v !=3D current ) - { - if ( !v->arch.fully_eager_fpu ) - hw_cr0_mask |=3D X86_CR0_TS; - } - else if ( vmcb_get_cr0(vmcb) & X86_CR0_TS ) - svm_fpu_enter(v); - } - if ( paging_mode_hap(v->domain) ) { uint32_t intercepts =3D vmcb_get_cr_intercepts(vmcb); @@ -169,12 +123,12 @@ static void cf_check svm_update_guest_cr( vmcb_set_cr_intercepts(vmcb, intercepts | CR_INTERCEPT_CR3_= WRITE); } =20 - value =3D v->arch.hvm.guest_cr[0] | hw_cr0_mask; + value =3D v->arch.hvm.guest_cr[0]; if ( paging_mode_shadow(v->domain) ) value |=3D X86_CR0_PG | X86_CR0_WP; vmcb_set_cr0(vmcb, value); break; - } + case 2: vmcb_set_cr2(vmcb, v->arch.hvm.guest_cr[2]); break; @@ -909,9 +863,6 @@ static void cf_check svm_ctxt_switch_from(struct vcpu *= v) if ( unlikely((read_efer() & EFER_SVME) =3D=3D 0) ) return; =20 - if ( !v->arch.fully_eager_fpu ) - svm_fpu_leave(v); - svm_save_dr(v); svm_tsc_ratio_save(v); =20 @@ -1678,28 +1629,6 @@ static void svm_do_nested_pgfault(struct vcpu *v, domain_crash(v->domain); } =20 -static void cf_check svm_fpu_dirty_intercept(void) -{ - struct vcpu *v =3D current; - struct vmcb_struct *vmcb =3D v->arch.hvm.svm.vmcb; - struct vmcb_struct *n1vmcb =3D vcpu_nestedhvm(v).nv_n1vmcx; - - svm_fpu_enter(v); - - if ( vmcb !=3D n1vmcb ) - { - /* Check if l1 guest must make FPU ready for the l2 guest */ - if ( v->arch.hvm.guest_cr[0] & X86_CR0_TS ) - hvm_inject_hw_exception(X86_EXC_NM, X86_EVENT_NO_EC); - else - vmcb_set_cr0(n1vmcb, vmcb_get_cr0(n1vmcb) & ~X86_CR0_TS); - return; - } - - if ( !(v->arch.hvm.guest_cr[0] & X86_CR0_TS) ) - vmcb_set_cr0(vmcb, vmcb_get_cr0(vmcb) & ~X86_CR0_TS); -} - static void svm_vmexit_do_cr_access( struct vmcb_struct *vmcb, struct cpu_user_regs *regs) { @@ -2459,7 +2388,6 @@ static struct hvm_function_table __initdata_cf_clobbe= r svm_function_table =3D { .update_guest_cr =3D svm_update_guest_cr, .update_guest_efer =3D svm_update_guest_efer, .cpuid_policy_changed =3D svm_cpuid_policy_changed, - .fpu_leave =3D svm_fpu_leave, .set_guest_pat =3D svm_set_guest_pat, .get_guest_pat =3D svm_get_guest_pat, .set_tsc_offset =3D svm_set_tsc_offset, @@ -2469,7 +2397,6 @@ static struct hvm_function_table __initdata_cf_clobbe= r svm_function_table =3D { .get_pending_event =3D svm_get_pending_event, .invlpg =3D svm_invlpg, .wbinvd_intercept =3D svm_wbinvd_intercept, - .fpu_dirty_intercept =3D svm_fpu_dirty_intercept, .msr_read_intercept =3D svm_msr_read_intercept, .msr_write_intercept =3D svm_msr_write_intercept, #ifdef CONFIG_VM_EVENT @@ -2783,10 +2710,6 @@ void asmlinkage svm_vmexit_handler(void) } break; =20 - case VMEXIT_EXCEPTION_NM: - svm_fpu_dirty_intercept(); - break; - case VMEXIT_EXCEPTION_PF: { unsigned long va =3D vmcb->ei.exc.cr2; diff --git a/xen/arch/x86/hvm/svm/vmcb.c b/xen/arch/x86/hvm/svm/vmcb.c index e583ef8548c7..5ed7123d9a69 100644 --- a/xen/arch/x86/hvm/svm/vmcb.c +++ b/xen/arch/x86/hvm/svm/vmcb.c @@ -138,9 +138,7 @@ static int construct_vmcb(struct vcpu *v) =20 paging_update_paging_modes(v); =20 - vmcb->_exception_intercepts =3D - HVM_TRAP_MASK | - (v->arch.fully_eager_fpu ? 0 : (1U << X86_EXC_NM)); + vmcb->_exception_intercepts =3D HVM_TRAP_MASK; =20 if ( paging_mode_hap(v->domain) ) { diff --git a/xen/arch/x86/include/asm/hvm/svm-types.h b/xen/arch/x86/includ= e/asm/hvm/svm-types.h index 051b235d8f69..3ede62cade80 100644 --- a/xen/arch/x86/include/asm/hvm/svm-types.h +++ b/xen/arch/x86/include/asm/hvm/svm-types.h @@ -65,12 +65,6 @@ struct nestedsvm { /* Shadow io permission map */ unsigned long *ns_iomap; =20 - /* - * Cached guest_cr[0] of l1 guest while l2 guest runs. Needed to han= dle - * FPU context switching. - */ - uint64_t ns_cr0; - /* * Cache guest cr3/host cr3 the guest sets up for the l2 guest. * Used by Shadow-on-Shadow and Nested-on-Nested. --=20 2.53.0 From nobody Sun Apr 5 16:31:36 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=citrix.com); dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=2; a=rsa-sha256; t=1774376421; cv=pass; d=zohomail.com; s=zohoarc; b=Wu15Ch+Z3nzcnpvnW9We3oJM6XkISKPKePOIwb4WXPHVZFIKIXDDIdLhsJxG+bzAwdI3co+qBbdy5kuI1YbW7DUGAStz3DXoLbwo/lyXBw0IniKW03vpqUyrY3ciL7Mvi1ZvpE0JcQwIlku+ZlP95NEcMSzEa4NEd8OULCT5vLM= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774376421; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=ENHvXBDFYPK8S39Fvdlcd7u1cuBTdaLhm3Un5HN/3RA=; b=Sk/D3HW6UD5AM131DFD8j3pD8bE602nyCQhZSLJyDQvhUpzBomUUyx1OIDOaoHvecM3SDzhuMm0taQ8R1dk+QHiXvZ1bJTpcqvuo9lL3FyD/0uX1IEAE74Y9EhAIXvZLn2oIBrDY0hukjY3FxWWayNgo0GB3uTzR3oukKBTt/yE= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=citrix.com); dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1774376421979203.84432277769724; Tue, 24 Mar 2026 11:20:21 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1261252.1554362 (Exim 4.92) (envelope-from ) id 1w56MJ-0005pB-Qb; Tue, 24 Mar 2026 18:20:07 +0000 Received: by outflank-mailman (output) from mailman id 1261252.1554362; Tue, 24 Mar 2026 18:20:07 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1w56MJ-0005oo-Lf; Tue, 24 Mar 2026 18:20:07 +0000 Received: by outflank-mailman (input) for mailman id 1261252; Tue, 24 Mar 2026 18:20:07 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1w56MJ-0005hb-4T for xen-devel@lists.xenproject.org; Tue, 24 Mar 2026 18:20:07 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1w56MI-00FIpx-GR for xen-devel@lists.xenproject.org; Tue, 24 Mar 2026 19:20:06 +0100 Received: from [10.42.69.1] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 69c2d5d4-2eae-0a2a0a5409dd-0a2a45019638-6 for ; Tue, 24 Mar 2026 19:20:06 +0100 Received: from [52.101.52.43] (helo=BL2PR02CU003.outbound.protection.outlook.com) by tlsNG-d62444.mxtls.expurgate.net with ESMTPS (eXpurgate 4.55.2) (envelope-from ) id 69c2d5d5-6400-0a2a45010019-3465342b1f92-3 for ; Tue, 24 Mar 2026 19:20:06 +0100 Received: from CH8PR03MB8274.namprd03.prod.outlook.com (2603:10b6:610:2ba::5) by CH4PR03MB7771.namprd03.prod.outlook.com (2603:10b6:610:237::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9723.25; Tue, 24 Mar 2026 18:20:03 +0000 Received: from CH8PR03MB8274.namprd03.prod.outlook.com ([fe80::ebe2:32c1:d2be:a096]) by CH8PR03MB8274.namprd03.prod.outlook.com ([fe80::ebe2:32c1:d2be:a096%5]) with mapi id 15.20.9745.019; Tue, 24 Mar 2026 18:20:03 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=citrix.com header.i="@citrix.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=uAsBftCxGU3IJZFYF+v/eo6ygGeTCyObytcq8yJe1L4asFu4tvR25z3+b0vrB49KZkW6JJg6zWrImsTYbvDEiXvMkXQ2hZ5Cw/DiB6pIjw7Jr/wRsbJ66/hbmtajoJzaMHNQOHwgEZHsXPoHHjSNPEOvxN2pXgvtoKdq4z6HGHZAzdHSTMMmDxNlyp1q4eQW2gDaW3AN3DySiFfp19iZGXcEiYotL+3BN6KyiQ2NHnO4kGnmsH6Pe4n2GtUSKt129sYVUEEvBCjdc6EJYtviYWQJVseY3S5REYu8jD2tO0TBVy64MkrzCo5XDMQ8xRcVRQZkOX2We5K7+T0yzqpVBg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=ENHvXBDFYPK8S39Fvdlcd7u1cuBTdaLhm3Un5HN/3RA=; b=NtHKR8hesoAB+FxiLKsM7ot1wLXmzuIcbkoQG6OePfkJ5sGKD29Z6lSeJy1qkp5rJKOtol7nNrvdAi87TiNO780eFVHFZiILa47oHtNtbMH6JcfSw/Xht+SAwQ6arcCnxddSyoaGWqMiv/pBAiSVbagGyi+O7gtrsH2BgYAiT5KWq/RqkTRVUr7TS1d7JDiBZ1srE2mTiyyvGiaC/emqckb4ltXld+XyTJmMYEhYOBTRzfKHMu3rbHuf4RhPr6g1e6gkwZV4rMQExbUT/Ue/JzDa/PoOtp8APfGv2OVBooPyyrtJsr4sYGFvwxCG5T7pn8oKRtBSYEJCuzEyWoyFmA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ENHvXBDFYPK8S39Fvdlcd7u1cuBTdaLhm3Un5HN/3RA=; b=aPzWhPX5/5Ar7naE08Zh5TAKZM76Oc6RlO0URCR1fAjAWD/Fr10BoGsVYVtgdCVWuJvyrSdZxbA1uNI6SPYMQz4qklk/9nr42W5w/DpGTNDF5aRxSar/+pg/xjTlBkOvfNC6+QHT/zgBOzi4uRE5R/2kLAeoSarBK80gCHudnJw= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=citrix.com; From: Ross Lagerwall To: xen-devel@lists.xenproject.org Cc: Jan Beulich , Andrew Cooper , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= , Ross Lagerwall Subject: [PATCH v2 5/9] x86/traps: Remove lazy FPU support Date: Tue, 24 Mar 2026 18:19:33 +0000 Message-ID: <20260324181937.2465574-6-ross.lagerwall@citrix.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260324181937.2465574-1-ross.lagerwall@citrix.com> References: <20260324181937.2465574-1-ross.lagerwall@citrix.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AS4P195CA0032.EURP195.PROD.OUTLOOK.COM (2603:10a6:20b:65a::6) To CH8PR03MB8274.namprd03.prod.outlook.com (2603:10b6:610:2ba::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH8PR03MB8274:EE_|CH4PR03MB7771:EE_ X-MS-Office365-Filtering-Correlation-Id: 2135e678-27e3-43d6-9137-08de89d1f7c4 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014|18002099003|22082099003|56012099003; X-Microsoft-Antispam-Message-Info: 3IL4VuXg8wEiicp5EaCgVBrIY/3DBIsjpw7d+WQy3YKRy41BRGeavaO36dHPWpt862ensZUNzanG9vef51iUuoNU/Cvde+7rSCC3nOztFu7y4c4e4JvtXvlF/maYrHBS7BDOBZCtaCc6+rnm2FMMu/urhjELn2Ijha/3jGLt+4mFZOU9yKIW9b/zTQjF+p2PyOMVJRmrd48HFpGD4NNZTINgzoEqJbCAMRqPTHA/sZR+BeGo41iePmy7hdqYcfs1p8K+rut0lfSV6ZkImycnzR03gVmdYRTMyNOpUcl3Vko7AHgCZTteq7y8bHhbE0I6+yfQ+VCGJ2Tjswv/vcXw0VdAf3opY57r/1zC19ihJFHMQR3rJSLfS34YHLa9xpa96feeUTPbZ40wRNhECppO6cgE1WN2ylj68q3iTtuP6HYEDz7aDAzN1TqA5OWvsR4BcQawHtHe4h4TvK6TzhoQYZ+TrNld7YSfpqiewuT7kSzbI79H/9tHFtIPO5lBlErE/WRlHI3Vb2A+70RN41qm+2ZY+BPyPx19elZXhyt9mhP2lltduo+irwhUq1B9rP1m+v1ji+8eCIp3Kcqa2oHIeSxUf0zndKeDFwZfk2Ff7tGcmccsLKEnVuiNwlLOxwf7NLbuTAqESO/g+DIfN1r2sM4u5NQx5M4fRNHnEKCYE1/rZdrps5oYEl29tu7mZuv2iicE7vHQIIis3XjY/p/yfOlfQ3kKEqiAUn9Orr+LfdY= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH8PR03MB8274.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(18002099003)(22082099003)(56012099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?XE8R+WfqR2KA/XD4I2aII+6ZPi8cE6wTxdrcsuIXXf0zDNkFNGzikx1KbNxj?= =?us-ascii?Q?Of5sd9XPcA5qP0Ya0fbjey6WTMYAjJr9px57rKZE5qTybwQQ3kRcz1elr2o4?= =?us-ascii?Q?bH4aor6fH/mPkJGRJP3kJHZxXpKFydW7Ifc49AOKnNBIKYlZJRg5ZUmkob6l?= =?us-ascii?Q?lgTvx0zKuFJRP+BzAbsbXnTB46C3NSLjIP5QwSywI6LKh90p+Kx8omb0Ncuk?= =?us-ascii?Q?f/TFJM0S8JxpRE1MaXGUMc46WHvZuWJV2IKSFGSdQD4Tq/aw9/VKkKYMn6cg?= =?us-ascii?Q?qBZ6t8GQJHRYGR9Jcau+4m4dO2A+EGqLSkN4yypJCaIQ/DAuIVIGkLZ6eK46?= =?us-ascii?Q?EBNkKCX7EOsNjkr1n1aeZCIENk5600YzKnkc2za6rECykzslZKf4D8a/FBIV?= =?us-ascii?Q?g0XHyvvI1IIoIOpYyvnOanzj4Qjx+aBTVU/bGv8v9i+6z2bS/O6cGZ0kaHjY?= =?us-ascii?Q?zqCxfZaM3YQIfVQ9BUkvqqAp2XI/CmI11cUChoOsxBiGP0UgKWcbbIGug3So?= =?us-ascii?Q?Td//Fa5Y+iHtx2saUFI6Ow9+ni7vReCGccJVpHevT5IQt/vELGUZRa+/ry4G?= =?us-ascii?Q?yClXrK+u2f/J/eclGiDZnyullGfiISGUk+h3lzFPwvH5jd72b7R2cb8kephB?= =?us-ascii?Q?fETNdjH/rfXzlj5JZt7FQhgbFpScfXNdH7zR9eHSGHr8OX9W00QbzQbmtIEA?= =?us-ascii?Q?NpUghGw1/urQR2BySUBdG69DgPsGDPsK1rV7oQtSsYLbcBEqjDGUWDO8iJr0?= =?us-ascii?Q?rdjo8TvFw1430tSk205I9WVvFvIVTRUkQZQEDowy7U/3czxyLnSvYIjR9NrF?= =?us-ascii?Q?HrTsSa94GR+UDowtpJmyPJwZ6gDzLCjXR451v1Q/jcXbMHT9vX1lTnavncJ4?= =?us-ascii?Q?B2VC4ZPvXaj5vIg80luFEkDH/9LVOWLi4sRxkPVT/CmpdWrunj+Wl//CsBOA?= =?us-ascii?Q?h6tsHHoPyG/y83J6Bid4KjvlrUfEkidRuAqTErNpbKoTZDUA6XB/n2SUA6GL?= =?us-ascii?Q?tPlniS0EzcyurPY7SYWgSR/o7bxt+adE+ayT/8DHuhp8C+21dKeNpwhcxe6e?= =?us-ascii?Q?gex9XiEj0S1LlmaTo+7InE0XADm3UCSOjcfvy5TQVeaAibddsiGevumJrOcH?= =?us-ascii?Q?lNNfwbXVvADVTLrQxSUHncvdreE/SufUPm7LJsiU08BIEefAapacIid0VL9q?= =?us-ascii?Q?jZwHVvz3Moron/xPZpq7qpxprBlhWCy7g53y9o4ipn6qgHJrfNDT2iRST+6e?= =?us-ascii?Q?kxdOAOQnpEHVCwnVXxQuD1zopPGEZJGj+zEl03DAjV/R4gSDmcRSa5n1BFyk?= =?us-ascii?Q?nVYczOugdiD+F54ix57HoC6dTA8HSmK0l2bkPS5R5V1AwCLSDNPA85Tv8Ys5?= =?us-ascii?Q?n7d4/zfH8uROVBrZIQBmL2dhCsCur7d7HAWKinGb+w5MOtrNBeGZHs7gNdj6?= =?us-ascii?Q?4d0a0ltSwmFhk6tr+Tdhe5atn1LKNqeL5nyZUNn9PZ+NK0cnwpQdKsfbQC1w?= =?us-ascii?Q?x12BG7DdinkoJs5Jc+HoZTLbuPqWqcN9s1xTSPgHCNWl6XiOhKhaYJI58qma?= =?us-ascii?Q?LFiiwDTVoIgWswVV5UwxFv8DZAQLyGBlrScReuHm8NlRfkyH9Z+Dc0G88W+k?= =?us-ascii?Q?H0U64qBhMlwXlZoY+yKDz+Sa4QE332hP0DZd4s6LzLaxGwkimlS6UUMc4hS0?= =?us-ascii?Q?oslclTil+4iy+b80CL4Yrmj2B87tqSVSmqxUkUJFsfdCmX5Uv2NGPLfGnqo7?= =?us-ascii?Q?JwjKnsw58cWR7jputWAiNBlvPmsysHs=3D?= X-OriginatorOrg: citrix.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2135e678-27e3-43d6-9137-08de89d1f7c4 X-MS-Exchange-CrossTenant-AuthSource: CH8PR03MB8274.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Mar 2026 18:20:03.2706 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 0UyYFVj9JmAhjM8tcteavuiZrGNhjgz9RABQpt3GL0kpa8LNBqhznM9YnGqRvZkrUy4+4ozWeJ5U+4aBAg//VaMcCFrb7VawMn3j5d2BBmU= X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH4PR03MB7771 X-purgate-ID: tlsNG-d62444/1774376406-8EEE2DF3-935198DF/0/0 X-purgate-type: clean X-purgate-size: 3505 X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1774376423239154100 Content-Type: text/plain; charset="utf-8" From: Wei Liu Remove lazy FPU support from the #NM exception handler used by PV guests since fully_eager_fpu is now always true. Signed-off-by: Wei Liu Signed-off-by: Ross Lagerwall Reviewed-by: Andrew Cooper --- In v2: * Tweaked the commit message * Crash the guest rather than host if the guest register is in an unexpected state. * Reword a comment * Allow tail-call optimization xen/arch/x86/i387.c | 24 ------------------------ xen/arch/x86/include/asm/i387.h | 1 - xen/arch/x86/pv/misc-hypercalls.c | 3 +-- xen/arch/x86/traps.c | 20 +++++++++++++------- 4 files changed, 14 insertions(+), 34 deletions(-) diff --git a/xen/arch/x86/i387.c b/xen/arch/x86/i387.c index 954ba3b1799b..7da731865f73 100644 --- a/xen/arch/x86/i387.c +++ b/xen/arch/x86/i387.c @@ -234,30 +234,6 @@ void vcpu_restore_fpu_nonlazy(struct vcpu *v, bool nee= d_stts) stts(); } =20 -/*=20 - * Restore FPU state when #NM is triggered. - */ -void vcpu_restore_fpu_lazy(struct vcpu *v) -{ - ASSERT(!is_idle_vcpu(v)); - - /* Avoid recursion. */ - clts(); - - if ( v->fpu_dirtied ) - return; - - ASSERT(!v->arch.fully_eager_fpu); - - if ( cpu_has_xsave ) - fpu_xrstor(v, XSTATE_LAZY); - else - fpu_fxrstor(v); - - v->fpu_initialised =3D 1; - v->fpu_dirtied =3D 1; -} - /*=20 * On each context switch, save the necessary FPU info of VCPU being switc= h=20 * out. It dispatches saving operation based on CPU's capability. diff --git a/xen/arch/x86/include/asm/i387.h b/xen/arch/x86/include/asm/i38= 7.h index 652d7ad2deb6..da0c7e945f95 100644 --- a/xen/arch/x86/include/asm/i387.h +++ b/xen/arch/x86/include/asm/i387.h @@ -28,7 +28,6 @@ struct ix87_env { }; =20 void vcpu_restore_fpu_nonlazy(struct vcpu *v, bool need_stts); -void vcpu_restore_fpu_lazy(struct vcpu *v); void vcpu_save_fpu(struct vcpu *v); void save_fpu_enable(void); int vcpu_init_fpu(struct vcpu *v); diff --git a/xen/arch/x86/pv/misc-hypercalls.c b/xen/arch/x86/pv/misc-hyper= calls.c index 7e915d86b724..34a0717540a9 100644 --- a/xen/arch/x86/pv/misc-hypercalls.c +++ b/xen/arch/x86/pv/misc-hypercalls.c @@ -42,8 +42,7 @@ long do_fpu_taskswitch(int set) else { v->arch.pv.ctrlreg[0] &=3D ~X86_CR0_TS; - if ( v->fpu_dirtied ) - clts(); + clts(); } =20 return 0; diff --git a/xen/arch/x86/traps.c b/xen/arch/x86/traps.c index b6b119769722..0565c576ecd6 100644 --- a/xen/arch/x86/traps.c +++ b/xen/arch/x86/traps.c @@ -2045,15 +2045,21 @@ void asmlinkage do_device_not_available(struct cpu_= user_regs *regs) } =20 #ifdef CONFIG_PV - vcpu_restore_fpu_lazy(curr); - - if ( curr->arch.pv.ctrlreg[0] & X86_CR0_TS ) + if ( !(curr->arch.pv.ctrlreg[0] & X86_CR0_TS) ) { - pv_inject_hw_exception(X86_EXC_NM, X86_EVENT_NO_EC); - curr->arch.pv.ctrlreg[0] &=3D ~X86_CR0_TS; + ASSERT_UNREACHABLE(); + domain_crash(curr->domain); + return; } - else - TRACE_TIME(TRC_PV_MATH_STATE_RESTORE); + + /* + * For better or worse, Xen's ABI with PV guests always clears TS on a= n #NM + * exception. Classic-xen Linux depends on this. + */ + clts(); + curr->arch.pv.ctrlreg[0] &=3D ~X86_CR0_TS; + + pv_inject_hw_exception(X86_EXC_NM, X86_EVENT_NO_EC); #else ASSERT_UNREACHABLE(); #endif --=20 2.53.0 From nobody Sun Apr 5 16:31:36 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=citrix.com); dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=2; a=rsa-sha256; t=1774376437; cv=pass; d=zohomail.com; s=zohoarc; b=drsTqq+IecnBhTuAE6WkC4YMyCZdsxDjYPNtkVxBPnEia0H0Y8eEVJ9fRlsuW6V+S5NPMSNHx7B/2cHzkyTFD52Cm3wk1nXHsEenYwPfBMHRNX9NM46miRBuPnRDX0zrq06X6/5qdxs+mKAr4AZSw9Lxyc07SxRCkbPO7PiYg6o= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774376437; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=X62vJSapLR1Eexll3f19ciTMiElOQaxc2nc9kog+l+E=; b=fZ4SHqXHeoRYZAmk/aWAVhnmdTEx1qT1WGEIw8VwOogantqXv4DR+75sH1i1ibuj9blaiAFZCQNAaezQiITklyVLqm51bLA3bKxUrxzSzP0Ud0fOlIu2rVSQJyLZaXeFC+uA28y/g8rv9kDy7/ZUR7IT7l5XP38nVs49uomR4jc= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=citrix.com); dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 17743764374071018.8268604994709; Tue, 24 Mar 2026 11:20:37 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1261257.1554371 (Exim 4.92) (envelope-from ) id 1w56MO-0006Kf-5J; Tue, 24 Mar 2026 18:20:12 +0000 Received: by outflank-mailman (output) from mailman id 1261257.1554371; Tue, 24 Mar 2026 18:20:12 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1w56MO-0006KP-06; Tue, 24 Mar 2026 18:20:12 +0000 Received: by outflank-mailman (input) for mailman id 1261257; Tue, 24 Mar 2026 18:20:11 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1w56MM-0006I1-Uk for xen-devel@lists.xenproject.org; Tue, 24 Mar 2026 18:20:11 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1w56MM-00DbE3-Ae for xen-devel@lists.xenproject.org; Tue, 24 Mar 2026 19:20:10 +0100 Received: from [10.42.69.11] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 69c2d5cc-e002-0a2a0a5209dd-0a2a450b9002-28 for ; Tue, 24 Mar 2026 19:20:10 +0100 Received: from [52.101.57.18] (helo=BN8PR05CU002.outbound.protection.outlook.com) by tlsNG-42698a.mxtls.expurgate.net with ESMTPS (eXpurgate 4.55.2) (envelope-from ) id 69c2d5d9-ef63-0a2a450b0019-346539127a17-3 for ; Tue, 24 Mar 2026 19:20:10 +0100 Received: from CH8PR03MB8274.namprd03.prod.outlook.com (2603:10b6:610:2ba::5) by CH4PR03MB7771.namprd03.prod.outlook.com (2603:10b6:610:237::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9723.25; Tue, 24 Mar 2026 18:20:07 +0000 Received: from CH8PR03MB8274.namprd03.prod.outlook.com ([fe80::ebe2:32c1:d2be:a096]) by CH8PR03MB8274.namprd03.prod.outlook.com ([fe80::ebe2:32c1:d2be:a096%5]) with mapi id 15.20.9745.019; Tue, 24 Mar 2026 18:20:07 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=citrix.com header.i="@citrix.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=BAZ6xyLBtsa7GULaAad4+dehTOVa4o90GKBDTqA7vGf9/G7TR+XMfTcCNeOgD6uYSMS8fS9cFlVOlygeBGF7U5lTWh93A/KAskaKiztqg53BzDatbPjyGsbaQfcQmI7YtuAUrx5O1JLdS6bq/yZbnpcdirLVkDpeuJ7RL8Fyy5GAGXQCgf/UhF8B9NkdptcxAI2WJ+WbR5x4du7jzytnLaIw2DMh4xH101cdiLMrtj0VsEtvZG2ONFz0r1Gqr9xyAsBibitcg59BZryKTuTbXf6OBkVnh5hOmvPJYo7wu1qQffPs+S5QNRh+xZiZGfVTgE4v2sT4RoipqGqwuEssXg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=X62vJSapLR1Eexll3f19ciTMiElOQaxc2nc9kog+l+E=; b=AdakxBCKaUiAr86EkSsF9pCLAMKnOv8fJFcKtUCSG1KMqIziGSaCRAG3RZSXZHMEW7oY27zFQVDoyUlLEQ8pr9NvIGhO476RglIWbWKb43dfmRl1kl0jsZ6zLhnZFljzPmxc8DGysF1VW2IqXg/rjngltRREq9y0LiTdRUz0eMeii5985PKN/bOdf3qK1xOUZYA+QpOo4pAQ0piypJAXPpSnXCHCiW9LMpMGRqucGLJ+A1HPbDyhIDYYYZVnOW7ca0CamgaeV17mYaLOFUbNc6e50Yh6tCdXGmXBVCgjrUlgibNDxYRsOuZ+WhgQDvV9qX+E3zszwznYW2RFwClaSw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=X62vJSapLR1Eexll3f19ciTMiElOQaxc2nc9kog+l+E=; b=onpaLGxjvTXxlrALxxITQaThYlST1TZ1uCPdqX8lLDFWnOIpJ3CDOSPrfLqE0127clcqpawVYM0hXi6XHpf0pQiJg2+iH8DYMt6PA9rgLB+sWQADGsI8hbj9IhgxFZwSsQHHKPp6MVyaoEPaZ2igoUsaroBOV5LUK9BQ5+fBHQY= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=citrix.com; From: Ross Lagerwall To: xen-devel@lists.xenproject.org Cc: Jan Beulich , Andrew Cooper , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= , "Daniel P. Smith" , =?UTF-8?q?Marek=20Marczykowski-G=C3=B3recki?= , Ross Lagerwall Subject: [PATCH v2 6/9] x86: Remove fully_eager_fpu Date: Tue, 24 Mar 2026 18:19:34 +0000 Message-ID: <20260324181937.2465574-7-ross.lagerwall@citrix.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260324181937.2465574-1-ross.lagerwall@citrix.com> References: <20260324181937.2465574-1-ross.lagerwall@citrix.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: LO4P123CA0608.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:314::8) To CH8PR03MB8274.namprd03.prod.outlook.com (2603:10b6:610:2ba::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH8PR03MB8274:EE_|CH4PR03MB7771:EE_ X-MS-Office365-Filtering-Correlation-Id: fe078d2c-df9f-48a1-4fd6-08de89d1fa21 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014|18002099003|22082099003|56012099003; X-Microsoft-Antispam-Message-Info: jz853MfTvqzXClK6gliJjELwZiNAKAQrK5pRwpxGOAgHR2nBBOnhtqP/f+pZunJawo/c9w3R7LA4xl9OTxMMf0cJoGuEXaF+8fN0LmgNHFPyIJwoJEiBBt11Ye/izt0Lk10W+wtiajS8IG3dV6E7htb5fVUVspLIccRO+W/oM0SaTVYYWFe6M14ru4QbPKv9ZBgyil7DjfUNcGMXbBB4EGL7mL+ybKMPtRQHy4hPfzX80DEp3/RaCEQ/awysCM2BHNT/MYgalq4xbnjFRFLue3VG5KDA7OSifvgXAAtslHvObHCHYxHqXsjHlUd1PcLdbkW/G8L6lSogOcSOog5ipqfO/3lr8xK7aCmb4K9vXBQSSjeBynehB2votrZ2f8b4IFHsmySq3x2aiQURYJmY1awMbLXatnkEpKpCsDfj2QPtvI1a/RyZMyTBeDR6zGCTyfdSunHEpBKDr86CCKiC/BwwgIQzSJmq57GQUg8Fi+hx1S4Ro95FvQkuN0EKk1MdMQfKBMURG7wO2Jq/e+s0q8qBQWFUhnzXrGXtmysVznhhjVca4qxoNjbyY33NXx9uHE3E0u5f6dXbBCc5/+7puWMHh4uFaHZyuDMmDESaA9jVQoQ1+z52OOxv7eguoueFS5W7V3A+g+Y01EADObDoWTqfo/AE3qTKDi1oZIhW8uoIXPP3Akxm0d3ecghpxruwFOAsUD40Fzgzm7B3VzxO6fRjzKT9mF1SzIpzpfpesvs= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH8PR03MB8274.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(18002099003)(22082099003)(56012099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?B4G9uSBITJrXzgbHDqCXg4QNTT6TFzOMy7pmp6dKs79XJ4Dmru3bcMBFZmvv?= =?us-ascii?Q?uTRJ+v3Z5O7Ud3NA0PzYBnrmng+UQkYI1hdzeMOMw/frANAjl+Ue6g7/RcVO?= =?us-ascii?Q?gZdpCCCR0oHus+IMGLvw1dcvNzoVwxEPwFz04LzWiuLlQx7FLbsljldU+1cy?= =?us-ascii?Q?WBJsMLXztJ+Qq1BqWqJP6qxCy0IkYFWiHFnBnpwq2FD+D7eT0mvD33HZsB40?= =?us-ascii?Q?ptmx/kksH1tJohOqOVrQ/AcUzVyrYzaOzYg3Y5NW3tEO3sZsHsIdslVIXROA?= =?us-ascii?Q?/rCb9B6hkTOk4OV9LaYNsDodDXdCStj5q4O/RFZ0bdFxlj/n4KGAFk15rWmc?= =?us-ascii?Q?tLW0Sx9CCeQnU+tig3+dkP+jiUrVTYi0ZjsVEhnJfAvYPbn1maef8dAXBBU+?= =?us-ascii?Q?ZcdR35SAPx3otbELDV/7oWq3JhZAIOoJhmgfjk6N6a9XCvMVWnTQUlv0qtYq?= =?us-ascii?Q?yO+gFZTripREWKvJSBfZqcDbSbsds0X1Ea5jAt3qRwjym0cMgFLLQFhdjJPu?= =?us-ascii?Q?FQP+Ik99kpNqtFp7nZD+QxaQXv37XR/jCslHzzdXKdVAqHfkYN0U8Xx5SlUj?= =?us-ascii?Q?OPS215Yh3g3duJbQUsyXWfV6bn8Z3DAkJumXaLLVQ1te1JMItkeWlg0W37w6?= =?us-ascii?Q?kaQW+bUemwjdolffCoAl50UiOi7n49z87syEjpwMKbZpYUu41H/XqGSs5bLG?= =?us-ascii?Q?ALdo9Z29D55bxCL02rLoAaawY33A8mqOjyf1hPc4Oh9i48xKhnxtH4RUbWUv?= =?us-ascii?Q?ckH75f1Y/rY+ZnxrjGwZRiUbdcMYWsUKcctVbXRta/t7hEAWJAfIu0ydqp5l?= =?us-ascii?Q?UsscBdbQVg36F8+sKf88djORPfAc/7vzxLWwCrFxb5dBlm0PtPiEtQKKwUk2?= =?us-ascii?Q?sRddI2YReN/aMzou0zUodq53IKx5scPb2TUOXhQ7tLmOkTQL6nHFM2YTJXDq?= =?us-ascii?Q?HppGxTVqhsQPnsvtTiupdVnrEtpu60tsN3W6Xhi+s4OEd9pL6GJwu5fY14v/?= =?us-ascii?Q?HXX4ZPouImzFbuVPTG4lNsA17JTEUz5VMkHbHfUFONmIm/8Fyf639Q8AIlpG?= =?us-ascii?Q?fCw6ZaGsWhg5YgwKCArs7/Sc3xnhNplZNa59bSL9Pg0xZTwghz6FuQgXm9zs?= =?us-ascii?Q?8JHXXGGnqObzCuAv70ZQF+UBuljpoEF6kwdWQLnevJCn17JdYp3PyaUaW5Ym?= =?us-ascii?Q?0pT3o9Lc8JkI01Yz+3z8Wlf+s2hPrvPsh/LAbLShrKO7JOgzQxB3sgS8YeZG?= =?us-ascii?Q?IXBNc9J3/Ac51r9+K1Txk3B9BibiWUXPoeSewSwN5nceezV4NiLyUxn1s2IY?= =?us-ascii?Q?hgmZnRBmq1TcQsxHrvST8jfr/umdbPjp/FlHMw0GXkpEPrj9iWsrugx8qMu0?= =?us-ascii?Q?6WmYsLSGFdNuT3lA/BeZGgiYGEVu8a1Hfz2ORdRbg+8BxE6uYOT6G0lZDpJG?= =?us-ascii?Q?xPN92nUHwMXDmTxqi1ok4oUr8aUeLp4sBd3mi/PCHhpYcbPH3JheWQu6yU+c?= =?us-ascii?Q?IzAmqxDuIfwRCghgExv9k9PCyTex/gTQygPBzSYv0WHMtkEf7ryKRirO/4Q0?= =?us-ascii?Q?JQMFnwdezXpHkUY/p+1JFVKWbVbWo7pvwCPC6Qx6xxRRtWYX1H8RZ0g2l+rn?= =?us-ascii?Q?KV6Fr7niMbpR8MWLfntmjQu+JGpNxheU23ooWGCRY4jZICMq9psAD4RWaByD?= =?us-ascii?Q?OhNMz+pYSpg1rKQkhZPzmZc3C7nFifPkyLtQGjHdWEQSDCI0kiOK5W8fsjRI?= =?us-ascii?Q?jn1eyzvKY+/3l/gy6IbQluCVNeac9yI=3D?= X-OriginatorOrg: citrix.com X-MS-Exchange-CrossTenant-Network-Message-Id: fe078d2c-df9f-48a1-4fd6-08de89d1fa21 X-MS-Exchange-CrossTenant-AuthSource: CH8PR03MB8274.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Mar 2026 18:20:07.2370 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: bB4UN/1ibGW3lt+d2oLH3vQhPYtTMJCcDpQJHRVuypAFI5dXtuAcSPtl1Ct19kMPlHfzDbxOZnZtc5GWccAwRntFp3z4byf7+eq7RDTG7gU= X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH4PR03MB7771 X-purgate-ID: tlsNG-42698a/1774376410-98CBB112-7752B4DE/0/0 X-purgate-type: clean X-purgate-size: 6103 X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1774376437778158500 Content-Type: text/plain; charset="utf-8" Since fully_eager_fpu is always true, remove it and adjust the code accordingly. At the same time, rename vcpu_restore_fpu_nonlazy since it always does the full restore. No functional change intended. Signed-off-by: Ross Lagerwall Reviewed-by: Andrew Cooper --- Unchanged in v2 xen/arch/x86/domain.c | 2 +- xen/arch/x86/hvm/emulate.c | 18 +-------------- xen/arch/x86/i387.c | 35 ++++++++---------------------- xen/arch/x86/include/asm/domain.h | 3 --- xen/arch/x86/include/asm/hvm/hvm.h | 2 -- xen/arch/x86/include/asm/i387.h | 2 +- xen/common/efi/runtime.c | 2 +- 7 files changed, 13 insertions(+), 51 deletions(-) diff --git a/xen/arch/x86/domain.c b/xen/arch/x86/domain.c index 82da1c5d7b38..a10cb87e0b58 100644 --- a/xen/arch/x86/domain.c +++ b/xen/arch/x86/domain.c @@ -2127,7 +2127,7 @@ static void __context_switch(void) if ( cpu_has_xsaves && is_hvm_vcpu(n) ) set_msr_xss(n->arch.msrs->xss.raw); } - vcpu_restore_fpu_nonlazy(n, false); + vcpu_restore_fpu(n); nd->arch.ctxt_switch->to(n); } =20 diff --git a/xen/arch/x86/hvm/emulate.c b/xen/arch/x86/hvm/emulate.c index 86b1f7535668..2daea084f15c 100644 --- a/xen/arch/x86/hvm/emulate.c +++ b/xen/arch/x86/hvm/emulate.c @@ -2630,23 +2630,7 @@ static void cf_check hvmemul_put_fpu( } =20 if ( backout =3D=3D X86EMUL_FPU_fpu ) - { - /* - * To back out changes to the register file - * - in fully eager mode, restore original state immediately, - * - in lazy mode, simply adjust state such that upon next FPU insn - * use by the guest we'll reload the state saved (or freshly loa= ded) - * by hvmemul_get_fpu(). - */ - if ( curr->arch.fully_eager_fpu ) - vcpu_restore_fpu_nonlazy(curr, false); - else - { - curr->fpu_dirtied =3D false; - stts(); - alternative_vcall(hvm_funcs.fpu_leave, curr); - } - } + vcpu_restore_fpu(curr); } =20 static int cf_check hvmemul_tlb_op( diff --git a/xen/arch/x86/i387.c b/xen/arch/x86/i387.c index 7da731865f73..88018397b1ad 100644 --- a/xen/arch/x86/i387.c +++ b/xen/arch/x86/i387.c @@ -194,12 +194,8 @@ static inline void fpu_fxsave(struct vcpu *v) /* VCPU FPU Functions */ /*******************************/ /* Restore FPU state whenever VCPU is schduled in. */ -void vcpu_restore_fpu_nonlazy(struct vcpu *v, bool need_stts) +void vcpu_restore_fpu(struct vcpu *v) { - /* Restore nonlazy extended state (i.e. parts not tracked by CR0.TS). = */ - if ( !v->arch.fully_eager_fpu && !v->arch.nonlazy_xstate_used ) - goto maybe_stts; - ASSERT(!is_idle_vcpu(v)); =20 /* Avoid recursion */ @@ -210,27 +206,16 @@ void vcpu_restore_fpu_nonlazy(struct vcpu *v, bool ne= ed_stts) * above) we also need to restore full state, to prevent subsequently * saving state belonging to another vCPU. */ - if ( v->arch.fully_eager_fpu || xstate_all(v) ) - { - if ( cpu_has_xsave ) - fpu_xrstor(v, XSTATE_ALL); - else - fpu_fxrstor(v); - - v->fpu_initialised =3D 1; - v->fpu_dirtied =3D 1; - - /* Xen doesn't need TS set, but the guest might. */ - need_stts =3D is_pv_vcpu(v) && (v->arch.pv.ctrlreg[0] & X86_CR0_TS= ); - } + if ( cpu_has_xsave ) + fpu_xrstor(v, XSTATE_ALL); else - { - fpu_xrstor(v, XSTATE_NONLAZY); - need_stts =3D true; - } + fpu_fxrstor(v); =20 - maybe_stts: - if ( need_stts ) + v->fpu_initialised =3D 1; + v->fpu_dirtied =3D 1; + + /* Xen doesn't need TS set, but the guest might. */ + if ( is_pv_vcpu(v) && (v->arch.pv.ctrlreg[0] & X86_CR0_TS) ) stts(); } =20 @@ -273,8 +258,6 @@ void save_fpu_enable(void) /* Initialize FPU's context save area */ int vcpu_init_fpu(struct vcpu *v) { - v->arch.fully_eager_fpu =3D true; - return xstate_alloc_save_area(v); } =20 diff --git a/xen/arch/x86/include/asm/domain.h b/xen/arch/x86/include/asm/d= omain.h index ad7f6adb2cb9..bd7b02085ef8 100644 --- a/xen/arch/x86/include/asm/domain.h +++ b/xen/arch/x86/include/asm/domain.h @@ -671,9 +671,6 @@ struct arch_vcpu * and thus should be saved/restored. */ bool nonlazy_xstate_used; =20 - /* Restore all FPU state (lazy and non-lazy state) on context switch? = */ - bool fully_eager_fpu; - struct vmce vmce; =20 struct paging_vcpu paging; diff --git a/xen/arch/x86/include/asm/hvm/hvm.h b/xen/arch/x86/include/asm/= hvm/hvm.h index 7d9774df59fe..a9425c8cffe8 100644 --- a/xen/arch/x86/include/asm/hvm/hvm.h +++ b/xen/arch/x86/include/asm/hvm/hvm.h @@ -160,8 +160,6 @@ struct hvm_function_table { =20 void (*cpuid_policy_changed)(struct vcpu *v); =20 - void (*fpu_leave)(struct vcpu *v); - int (*get_guest_pat)(struct vcpu *v, uint64_t *gpat); int (*set_guest_pat)(struct vcpu *v, uint64_t gpat); =20 diff --git a/xen/arch/x86/include/asm/i387.h b/xen/arch/x86/include/asm/i38= 7.h index da0c7e945f95..fe5e4419b6f4 100644 --- a/xen/arch/x86/include/asm/i387.h +++ b/xen/arch/x86/include/asm/i387.h @@ -27,7 +27,7 @@ struct ix87_env { uint16_t fds, _res6; }; =20 -void vcpu_restore_fpu_nonlazy(struct vcpu *v, bool need_stts); +void vcpu_restore_fpu(struct vcpu *v); void vcpu_save_fpu(struct vcpu *v); void save_fpu_enable(void); int vcpu_init_fpu(struct vcpu *v); diff --git a/xen/common/efi/runtime.c b/xen/common/efi/runtime.c index ba27c62132d2..982e42e8f341 100644 --- a/xen/common/efi/runtime.c +++ b/xen/common/efi/runtime.c @@ -157,7 +157,7 @@ void efi_rs_leave(struct efi_rs_state *state) irq_exit(); efi_rs_on_cpu =3D NR_CPUS; spin_unlock(&efi_rs_lock); - vcpu_restore_fpu_nonlazy(curr, true); + vcpu_restore_fpu(curr); } =20 bool efi_rs_using_pgtables(void) --=20 2.53.0 From nobody Sun Apr 5 16:31:36 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=citrix.com); dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=2; a=rsa-sha256; t=1774376432; cv=pass; d=zohomail.com; s=zohoarc; b=OSJ9GZ6SLfr0s1ZcsQblmzx54RA+8Rt3yTlhGrgHC5Mqomi6Qhsoj30sOKRaTAL2SWS1T3c7lpvPyiNeY5TqqEm/AO9Wr/ekt8104SUoJX3N+2LFVGiFuT9I7yXaKJw0VQtR/7q9PoIfV71dYKqSIk2GNLvaZBBxckQgqBprwiU= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774376432; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=P2Oz3L+9MTBYxFvArtvwKn+CTpeTC9fRDIzDj5AalzM=; b=Mdk6vOqMLdkqUqzWm9rLAUul3Ro0yUN/aXAhfPJhpnoD2HFYJtawsZ6n9AE/s2H1sLi4y+6j1s1RuJ7FuyzSmyx3fRgkWStOzS1hevqYah6KSXl6H5E4O1fHhbLQd9EzgvcQ3dIN02KNDYTjIRafADDBdsvblX3Hn+7r1mQcV+s= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=citrix.com); dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1774376432325713.0317178466096; Tue, 24 Mar 2026 11:20:32 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1261261.1554380 (Exim 4.92) (envelope-from ) id 1w56MS-0006l7-AL; Tue, 24 Mar 2026 18:20:16 +0000 Received: by outflank-mailman (output) from mailman id 1261261.1554380; Tue, 24 Mar 2026 18:20:16 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1w56MS-0006kw-7c; Tue, 24 Mar 2026 18:20:16 +0000 Received: by outflank-mailman (input) for mailman id 1261261; Tue, 24 Mar 2026 18:20:15 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1w56MR-0006ig-42 for xen-devel@lists.xenproject.org; Tue, 24 Mar 2026 18:20:15 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1w56MQ-0036ix-GH for xen-devel@lists.xenproject.org; Tue, 24 Mar 2026 19:20:14 +0100 Received: from [10.42.69.2] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 69c2d5bc-5cb7-0a2a0a5109dd-0a2a45028430-44 for ; Tue, 24 Mar 2026 19:20:14 +0100 Received: from [52.101.52.17] (helo=BL2PR02CU003.outbound.protection.outlook.com) by tlsNG-720697.mxtls.expurgate.net with ESMTPS (eXpurgate 4.55.2) (envelope-from ) id 69c2d5dd-63bb-0a2a45020019-34653411f893-3 for ; Tue, 24 Mar 2026 19:20:14 +0100 Received: from CH8PR03MB8274.namprd03.prod.outlook.com (2603:10b6:610:2ba::5) by CH4PR03MB7771.namprd03.prod.outlook.com (2603:10b6:610:237::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9723.25; Tue, 24 Mar 2026 18:20:10 +0000 Received: from CH8PR03MB8274.namprd03.prod.outlook.com ([fe80::ebe2:32c1:d2be:a096]) by CH8PR03MB8274.namprd03.prod.outlook.com ([fe80::ebe2:32c1:d2be:a096%5]) with mapi id 15.20.9745.019; Tue, 24 Mar 2026 18:20:10 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=citrix.com header.i="@citrix.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Dws1oPc0fp9HV4KuQfkhgRSebo/n9CMdck/KMh08CFV/yuki0cox8vkD+TeVDSkCU1SZnqhVE8iYfDTHcmpUzK02yY2Dwy35nEEcakpHV7DDoddWln87mbCjob9yQs3XcbOcIsAbDQGPrKZxdLNjOu4dlVMSQeKRkr9OHMGpeaa1Mjzh5sB4r1ma+VadUXXYovKqhdqMKrscY5O+IVC5JrsHIhrixDNeii9FK7S+Wk07wE+/ouHhZbU+/6rbUbh7Cf3Fi9wSjLfolpt7T58psgkZZgj01kmhDz1vXCRwxdI7/y+L89X2JuZbEvgZ/FdSYrfsC1vrNp8eLiU9hcR1EQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=P2Oz3L+9MTBYxFvArtvwKn+CTpeTC9fRDIzDj5AalzM=; b=JdPRbTqU7LAnHNhSofKWY19zImmBCM3v5+sx0DzT9OlU9fqsTCuYlx/GMLCxutCQJks0cGE8dYdH2XINkopb9oEYLaBznD2vvHXOmtYLlKrEYJrFGjSGUM0i3f0Lvr7ijx7z1EG4mui2dt1HMfbVRK7XZpmO1DKJn7Y5Idtw0DbllpxpxTrCMG/9Rd9DV09lXXSw+ax3XAhn2+gLOfRauycf28I0FNjBRMWbrUbQbBz5qejRs8zG0XTNBcjATAiQb8b2PHDqZ+2t59A2oSFr9pi2SOSKgzI6STOzAO0uCONQJEBQKjQ/NtoY2voqxn0BEnQXzSReXFoiQLyZif3stg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=P2Oz3L+9MTBYxFvArtvwKn+CTpeTC9fRDIzDj5AalzM=; b=Ev+FdWksRVDz5VRMUVPaG9Yv22d1YjSqoECckC/rwp07Lpmu9wXMnCruJjn5WCvxeKbvgzuLLyvJ8QZ4APzAxJrBD0lUVbpfcEOBVVsHshMQSFqrPmOsLtQ64QY1S2jbfJHFUbjqfL0zT0jl3wnaCIDVGUw1rfUpo5qs9gEF9+0= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=citrix.com; From: Ross Lagerwall To: xen-devel@lists.xenproject.org Cc: Jan Beulich , Andrew Cooper , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= , Anthony PERARD , Michal Orzel , Julien Grall , Stefano Stabellini , Ross Lagerwall Subject: [PATCH v2 7/9] x86: Remove fpu_initialised/fpu_dirty Date: Tue, 24 Mar 2026 18:19:35 +0000 Message-ID: <20260324181937.2465574-8-ross.lagerwall@citrix.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260324181937.2465574-1-ross.lagerwall@citrix.com> References: <20260324181937.2465574-1-ross.lagerwall@citrix.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: LO4P123CA0613.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:314::19) To CH8PR03MB8274.namprd03.prod.outlook.com (2603:10b6:610:2ba::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH8PR03MB8274:EE_|CH4PR03MB7771:EE_ X-MS-Office365-Filtering-Correlation-Id: 818b5eb5-fe43-49dc-c237-08de89d1fc56 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014|18002099003|22082099003|56012099003; X-Microsoft-Antispam-Message-Info: UWfE5iLWg+OzSEfwRTTCphaSn6pg588TqSZQPV7YzYHhEFLNR9Q7eIObDxp6AXCXoxo7T5PWqX4r7FARRKstyB31QZGiDkaCgPRFhbDBJyYbQWOyHrz9SpcerFCaq3Rc3RXQx10fL3wQVQE30ERmFfrtQW61V7fyeQpRzMvnLH6mkp27Ai4LxGYuFxwJFL+DGgtMKkbfYFemkDZ7fGt1Yskt0ZT4qVnuuDiM2iW4wkcsmi/pdMoeDCpWKuec5tnZPX2HC6w18uo9Sbg984tIBdP/l+Jck/qTgmX5MJ7Nz/8Wnq5vQiPk/P+uu031AuyNS3KQTwzWC563D5cAM+JvVpfhkhzNcFsDMVO+QxK9CujRoLEiVje45dvzg5KSsd+hxXkoi2ycbCTqestpCyuLUXBgAW1roOdzm0SGJsTbxiVKTcWJo6XkRhx1BkzwHoEbtvjukwn58Jad88v5suzajAyggmIfbrinxkLdfzUS8SwRin2OJPXI12jV2fO12pF8AfbhbR9ta8l57uvpGnXLMGyQZmetZYlTQLcQTqRjicHSt5uHoERmIj5cfgdxqB7BSGt+o3hIChp4eVlqZ//PmxkNCJXPbNxdC4PIKDhexvD6VjPNs6PurJHnCjmoKc3I6o8Q2QBiCCT/uXmaL55hHpbvsPnRVqeuC82mU07doDFYr5gAeddRABQBTsnVTCYAN5U3I6Yj+EtUhBj6liRU4gA0df/AnSgdcTB77DcOpLY= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH8PR03MB8274.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(18002099003)(22082099003)(56012099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?WaneD1Yo2n9Q9WODMKNGpHThukSleim59PyDVvp863tD9Fyd03HQQsJ+oBZx?= =?us-ascii?Q?AxPikyIycDCQFDRZ3vic8cu03fmk/PbPzwX8j+bKleRuL7wMzZCFlP66S+yE?= =?us-ascii?Q?y7Hfhyt6qevT+iRxUa+f0wmvPPbk+pR/ibfEhUS7rzS9kSeDjOtJY9zdifXg?= =?us-ascii?Q?QCyTc6x0xTjzswlLTjV6/3K2FxwIuFKutZul55G8ZjM6f7+9jDxOENYnqPHb?= =?us-ascii?Q?UDxdRJg0LhmU3c6MtGMLPs5A3LwFA6OfcRCg19ACsG1l5WvaJj3tciSyPxMo?= =?us-ascii?Q?JXbuNBH+CVFutDpAZr9pQwBUOIvbENJxuIRn5NwCMl2bRsXAnZ7mQ0GeXXFh?= =?us-ascii?Q?8ZIkDut13Z7TjdGzM89bAmszpXGwHc+KiSlPX6SAgjKi0Y9jGSvIMPusyeTH?= =?us-ascii?Q?FXUY+YcXd62ktAgALJXwAYMXBe4BkHlNNqoDhz5oCPaUVH8WoMqTctItNkZk?= =?us-ascii?Q?rM0TFWep1OMQ0GuyFAQa+sdjO8YFTGmKAUldu4hmVF6/d+tehEqefUvKXPeF?= =?us-ascii?Q?0S0wCTnkHL4KsEZKOlZqe99kpJgRxjycD6sgi9jh4wJ8iY17Ma4djZtzK+Tt?= =?us-ascii?Q?mrKT8v1KNV3coFoW+3aLBY1cRTqM9Vy/bnmXnAcMQhh6qMXY55MXCGjcFZhB?= =?us-ascii?Q?bpWDzA/lii67sN6hCGOZvIn5WXc9e+xDmjfgrn0YluqdzUCp3bBQoVHJiYjy?= =?us-ascii?Q?FV7oJ2xkvycBCfvYgC3tWcOZ+y/NJN6YyHLgLmYQuKSd1p0Q7yB9VEndjdDR?= =?us-ascii?Q?0khJt80pEGAxBZZbsKGyIR8If/LJG80BeBl5oLQw980BPFHGMRNDtP5eEqaf?= =?us-ascii?Q?Qkvrc4dUdvLCBk+M7vUnts3t4P/g66K/7cxdMA04QBnAIgeT4jp7K6PG5SAh?= =?us-ascii?Q?ZvOG8BvG2HZMUJzIEHkOeDqKholOMkleYwc2kuIlO4MJ+E4GIVpjCQtOqUyl?= =?us-ascii?Q?N9h567p4ktjrzZaYzBoQiOVM/7E0PscIVz5Dnl+Y5nB3plfMIHTNQIZHGApJ?= =?us-ascii?Q?r4BMBI/UyNAqoz3tVJQiFDMo/JdbB0TcErEriZ9g6gImH2zjwq1V2+YNFaw7?= =?us-ascii?Q?acanpo7/RXqtHtr9cqlwV5zqnSr/uBEbbuV1LcVpVTorB58HDYLgFIbUfHK+?= =?us-ascii?Q?n1+HxftaHcNNyGt6QNGT4tJG7a5S8BvipU0W5JD9tIWBhBzUnIqDG5+WlkT3?= =?us-ascii?Q?geExeuA59YjXg/dNWo3eZO9WVDh7TB2cQ7EAqRrPG8Cy4K6vN5V15J3IEdTQ?= =?us-ascii?Q?Dd0tYmAltXetzWMtxG1VQkw66l7ihtIatD1W4GqxqRKaUe5W1DrNlZJCvtfL?= =?us-ascii?Q?dMR7nBel7O+ga4smOwyVPd3WmgCy5sd78STp3wu+91BW58YAqjYosgIJj1YV?= =?us-ascii?Q?WdOaGrv4y+ZPgkwie/RhpQiIKglCodh6L92q9gSjnLQMQkJ0VZWrGEONovG3?= =?us-ascii?Q?XZjnf+2fYynejkPfeH/8xF6tQ1X24PUrVFu+khgmwYpwlwhlOQSygU2QnmUL?= =?us-ascii?Q?9f1/H629z7ImTjimekX67Q1x7KyZztAS0/DsnHk8IQlM6pT77XXLaOv4JywD?= =?us-ascii?Q?bxn81tR+hYDyQhQi+7p3MSheBdCZ0kXSeaqnEjlpZu4BXfsSrZGMradikBAD?= =?us-ascii?Q?SQAXhi7nh7G3Z5wDa55tH1O1sBh8VPOHdIkbWDlt+6ZqDStp1ZFvcogXAI92?= =?us-ascii?Q?sut5kRg94FnO5x5nVGBIlugbMMHsUYeCk9nJaRW78dk2BDN4JVbpJcxjQFIH?= =?us-ascii?Q?GpX1XD+gnBddsqr8lTl6WGdo8hRsLtg=3D?= X-OriginatorOrg: citrix.com X-MS-Exchange-CrossTenant-Network-Message-Id: 818b5eb5-fe43-49dc-c237-08de89d1fc56 X-MS-Exchange-CrossTenant-AuthSource: CH8PR03MB8274.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Mar 2026 18:20:10.9007 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 6qUHuG35tMD31mn9vGchnAHyt5rUXSF7cztto5TPo/4NRANQIJgf8uSC3gEqd0Uw3sV0D9c6m9vFg4CB916sn4qhrZe1YjCfqIMeY7NmxV0= X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH4PR03MB7771 X-purgate-ID: tlsNG-720697/1774376414-BF081DB8-44DAEF67/0/0 X-purgate-type: clean X-purgate-size: 11721 X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1774376433493154100 Content-Type: text/plain; charset="utf-8" With lazy FPU removed, fpu_initialised and fpu_dirty are always set to true in vcpu_restore_fpu() so remove them and adjust the code accordingly. There is a small user-visible change here. After this commit, calling XEN_DOMCTL_getvcpucontext immediately after vCPU creation would show the FPU as initialized (with a clean state) whereas before it would show as uninitialized. Signed-off-by: Ross Lagerwall --- In v2: Noted behaviour change in commit message xen/arch/x86/domctl.c | 3 +-- xen/arch/x86/hvm/emulate.c | 6 +----- xen/arch/x86/hvm/hvm.c | 15 ++++++--------- xen/arch/x86/hvm/vlapic.c | 3 --- xen/arch/x86/i387.c | 31 ++---------------------------- xen/arch/x86/include/asm/hvm/hvm.h | 1 - xen/arch/x86/include/asm/xstate.h | 11 ----------- xen/arch/x86/xstate.c | 21 +++++--------------- xen/common/domain.c | 2 -- xen/include/xen/sched.h | 4 ---- 10 files changed, 15 insertions(+), 82 deletions(-) diff --git a/xen/arch/x86/domctl.c b/xen/arch/x86/domctl.c index 942f41c584d4..d9b08182ac1d 100644 --- a/xen/arch/x86/domctl.c +++ b/xen/arch/x86/domctl.c @@ -1409,8 +1409,7 @@ void arch_get_info_guest(struct vcpu *v, vcpu_guest_c= ontext_u c) c(flags =3D v->arch.pv.vgc_flags & ~(VGCF_i387_valid|VGCF_in_kerne= l)); else c(flags =3D 0); - if ( v->fpu_initialised ) - c(flags |=3D VGCF_i387_valid); + c(flags |=3D VGCF_i387_valid); if ( !(v->pause_flags & VPF_down) ) c(flags |=3D VGCF_online); if ( !compat ) diff --git a/xen/arch/x86/hvm/emulate.c b/xen/arch/x86/hvm/emulate.c index 2daea084f15c..48c7320360c7 100644 --- a/xen/arch/x86/hvm/emulate.c +++ b/xen/arch/x86/hvm/emulate.c @@ -2517,9 +2517,7 @@ static int cf_check hvmemul_get_fpu( { struct vcpu *curr =3D current; =20 - if ( !curr->fpu_dirtied ) - alternative_vcall(hvm_funcs.fpu_dirty_intercept); - else if ( type =3D=3D X86EMUL_FPU_fpu ) + if ( type =3D=3D X86EMUL_FPU_fpu ) { /* Has a fastpath for `current`, so there's no actual map */ const struct xsave_struct *xsave_area =3D VCPU_MAP_XSAVE_AREA(curr= ); @@ -2537,8 +2535,6 @@ static int cf_check hvmemul_get_fpu( * masking of all exceptions by FNSTENV.) */ save_fpu_enable(); - curr->fpu_initialised =3D true; - curr->fpu_dirtied =3D true; if ( (fpu_ctxt->fcw & 0x3f) !=3D 0x3f ) { uint16_t fcw; diff --git a/xen/arch/x86/hvm/hvm.c b/xen/arch/x86/hvm/hvm.c index 4d37a93c57a5..d4ba82845146 100644 --- a/xen/arch/x86/hvm/hvm.c +++ b/xen/arch/x86/hvm/hvm.c @@ -866,6 +866,7 @@ static int cf_check hvm_save_cpu_ctxt(struct vcpu *v, h= vm_domain_context_t *h) .dr7 =3D v->arch.dr7, .msr_efer =3D v->arch.hvm.guest_efer, }; + const struct xsave_struct *xsave_area; =20 /* * We don't need to save state for a vcpu that is down; the restore @@ -933,15 +934,11 @@ static int cf_check hvm_save_cpu_ctxt(struct vcpu *v,= hvm_domain_context_t *h) ctxt.ldtr_base =3D seg.base; ctxt.ldtr_arbytes =3D seg.attr; =20 - if ( v->fpu_initialised ) - { - const struct xsave_struct *xsave_area =3D VCPU_MAP_XSAVE_AREA(v); - - BUILD_BUG_ON(sizeof(ctxt.fpu_regs) !=3D sizeof(xsave_area->fpu_sse= )); - memcpy(ctxt.fpu_regs, &xsave_area->fpu_sse, sizeof(ctxt.fpu_regs)); - VCPU_UNMAP_XSAVE_AREA(v, xsave_area); - ctxt.flags =3D XEN_X86_FPU_INITIALISED; - } + xsave_area =3D VCPU_MAP_XSAVE_AREA(v); + BUILD_BUG_ON(sizeof(ctxt.fpu_regs) !=3D sizeof(xsave_area->fpu_sse)); + memcpy(ctxt.fpu_regs, &xsave_area->fpu_sse, sizeof(ctxt.fpu_regs)); + VCPU_UNMAP_XSAVE_AREA(v, xsave_area); + ctxt.flags =3D XEN_X86_FPU_INITIALISED; =20 return hvm_save_entry(CPU, v->vcpu_id, h, &ctxt); } diff --git a/xen/arch/x86/hvm/vlapic.c b/xen/arch/x86/hvm/vlapic.c index 79697487ba90..885f5d304b2f 100644 --- a/xen/arch/x86/hvm/vlapic.c +++ b/xen/arch/x86/hvm/vlapic.c @@ -276,7 +276,6 @@ static void vlapic_init_sipi_one(struct vcpu *target, u= int32_t icr) switch ( icr & APIC_DM_MASK ) { case APIC_DM_INIT: { - bool fpu_initialised; int rc; =20 /* No work on INIT de-assert for P4-type APIC. */ @@ -289,10 +288,8 @@ static void vlapic_init_sipi_one(struct vcpu *target, = uint32_t icr) hvm_vcpu_down(target); domain_lock(target->domain); /* Reset necessary VCPU state. This does not include FPU state. */ - fpu_initialised =3D target->fpu_initialised; rc =3D vcpu_reset(target); ASSERT(!rc); - target->fpu_initialised =3D fpu_initialised; vlapic_do_init(vcpu_vlapic(target)); domain_unlock(target->domain); break; diff --git a/xen/arch/x86/i387.c b/xen/arch/x86/i387.c index 88018397b1ad..5e893a2aab94 100644 --- a/xen/arch/x86/i387.c +++ b/xen/arch/x86/i387.c @@ -110,22 +110,7 @@ static inline void fpu_fxrstor(struct vcpu *v) =20 static inline uint64_t vcpu_xsave_mask(const struct vcpu *v) { - if ( v->fpu_dirtied ) - return v->arch.nonlazy_xstate_used ? XSTATE_ALL : XSTATE_LAZY; - - ASSERT(v->arch.nonlazy_xstate_used); - - /* - * The offsets of components which live in the extended region of - * compact xsave area are not fixed. Xsave area may be overwritten - * when a xsave with v->fpu_dirtied set is followed by one with - * v->fpu_dirtied clear. - * In such case, if hypervisor uses compact xsave area and guest - * has ever used lazy states (checking xcr0_accum excluding - * XSTATE_FP_SSE), vcpu_xsave_mask will return XSTATE_ALL. Otherwise - * return XSTATE_NONLAZY. - */ - return xstate_all(v) ? XSTATE_ALL : XSTATE_NONLAZY; + return v->arch.nonlazy_xstate_used ? XSTATE_ALL : XSTATE_LAZY; } =20 /* Save x87 extended state */ @@ -201,19 +186,11 @@ void vcpu_restore_fpu(struct vcpu *v) /* Avoid recursion */ clts(); =20 - /* - * When saving full state even with !v->fpu_dirtied (see vcpu_xsave_ma= sk() - * above) we also need to restore full state, to prevent subsequently - * saving state belonging to another vCPU. - */ if ( cpu_has_xsave ) fpu_xrstor(v, XSTATE_ALL); else fpu_fxrstor(v); =20 - v->fpu_initialised =3D 1; - v->fpu_dirtied =3D 1; - /* Xen doesn't need TS set, but the guest might. */ if ( is_pv_vcpu(v) && (v->arch.pv.ctrlreg[0] & X86_CR0_TS) ) stts(); @@ -225,7 +202,7 @@ void vcpu_restore_fpu(struct vcpu *v) */ static bool _vcpu_save_fpu(struct vcpu *v) { - if ( !v->fpu_dirtied && !v->arch.nonlazy_xstate_used ) + if ( !v->arch.nonlazy_xstate_used ) return false; =20 ASSERT(!is_idle_vcpu(v)); @@ -238,8 +215,6 @@ static bool _vcpu_save_fpu(struct vcpu *v) else fpu_fxsave(v); =20 - v->fpu_dirtied =3D 0; - return true; } =20 @@ -265,7 +240,6 @@ void vcpu_reset_fpu(struct vcpu *v) { struct xsave_struct *xsave_area =3D VCPU_MAP_XSAVE_AREA(v); =20 - v->fpu_initialised =3D false; *xsave_area =3D (struct xsave_struct) { .xsave_hdr.xstate_bv =3D X86_XCR0_X87, }; @@ -282,7 +256,6 @@ void vcpu_setup_fpu(struct vcpu *v, const void *data) { struct xsave_struct *xsave_area =3D VCPU_MAP_XSAVE_AREA(v); =20 - v->fpu_initialised =3D true; *xsave_area =3D (struct xsave_struct) { .fpu_sse =3D *(const fpusse_t*)data, .xsave_hdr.xstate_bv =3D XSTATE_FP_SSE, diff --git a/xen/arch/x86/include/asm/hvm/hvm.h b/xen/arch/x86/include/asm/= hvm/hvm.h index a9425c8cffe8..846b91ebefcc 100644 --- a/xen/arch/x86/include/asm/hvm/hvm.h +++ b/xen/arch/x86/include/asm/hvm/hvm.h @@ -184,7 +184,6 @@ struct hvm_function_table { =20 /* Instruction intercepts: non-void return values are X86EMUL codes. */ void (*wbinvd_intercept)(void); - void (*fpu_dirty_intercept)(void); int (*msr_read_intercept)(unsigned int msr, uint64_t *msr_content); int (*msr_write_intercept)(unsigned int msr, uint64_t msr_content); void (*handle_cd)(struct vcpu *v, unsigned long value); diff --git a/xen/arch/x86/include/asm/xstate.h b/xen/arch/x86/include/asm/x= state.h index e3b9745543d7..ca38c43ec1c3 100644 --- a/xen/arch/x86/include/asm/xstate.h +++ b/xen/arch/x86/include/asm/xstate.h @@ -132,17 +132,6 @@ xsave_area_compressed(const struct xsave_struct *xsave= _area) return xsave_area->xsave_hdr.xcomp_bv & XSTATE_COMPACTION_ENABLED; } =20 -static inline bool xstate_all(const struct vcpu *v) -{ - /* - * XSTATE_FP_SSE may be excluded, because the offsets of XSTATE_FP_SSE - * (in the legacy region of xsave area) are fixed, so saving - * XSTATE_FP_SSE will not cause overwriting problem with XSAVES/XSAVEC. - */ - return xsave_area_compressed(v->arch.xsave_area) && - (v->arch.xcr0_accum & XSTATE_LAZY & ~XSTATE_FP_SSE); -} - /* * Fetch a pointer to a vCPU's XSAVE area * diff --git a/xen/arch/x86/xstate.c b/xen/arch/x86/xstate.c index e990abc9d18c..11d390cac985 100644 --- a/xen/arch/x86/xstate.c +++ b/xen/arch/x86/xstate.c @@ -994,28 +994,17 @@ int handle_xsetbv(u32 index, u64 new_bv) if ( new_bv & XSTATE_NONLAZY ) curr->arch.nonlazy_xstate_used =3D 1; =20 - mask &=3D curr->fpu_dirtied ? ~XSTATE_FP_SSE : XSTATE_NONLAZY; + mask &=3D ~XSTATE_FP_SSE; if ( mask ) { unsigned long cr0 =3D read_cr0(); + /* Has a fastpath for `current`, so there's no actual map */ + struct xsave_struct *xsave_area =3D VCPU_MAP_XSAVE_AREA(curr); =20 clts(); - if ( curr->fpu_dirtied ) - { - /* Has a fastpath for `current`, so there's no actual map */ - struct xsave_struct *xsave_area =3D VCPU_MAP_XSAVE_AREA(curr); =20 - asm ( "stmxcsr %0" : "=3Dm" (xsave_area->fpu_sse.mxcsr) ); - VCPU_UNMAP_XSAVE_AREA(curr, xsave_area); - } - else if ( xstate_all(curr) ) - { - /* See the comment in i387.c:vcpu_restore_fpu_eager(). */ - mask |=3D XSTATE_LAZY; - curr->fpu_initialised =3D 1; - curr->fpu_dirtied =3D 1; - cr0 &=3D ~X86_CR0_TS; - } + asm ( "stmxcsr %0" : "=3Dm" (xsave_area->fpu_sse.mxcsr) ); + VCPU_UNMAP_XSAVE_AREA(curr, xsave_area); xrstor(curr, mask); if ( cr0 & X86_CR0_TS ) write_cr0(cr0); diff --git a/xen/common/domain.c b/xen/common/domain.c index ab910fcf9306..30cfea30459a 100644 --- a/xen/common/domain.c +++ b/xen/common/domain.c @@ -1824,8 +1824,6 @@ int vcpu_reset(struct vcpu *v) clear_bit(v->vcpu_id, d->poll_mask); v->poll_evtchn =3D 0; =20 - v->fpu_initialised =3D 0; - v->fpu_dirtied =3D 0; v->is_initialised =3D 0; if ( v->affinity_broken & VCPU_AFFINITY_OVERRIDE ) vcpu_temporary_affinity(v, NR_CPUS, VCPU_AFFINITY_OVERRIDE); diff --git a/xen/include/xen/sched.h b/xen/include/xen/sched.h index 40a35fc15c65..212c7d765c3e 100644 --- a/xen/include/xen/sched.h +++ b/xen/include/xen/sched.h @@ -212,10 +212,6 @@ struct vcpu struct guest_area runstate_guest_area; unsigned int new_state; =20 - /* Has the FPU been initialised? */ - bool fpu_initialised; - /* Has the FPU been used since it was last saved? */ - bool fpu_dirtied; /* Initialization completed for this VCPU? */ bool is_initialised; /* Currently running on a CPU? */ --=20 2.53.0 From nobody Sun Apr 5 16:31:36 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=citrix.com); dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=2; a=rsa-sha256; t=1774376443; cv=pass; d=zohomail.com; s=zohoarc; b=YvdGxzsUMvgWzE9SxnjohMwaW/P2SiSqmpoS6b9ruvHCw9yfiQTVVdewmZG/5A4SvYoWrGIQteoGxsV88Sz+CcmWapUhcJ+7tdGHhe4RdyqMvBxtXIOl6hh2hLLJhQYQhpxMx9f85KoYOGnVm0kIlvy+//cUWH4pUSb68mgw9pk= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774376443; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=IiBWs19smFfQj7jl5l/sB8BHje6+rBSArMs7K4Ftg74=; b=Riels1Qc4GcGMrp6zfeYzbjHXFds+rJUo0h6gj2o/m6gon7ZJzqbcqyhxYUmcPsxzmYRq1YUcDmz1mnawQloUMCqq3ncRSH0XQbGe1cYRM76Xz5hXPEh9MQbONECWs4JZMxboxNHVGEmFfz0z/tAeXLU3040wxx0PpXbt1LnBA4= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=citrix.com); dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1774376443831975.0748538807452; Tue, 24 Mar 2026 11:20:43 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1261268.1554389 (Exim 4.92) (envelope-from ) id 1w56MW-0007CP-O5; Tue, 24 Mar 2026 18:20:20 +0000 Received: by outflank-mailman (output) from mailman id 1261268.1554389; Tue, 24 Mar 2026 18:20:20 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1w56MW-0007CB-KY; Tue, 24 Mar 2026 18:20:20 +0000 Received: by outflank-mailman (input) for mailman id 1261268; Tue, 24 Mar 2026 18:20:19 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1w56MU-00077i-W6 for xen-devel@lists.xenproject.org; Tue, 24 Mar 2026 18:20:19 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1w56MU-00DbE3-Bg for xen-devel@lists.xenproject.org; Tue, 24 Mar 2026 19:20:18 +0100 Received: from [10.42.69.5] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 69c2d5d4-e002-0a2a0a5209dd-0a2a450591ec-28 for ; Tue, 24 Mar 2026 19:20:18 +0100 Received: from [40.107.201.47] (helo=CH4PR04CU002.outbound.protection.outlook.com) by tlsNG-c201ff.mxtls.expurgate.net with ESMTPS (eXpurgate 4.55.2) (envelope-from ) id 69c2d5e1-5aeb-0a2a45050019-286bc92fd719-3 for ; Tue, 24 Mar 2026 19:20:18 +0100 Received: from CH8PR03MB8274.namprd03.prod.outlook.com (2603:10b6:610:2ba::5) by CH4PR03MB7771.namprd03.prod.outlook.com (2603:10b6:610:237::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9723.25; Tue, 24 Mar 2026 18:20:15 +0000 Received: from CH8PR03MB8274.namprd03.prod.outlook.com ([fe80::ebe2:32c1:d2be:a096]) by CH8PR03MB8274.namprd03.prod.outlook.com ([fe80::ebe2:32c1:d2be:a096%5]) with mapi id 15.20.9745.019; Tue, 24 Mar 2026 18:20:15 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=citrix.com header.i="@citrix.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=k/WoQcFDNLDlIOhIQxswMBY0hmWly9RhYJrWa6lJNVlwHMT3Ksl2WZThfXUkujRGK4AnS2MKRrDXTMhRSVIcbr2oAXdF0koeADNhwDFa4RJMhsdmjRlwCTYAK+q+dS6Tk6klATQ4txzEM7oY6T0X+bkgPqg6p5ZON8m4vFxE/5otN2k4Ml3bx3pVTytqEkNsodBBBjpP2425NeFSgimqDB6h8eeecjIt1q6V+nBifZlC8NY9/LsWfsrWXXY0uEtVZrhkUTkKGaqObsP9xHpHNCLTzMM+1ZH9ZDGeUWcYV2BYnKRzrZKwM+tHT6OY1pB4sBwSvexaW+H7iqm5Ik3noA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=IiBWs19smFfQj7jl5l/sB8BHje6+rBSArMs7K4Ftg74=; b=ES4HuuPRzI7nEM42ZEY2W0Kw/+tl0qqj6jwlKOKpGRGu9zTwMch4DZkuRj4dpMka5c/Me6Xtx94Ka0s6H9QmxYpMDT8NWN8bOSFivlq9UjXzqqLe9orN1bGbn/+f3h36dPqOOgoNhVIlTYNlRE99XpbYRBqgxF/D2IUQrZb88+Jq9YqkX93Z7JhAINT1PZl+4avkQwjCBYFkIljIsuZv3Va7XW5Ymq/fQpQH/491JaS9OZJSgoz2Kd3UiGc4w7ueBORbnhkm9DbW4fEACReI4V2gPVYsPrcMLfKSoSugYP0+CMsF/LxxyVUW/i3q5QhUG5cUw0P/bf3Z1iZfgx9oZA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=IiBWs19smFfQj7jl5l/sB8BHje6+rBSArMs7K4Ftg74=; b=l1OBzMsiwt66qW8lL/GDGjlm+RfxjuNgeXTxQtdrdwAwjnJdCUwrAILJcKEPsbB2JNvwbi2tDNzm3vKIgxasRkn8hvqxNDYd5y4fzUOdYSs3MMqKtp4t9PpDmDekmj2OZrpvNjQFExeUvBQxc4qnvmOL5ep0QqHCjv/pZAKVgtU= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=citrix.com; From: Ross Lagerwall To: xen-devel@lists.xenproject.org Cc: Jan Beulich , Andrew Cooper , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= , Ross Lagerwall Subject: [PATCH v2 8/9] x86/xstate: Stop tracking nonlazy xstate use Date: Tue, 24 Mar 2026 18:19:36 +0000 Message-ID: <20260324181937.2465574-9-ross.lagerwall@citrix.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260324181937.2465574-1-ross.lagerwall@citrix.com> References: <20260324181937.2465574-1-ross.lagerwall@citrix.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: LO4P123CA0605.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:314::7) To CH8PR03MB8274.namprd03.prod.outlook.com (2603:10b6:610:2ba::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH8PR03MB8274:EE_|CH4PR03MB7771:EE_ X-MS-Office365-Filtering-Correlation-Id: 30775e5e-b4c7-4494-8da3-08de89d1ff16 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014|18002099003|22082099003|56012099003; X-Microsoft-Antispam-Message-Info: FyNcE6wnPIzCufqH8Q+pni52f8TTa3J/Q0ODvzgPsrtOy8dZWhl1g1VA9zHqn+dN3rYINLcwBGK+xUSG//2GOxipkYvZdkMqwxrOM8hZG723bFMd1kup7Vj5G94B+BKwE2qFkI+qQ3Jig4RyTivoe7WvoX0Xmaqc9OO349zTB3B42GVVQrt7xAq4vQH7cPBH8vmFSZAgkmDtViOJGcMpxTLDiJvER9UA0AFKwcCMH+T2GPhudz21ez5zqZnA5zJDYo9Tzbs7XPGVIhPdN2DStPBRZp+BUuvkLLINXRWsioSKAvFZw7KfwH+qGr6dSRrKTn6NFsw/IdfVMsw/+YVx2cjH65xz4AocWdkkb8y0l/4tHS/a/M+CjUuAwcAu6jLVPP7r9rAyOTCIaa09WwkpeF43h3RrmOMQYP/hbZJaDFiET253ka9p9QSYRlxxRJwDxu/JDa/e4I9xQQm+dLBdEzozn8C8os8Jixis/7HlhueAobczEAYzIUVC1H/8IGvGqArKQewab5L2E6aHpN7BYC5Ub3Hbui58yrAdpe3avl0tVYC9bm9yqhfwi71IQ31wUJ1dQox0D2wgfmoSjd1C0IriAw0eBP2rUsM67Jg4jkN9EgkvZq/ar/91lRRfBOFX68HNiGA0DIkQhFSyzDXKKyZMjDm2COJxHBFrvB6fVGpDfGahT7HU1Ddv3iFI8QzfS3edGMhQHjdA4HfHVDyGhCcCKOwopYJHcP6LLfxgGmM= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH8PR03MB8274.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(18002099003)(22082099003)(56012099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?QiY5Q/CGdxN9CkMS/fGPnmPFj9AlZN8VBY2ia47Blh3A3qUeM5kKh9Clwjfl?= =?us-ascii?Q?+byCTXbGW5GDA1YvLPx/MjWg7EhHo4SjypKcmd0pptcPdZcRfV5uqNYOV0iS?= =?us-ascii?Q?3DDTW1H0ONpEmRKRgzLnK1cOUhBrKV7vvjW3xEW3RiF5+ALthaO5MIE8Ru2Y?= =?us-ascii?Q?ep76rU0hGnbfXlPSaIg5wAuf7bc24xVniPFyjFFXC5vUcif0QQNChkdGhTqr?= =?us-ascii?Q?A0L/pCXd5lZkq/NOHdPZN8OgYV53WU3FI/jYefscK3SGxpM/ASLPDdUkT62N?= =?us-ascii?Q?c9RP8KEhS1Skfx8snxTzpAqkGSROU2lm9KVh6l86EPZnQdTFJoR8cn2EtA4c?= =?us-ascii?Q?avVlak0eICjWRz/sBb6KGdzlGX5bScj66DKvHeo4IcPVRzhxtyz++/dUAGzT?= =?us-ascii?Q?BpPvPX1Hm6pZjWKShvdvla6duIxmB+U5mxLQ5WCNQSS+nhU9bIVusWCFZpok?= =?us-ascii?Q?pcoXUjlz7ZdYA9N5PT0chINSf6g3rh75r5d6iryywCidcWXvknGNBCeiloMN?= =?us-ascii?Q?zz/BLnbZDDvbE+1/9Cd5YcGy6SO591UtrBakXm4H2L9UANvxyDwYr3m9kV3n?= =?us-ascii?Q?lYJVhLnzPmX3x6a15f0VoMuJLDOEqFF1faTo8tk7qwc+lIC/b4bhBfUosqjr?= =?us-ascii?Q?mO1NTBdturLwUHTifycrbnvXY8CY4Y01uypq3EKhAKbd/8fixUJ4KsNdKSPG?= =?us-ascii?Q?aPhhkupXqESQZ7Xpww2GfTI6nIVz2eF8G4vJecVflQKReGvVaoyqJagRtzZG?= =?us-ascii?Q?qppGFCSFHfeQaySNob95qSUyrkmFaBuid8NGjqGqyy5Fc6GBEXXfBA8Q0b6f?= =?us-ascii?Q?72S+MObDM2kfFWgR0njA6cp/9Tcqudt2BeOxF4VNG87jc5seLoXX1FR/VuyM?= =?us-ascii?Q?YFxHHJp2WBCrCuTTIj0Ewp/Ma+xNION7SgscNesgBS6NuOL+3FDR3X6IaZBx?= =?us-ascii?Q?8lnk3+rsCxhjJ8k9zg5N6FdqiiiV9wposwGK3wfSOWl+MchoYG+Eh1A3flSO?= =?us-ascii?Q?ybRlLjd41jyXsXO89kvvaEaDjbAVSoHSBpCIChnbZJAVekIk3/ZvO02pORdC?= =?us-ascii?Q?bGAmpuobA8L6hTH6v1Xj/ZKtshz1BI7SkslzCPmowv51DMBilRoE557h8cll?= =?us-ascii?Q?T2/nzonaElbG0ORMLXqx9YTwlDQddduQOcGQ4pKhpDVV3kZV24qQaT72w3Fi?= =?us-ascii?Q?RT9fZzHhcBESBv2OBjh61eoZGBxjurj+7MOyFDcykwGc6cJJ3W7ue7lACCix?= =?us-ascii?Q?wD6ZFuuQQe+tr/ceQS44A9auonsfEklHuwxq5B8aIezQ/psIFZxkBHQB9VJn?= =?us-ascii?Q?DN1uYJ8VpMkRfj6XMNGleTTKdN9hfw42Psy+pHn4Bc8CiQz081R2fvS5eLFj?= =?us-ascii?Q?DPxJZO8okV8S7J+HrTroyGSrIHjLA41yk4ic775mdugSSHxsgtRX9FmYiGX+?= =?us-ascii?Q?+h90DbEkloMuQBZJzOMQ7oxMHRJNle4kePWYWKGyx5oOAFAfNM7dKC/jyRXp?= =?us-ascii?Q?jjc3y1BLbX7ZSPdcChLlZMH/kSsNgnw6CrpONGdL3wCAOxpQshoAaWb3uMeR?= =?us-ascii?Q?/N46pMfP3HM7cddHKgp/avQ5Y6g2ntrFlg5UUDQkTiCEGUgUwU58Wgnfx5JU?= =?us-ascii?Q?5ul4TqaKNLBp1WsGREBF+lHJaBXHf1Ndfduqk2za1qlNRJw3bkMkiFwXJ1Jw?= =?us-ascii?Q?iZ6sik+qlIBKg3OYz8oaCAxdFu3xZOGXJLraKKE1ugFJYsJ9t5QvARSPR/Ga?= =?us-ascii?Q?onhN73tChFAmK1J7h/KtmbpMR1jVp9c=3D?= X-OriginatorOrg: citrix.com X-MS-Exchange-CrossTenant-Network-Message-Id: 30775e5e-b4c7-4494-8da3-08de89d1ff16 X-MS-Exchange-CrossTenant-AuthSource: CH8PR03MB8274.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Mar 2026 18:20:15.4615 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: SLxn13DSBBsldjgZ9V/8FlIaK5SEePyRnXrKmPrZz5HS9KYKvOzRsk3s+yqvXmobXoK+MBC3oC4ZBqWRBBZXj0LIjUeH39v63FIbSmjHhBU= X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH4PR03MB7771 X-purgate-ID: tlsNG-c201ff/1774376418-2368D488-17EFF41D/0/0 X-purgate-type: clean X-purgate-size: 4855 X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1774376445616154100 Content-Type: text/plain; charset="utf-8" With the removal of lazy FPU, the full state is always restored on context switch so stop tracking whether nonlazy xstate is used. Signed-off-by: Ross Lagerwall Reviewed-by: Andrew Cooper --- Unchanged in v2 xen/arch/x86/domctl.c | 1 - xen/arch/x86/hvm/hvm.c | 1 - xen/arch/x86/i387.c | 12 +----------- xen/arch/x86/include/asm/domain.h | 3 --- xen/arch/x86/include/asm/xstate.h | 6 ++---- xen/arch/x86/xstate.c | 3 --- 6 files changed, 3 insertions(+), 23 deletions(-) diff --git a/xen/arch/x86/domctl.c b/xen/arch/x86/domctl.c index d9b08182ac1d..a9fbb2d405b7 100644 --- a/xen/arch/x86/domctl.c +++ b/xen/arch/x86/domctl.c @@ -1013,7 +1013,6 @@ long arch_do_domctl( =20 v->arch.xcr0 =3D _xcr0; v->arch.xcr0_accum =3D _xcr0_accum; - v->arch.nonlazy_xstate_used =3D _xcr0_accum & XSTATE_NONLA= ZY; compress_xsave_states(v, _xsave_area, evc->size - PV_XSAVE_HDR_SIZE); =20 diff --git a/xen/arch/x86/hvm/hvm.c b/xen/arch/x86/hvm/hvm.c index d4ba82845146..0e7b66d726ae 100644 --- a/xen/arch/x86/hvm/hvm.c +++ b/xen/arch/x86/hvm/hvm.c @@ -1383,7 +1383,6 @@ static int cf_check hvm_load_cpu_xsave_states( =20 v->arch.xcr0 =3D ctxt->xcr0; v->arch.xcr0_accum =3D ctxt->xcr0_accum; - v->arch.nonlazy_xstate_used =3D ctxt->xcr0_accum & XSTATE_NONLAZY; compress_xsave_states(v, &ctxt->save_area, size - offsetof(struct hvm_hw_cpu_xsave, save_ar= ea)); =20 diff --git a/xen/arch/x86/i387.c b/xen/arch/x86/i387.c index 5e893a2aab94..9acaaf4673df 100644 --- a/xen/arch/x86/i387.c +++ b/xen/arch/x86/i387.c @@ -108,25 +108,18 @@ static inline void fpu_fxrstor(struct vcpu *v) /* FPU Save Functions */ /*******************************/ =20 -static inline uint64_t vcpu_xsave_mask(const struct vcpu *v) -{ - return v->arch.nonlazy_xstate_used ? XSTATE_ALL : XSTATE_LAZY; -} - /* Save x87 extended state */ static inline void fpu_xsave(struct vcpu *v) { bool ok; - uint64_t mask =3D vcpu_xsave_mask(v); =20 - ASSERT(mask); /* * XCR0 normally represents what guest OS set. In case of Xen itself, * we set the accumulated feature mask before doing save/restore. */ ok =3D set_xcr0(v->arch.xcr0_accum | XSTATE_FP_SSE); ASSERT(ok); - xsave(v, mask); + xsave(v, XSTATE_ALL); ok =3D set_xcr0(v->arch.xcr0 ?: XSTATE_FP_SSE); ASSERT(ok); } @@ -202,9 +195,6 @@ void vcpu_restore_fpu(struct vcpu *v) */ static bool _vcpu_save_fpu(struct vcpu *v) { - if ( !v->arch.nonlazy_xstate_used ) - return false; - ASSERT(!is_idle_vcpu(v)); =20 /* This can happen, if a paravirtualised guest OS has set its CR0.TS. = */ diff --git a/xen/arch/x86/include/asm/domain.h b/xen/arch/x86/include/asm/d= omain.h index bd7b02085ef8..385a6666dafa 100644 --- a/xen/arch/x86/include/asm/domain.h +++ b/xen/arch/x86/include/asm/domain.h @@ -667,9 +667,6 @@ struct arch_vcpu * it explicitly enables it via xcr0. */ uint64_t xcr0_accum; - /* This variable determines whether nonlazy extended state has been us= ed, - * and thus should be saved/restored. */ - bool nonlazy_xstate_used; =20 struct vmce vmce; =20 diff --git a/xen/arch/x86/include/asm/xstate.h b/xen/arch/x86/include/asm/x= state.h index ca38c43ec1c3..c96d75e38b25 100644 --- a/xen/arch/x86/include/asm/xstate.h +++ b/xen/arch/x86/include/asm/xstate.h @@ -33,12 +33,10 @@ extern uint32_t mxcsr_mask; #define XSTATE_FP_SSE (X86_XCR0_X87 | X86_XCR0_SSE) #define XCNTXT_MASK (X86_XCR0_X87 | X86_XCR0_SSE | X86_XCR0_YMM | \ X86_XCR0_OPMASK | X86_XCR0_ZMM | X86_XCR0_HI_ZMM |= \ - XSTATE_NONLAZY) + X86_XCR0_BNDREGS | X86_XCR0_BNDCSR | X86_XCR0_PKRU= | \ + X86_XCR0_TILE_CFG | X86_XCR0_TILE_DATA) =20 #define XSTATE_ALL (~(1ULL << 63)) -#define XSTATE_NONLAZY (X86_XCR0_BNDREGS | X86_XCR0_BNDCSR | X86_XCR0_PKRU= | \ - X86_XCR0_TILE_CFG | X86_XCR0_TILE_DATA) -#define XSTATE_LAZY (XSTATE_ALL & ~XSTATE_NONLAZY) #define XSTATE_XSAVES_ONLY 0 #define XSTATE_COMPACTION_ENABLED (1ULL << 63) =20 diff --git a/xen/arch/x86/xstate.c b/xen/arch/x86/xstate.c index 11d390cac985..658f372b8c51 100644 --- a/xen/arch/x86/xstate.c +++ b/xen/arch/x86/xstate.c @@ -991,9 +991,6 @@ int handle_xsetbv(u32 index, u64 new_bv) curr->arch.xcr0 =3D new_bv; curr->arch.xcr0_accum |=3D new_bv; =20 - if ( new_bv & XSTATE_NONLAZY ) - curr->arch.nonlazy_xstate_used =3D 1; - mask &=3D ~XSTATE_FP_SSE; if ( mask ) { --=20 2.53.0 From nobody Sun Apr 5 16:31:36 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=citrix.com); dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=2; a=rsa-sha256; t=1774376439; cv=pass; d=zohomail.com; s=zohoarc; b=M4yoZi40oZ4iR0j1o9F3n3ctmjd4cDAFn7qhYRhhGTHBUQNqsU0Iy94sr+btCBS6A08cxgY0BMP6B30dhlchSf4QmbwFQuvJLH7GyeWP3wBBZ51sCkIczfg1jtGXO0+frNIwi/5U5WyJC17b9Wd++h6PLjRipQ+gYPOwtjkPnm8= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774376439; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=uicoMoHs+Gl51hDkgrbL84Tv8MCml7k1ZtutNzfBkt0=; b=md2ubsia+PSSRw9A2OTlR2IVEXnoFD4R3ue6pbRxoB4u4xbJb8Zw4/GhFTHGt9tteoLuLSqOF5UEDh49LwZ+4baedFF46DpRQ/amvnhiH1CeSXOiBueNt2WzPljapZY5URGoXTvg0C6xQClht8YlOBVolRfKVZqvjtSQO+03NxM= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=citrix.com); dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1774376439245137.36340136988747; Tue, 24 Mar 2026 11:20:39 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1261273.1554398 (Exim 4.92) (envelope-from ) id 1w56MY-0007YJ-Vh; Tue, 24 Mar 2026 18:20:22 +0000 Received: by outflank-mailman (output) from mailman id 1261273.1554398; Tue, 24 Mar 2026 18:20:22 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1w56MY-0007YB-SJ; Tue, 24 Mar 2026 18:20:22 +0000 Received: by outflank-mailman (input) for mailman id 1261273; Tue, 24 Mar 2026 18:20:22 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1w56MY-0007Ug-Bm for xen-devel@lists.xenproject.org; Tue, 24 Mar 2026 18:20:22 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1w56MX-00DbE3-NJ for xen-devel@lists.xenproject.org; Tue, 24 Mar 2026 19:20:21 +0100 Received: from [10.42.69.5] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 69c2d5d4-e002-0a2a0a5209dd-0a2a450591ec-32 for ; Tue, 24 Mar 2026 19:20:21 +0100 Received: from [52.101.52.42] (helo=BL2PR02CU003.outbound.protection.outlook.com) by tlsNG-c201ff.mxtls.expurgate.net with ESMTPS (eXpurgate 4.55.2) (envelope-from ) id 69c2d5e4-5aeb-0a2a45050019-3465342a35b3-3 for ; Tue, 24 Mar 2026 19:20:21 +0100 Received: from CH8PR03MB8274.namprd03.prod.outlook.com (2603:10b6:610:2ba::5) by CH4PR03MB7771.namprd03.prod.outlook.com (2603:10b6:610:237::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9723.25; Tue, 24 Mar 2026 18:20:19 +0000 Received: from CH8PR03MB8274.namprd03.prod.outlook.com ([fe80::ebe2:32c1:d2be:a096]) by CH8PR03MB8274.namprd03.prod.outlook.com ([fe80::ebe2:32c1:d2be:a096%5]) with mapi id 15.20.9745.019; Tue, 24 Mar 2026 18:20:19 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=citrix.com header.i="@citrix.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=fvvfCX02Ojw0TXPBVp9tsQdSRIcpjxSU4rAsysY4B3Sl07kbx0otmZ3PfUXfEoQOXR/edLq25oodwX7c0nKlp9LszymSrb+qU5xeiPEGjM5960xB67qGd+g2eD38BN2Whz6gzLUm55ZOFsPoLyuS0aNa8BXN4YHU8Wgk7gBK9fXd3jADGVbVTCS8mYw5kzzJZJJj7hUwfZR7vbtTppUzltRsJ+pDKDOFQckMHljsR3QXvuM76A5mjOHGL0+sB49Bq5y9TUNDViC33I5WzNKCE3xqbV0My9Wvhse4kUIRd76kvdEXDOrpK9yu7K0aIYt7cztYl6WTpckpw0CW454b5A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=uicoMoHs+Gl51hDkgrbL84Tv8MCml7k1ZtutNzfBkt0=; b=aSwUSocj+MIhWApdRnH3TM6Bw5dvhCdF2G6IjUry4L17rT7uMiFtBqMoGMv6gL6VIZ9uAGDLxZMcETrJ5ATWtFi4TFB9T9kHvAo/o9lpHcydVsw26xf3WhVfgqb8AOWkEP6AGDPRl5BD432RYM0d05YH3EADYOd0caNZrkS54TNVwmB5TCMw14bioVIbS7/bWVbJWWP0n63YuQZ2kb2ypsX6AFjIsJE90B0wgDKd/APcsR8YTESJzqHkYTcF8+sN9TNusTgPARG8sC7FcEaICNlRZMh+boU502+w2+X5yNLtn/tnmJP999pHmtRia2VN/wiSZeplDdJ80rJmwQWe5A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=uicoMoHs+Gl51hDkgrbL84Tv8MCml7k1ZtutNzfBkt0=; b=yGpZ9vDOQCPcoGGX3QLSZd3Nj/OoYCMDmpJU8zwu+7qLPVbVqXr7fpECtDpsk9Fbbu5Q5TtBmOXr5YPl87TtZuzJlmhOHBPQE/b+49HdeB3aaKJyFGX+lCL1emJo1YdXzbeuGsmM5DqTv4J8QN0dNHBLUgNh3+4jHAR7QPaxejE= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=citrix.com; From: Ross Lagerwall To: xen-devel@lists.xenproject.org Cc: Jan Beulich , Andrew Cooper , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= , "Daniel P. Smith" , =?UTF-8?q?Marek=20Marczykowski-G=C3=B3recki?= , Ross Lagerwall Subject: [PATCH v2 9/9] x86: Cleanup cr0.TS flag handling Date: Tue, 24 Mar 2026 18:19:37 +0000 Message-ID: <20260324181937.2465574-10-ross.lagerwall@citrix.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260324181937.2465574-1-ross.lagerwall@citrix.com> References: <20260324181937.2465574-1-ross.lagerwall@citrix.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: LO2P265CA0482.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:13a::7) To DS0PR03MB8272.namprd03.prod.outlook.com (2603:10b6:8:28f::23) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH8PR03MB8274:EE_|CH4PR03MB7771:EE_ X-MS-Office365-Filtering-Correlation-Id: ffecc672-2818-43f7-6bf0-08de89d1fbe0 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014|18002099003|22082099003|56012099003; X-Microsoft-Antispam-Message-Info: /6l+hMQhzcsVvsMMqztYAgsQ1uw77qDwZ7Hh33cn7kyUfRzHj0L27SYTXCuG3yODVI1Q8nuE99LFcdvQ+fFB6bOTvjmHCRPce1ZVwmBcIIvLyTDYyBJZNB9YYkjm8zOW1Ri/jqch9wCOLiuBUEVWCd3QVXwSEcnBEv/7/NKQ4iqDr3ZqdhradziBEbAb2zkIxB5d75evmUWo/7K3g70ndFJ2MZSC+TRn3m5HbCDx0BesXyK494CMy4v1npw3YhddqEBfGYfsDhX7FQVOqfoco8/HyKiTFT4IB7ScjHNJ6UZBxLgvcTKFjjdy/Ma1R0KDleDQN/y5SL7SjvE/POLdgQVBGM1bcQjTGoCjN1H7EI0cOtD4RsUzhAyymonefsRnR+FYOGPRrR3KkWRUuUhU8DzhCcYH41JKzWUi/NnEJ4stt2GsZoANpOiDqqFhJ5jktptCQaI2Ckw6SdWLbetew+VF4M+AktrmzxR3YQrZwUHmfx1IEZMDWPoZbaB/sPVL1+XByQ8pZcScOslE3Ug/poKSBDXU6NHw8f54dpjYVasjynEvlZt3cOMQgY5RShGRczQeyhdb15hLT0lPwS6bSzDf/Gk2T1CPQHP6jLlXRT7wys10fPhtF2SUBwyQQDFFqvfTE+46mtir7i3BF1BO1fNgJ+kyxCJk878MIqqPaouzIjjg7GCGgqNSIPGjt2zK11G3RkU9pZc6faFJ+oLDgQQueZgVvnnvlmZl7OjWOWw= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH8PR03MB8274.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(18002099003)(22082099003)(56012099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?9AMemaz4RmmNbySDbeFfBATWC1vjznrpfjPW48At6aiOP0/tJxkjvugb/Iwe?= =?us-ascii?Q?56hPBL8sP25Ffsb9dQl89I0S54Gj4OlVC943yJJGXbfeFDlHjgqESkjRbfGv?= =?us-ascii?Q?BLZnY31dofdK9YiDMCi2YiOhU+6xRgQcgmXzgaJO9AN0tWn2pUJTdVCvFok/?= =?us-ascii?Q?gsm9MLvQmFtlxYpfoEGCccxqFR+Zw+78VGKHTDztGX5GhSAQJkliF7xXysM3?= =?us-ascii?Q?z8VbjLrylA43b1gHXS13VtIRJcIyZcqtZzhPC/fsc3O6AyECx3UODNhXb/rk?= =?us-ascii?Q?4O3d9vFIWRIjabp3gI68EHuBwAn3PFzNYLdflqvlpQoXE19E8ovHUwtPUV8Y?= =?us-ascii?Q?ab9yhbmTFOOQkyvdUa1Gpoys355M9Js4D5fU/AwhkQrMSk/u/U7gj8rBCBsi?= =?us-ascii?Q?jIJdAvmpeSy1lvFWJO0OuGz2GndRIcmHKUeyLf7OB3kcxAzFCOQufqbCiAtt?= =?us-ascii?Q?z/YnYkSWxJ7GUS0PykbjbYRy0Kt9PD7dowXsDdPq3q7D4jbsxkcTSWB1rgDR?= =?us-ascii?Q?QFitJuYETVbf9zrYYupyehivog+c6DQaQaShWXbPTO6N8VN368huDE82pMC7?= =?us-ascii?Q?PXYYK8gaZ5ekeI5K7dV8cE/VOZCEdVKCG2ZLYu1uRinUQaZ+9pZ15V0uW1Cr?= =?us-ascii?Q?NPGr6JqFGH86IOhXuqQz/rRzXz423HdEoaFfDjRoZaUhbwhSeC1RUfxEwA24?= =?us-ascii?Q?yicClYxJgG7KJC5XyjRe0+qWIa1WQ5+KECT3zBisty4rXgKjKMKU42UaijCW?= =?us-ascii?Q?vTlMEYy+k9PsVzCU4uqZ3sUYkcfLsnbo5CFGbY81/ekCPSt9EprDGFrldOVM?= =?us-ascii?Q?0JP/Pb/FdGyymB/btxKccyke9FdKKOqDqRiGSrk7bYw+baV4K+Qd8QeCuZAM?= =?us-ascii?Q?vsY2SysQIux4s5g3kvP1O9LrMhHXIlv6XRnNFkZYHu/j1ecNEKbY46SdTB3E?= =?us-ascii?Q?bVZjEmT5RVpM5Mkn1MMXa6r4/OHU4kL847FYO2pSAb/1O3UfFA7+cvVMs9sO?= =?us-ascii?Q?jatOuswRzbLV1ytaHbSVQjsR8b+ZTro4/FtE8hd3AMt1rupI+I7aXkTVMz+x?= =?us-ascii?Q?Jv6p50ajkhai8gZso/uwl372ac1SOBL3c9K4G4R0+M1nVBbY6eZy8s7HvgBN?= =?us-ascii?Q?a46Mv3IWC02KRavcz6cUDZzeGEdZVKP9ZdGaGR3XS5nAvaAKrdkf2/hRFzFv?= =?us-ascii?Q?BJIEP3sfsrM/GtruA1KWgmgWhXBK9mQ0J8Vpn2N/60uHFmSsexcXLI8nfe2i?= =?us-ascii?Q?Gs8NfbaGoIxiE3lFdzbSkIdnAaisNQUA2X87NWOzV77b2MEyqTyADHzb2hZ6?= =?us-ascii?Q?512eHZ/S+2A9NsHcwBp93DWLMQu2M9RrID2pgjso8QTvZIYVPwkmfM0HMz2k?= =?us-ascii?Q?9H9VPld1DTgBp2Z3x030yRuWp39MHxkOh2PQzr9RyMYxRCweyNwA482Ufiqr?= =?us-ascii?Q?8709j4RLjznOPvwLwVt3fSbLb3jaw/29B9bGaeWEspgU0rMWiQ88ATTwA5Po?= =?us-ascii?Q?8T7/IqsQ8h3yre0+ssmZPn1aTAqpoAXihK1HSKOcfI8uKzInrdQLRHYhSEfn?= =?us-ascii?Q?vsNDzS0f4v2/Ke6eX/OrvFyfr3T3GCEliVhs1Ir7Tbt8dHy9MaWoYnnwi1pG?= =?us-ascii?Q?lWIv7m4M02pHj8YyFmQmHzPtaztswVjMECgP18lFrR7So3K+iXwYGKp2IniA?= =?us-ascii?Q?GaTGvqe6vk54RDL4nz0DgZRBkftLjycFQXho6B/sNGzVegC9s3d3dQp5jCX6?= =?us-ascii?Q?61V99xA0r3EhqjHVu8GyqYvwxS1FOIM=3D?= X-OriginatorOrg: citrix.com X-MS-Exchange-CrossTenant-Network-Message-Id: ffecc672-2818-43f7-6bf0-08de89d1fbe0 X-MS-Exchange-CrossTenant-AuthSource: DS0PR03MB8272.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Mar 2026 18:20:19.4613 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: eabTEZSijsvKce/IWG89zsPMQdR67WdKbsJHeNPmQY31xMIAlXT5bZpsDdw1ofnXzX7VYbkFkRseAoAXQSFTC4EoPcNnuXYUAITdPfqwHGU= X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH4PR03MB7771 X-purgate-ID: tlsNG-c201ff/1774376421-8215E488-4CF5DD21/0/0 X-purgate-type: clean X-purgate-size: 5182 X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1774376441619154100 Content-Type: text/plain; charset="utf-8" Setting/clearing the cr0.TS bit is serializing and setting the cr0.TS bit in particular requires a write to CR0 which is implemented in microcode and is very slow. Therefore and with lazy FPU removed, avoid setting/clearing the cr0.TS flag on context switch except when saving/restoring the FPU for a PV guest. After this, Xen's context switch code and idle CPUs run with the TS bit cleared. An unfortunate side effect of this is that any mistaken use of XMM registers or extended state will not trap and will therefore be more difficult to detect. Signed-off-by: Ross Lagerwall --- In v2: * Add more justification to the commit message. * Always call clts() in vcpu_save_fpu(). xen/arch/x86/cpu/common.c | 3 --- xen/arch/x86/hvm/emulate.c | 14 ++------------ xen/arch/x86/i387.c | 19 +------------------ xen/arch/x86/include/asm/i387.h | 1 - xen/common/efi/runtime.c | 2 +- 5 files changed, 4 insertions(+), 35 deletions(-) diff --git a/xen/arch/x86/cpu/common.c b/xen/arch/x86/cpu/common.c index 5ac76897ae47..057592b7c870 100644 --- a/xen/arch/x86/cpu/common.c +++ b/xen/arch/x86/cpu/common.c @@ -887,9 +887,6 @@ void cpu_init(void) /* Install correct page table. */ write_ptbase(current); =20 - /* Ensure FPU gets initialised for each domain. */ - stts(); - /* Reset debug registers: */ write_debugreg(0, 0); write_debugreg(1, 0); diff --git a/xen/arch/x86/hvm/emulate.c b/xen/arch/x86/hvm/emulate.c index 48c7320360c7..f3aae158e9f8 100644 --- a/xen/arch/x86/hvm/emulate.c +++ b/xen/arch/x86/hvm/emulate.c @@ -2527,14 +2527,8 @@ static int cf_check hvmemul_get_fpu( * Latch current register state so that we can back out changes * if needed (namely when a memory write fails after register state * has already been updated). - * NB: We don't really need the "enable" part of the called functi= on - * (->fpu_dirtied set implies CR0.TS clear), but the additional - * overhead should be low enough to not warrant introduction of yet - * another slightly different function. However, we need to undo t= he - * ->fpu_dirtied clearing the function does as well as the possible - * masking of all exceptions by FNSTENV.) */ - save_fpu_enable(); + vcpu_save_fpu(curr); if ( (fpu_ctxt->fcw & 0x3f) !=3D 0x3f ) { uint16_t fcw; @@ -2572,12 +2566,8 @@ static void cf_check hvmemul_put_fpu( * Latch current register state so that we can replace FIP/FDP/FOP * (which have values resulting from our own invocation of the FPU * instruction during emulation). - * NB: See also the comment in hvmemul_get_fpu(); we don't need to - * set ->fpu_dirtied here as it is going to be cleared below, and - * we also don't need to reload FCW as we're forcing full state to - * be reloaded anyway. */ - save_fpu_enable(); + vcpu_save_fpu(curr); =20 if ( boot_cpu_has(X86_FEATURE_FDP_EXCP_ONLY) && !(fpu_ctxt->fsw & ~fpu_ctxt->fcw & 0x003f) ) diff --git a/xen/arch/x86/i387.c b/xen/arch/x86/i387.c index 9acaaf4673df..c6796bc97b70 100644 --- a/xen/arch/x86/i387.c +++ b/xen/arch/x86/i387.c @@ -176,9 +176,6 @@ void vcpu_restore_fpu(struct vcpu *v) { ASSERT(!is_idle_vcpu(v)); =20 - /* Avoid recursion */ - clts(); - if ( cpu_has_xsave ) fpu_xrstor(v, XSTATE_ALL); else @@ -193,7 +190,7 @@ void vcpu_restore_fpu(struct vcpu *v) * On each context switch, save the necessary FPU info of VCPU being switc= h=20 * out. It dispatches saving operation based on CPU's capability. */ -static bool _vcpu_save_fpu(struct vcpu *v) +void vcpu_save_fpu(struct vcpu *v) { ASSERT(!is_idle_vcpu(v)); =20 @@ -204,20 +201,6 @@ static bool _vcpu_save_fpu(struct vcpu *v) fpu_xsave(v); else fpu_fxsave(v); - - return true; -} - -void vcpu_save_fpu(struct vcpu *v) -{ - _vcpu_save_fpu(v); - stts(); -} - -void save_fpu_enable(void) -{ - if ( !_vcpu_save_fpu(current) ) - clts(); } =20 /* Initialize FPU's context save area */ diff --git a/xen/arch/x86/include/asm/i387.h b/xen/arch/x86/include/asm/i38= 7.h index fe5e4419b6f4..0717005d31f0 100644 --- a/xen/arch/x86/include/asm/i387.h +++ b/xen/arch/x86/include/asm/i387.h @@ -29,7 +29,6 @@ struct ix87_env { =20 void vcpu_restore_fpu(struct vcpu *v); void vcpu_save_fpu(struct vcpu *v); -void save_fpu_enable(void); int vcpu_init_fpu(struct vcpu *v); void vcpu_destroy_fpu(struct vcpu *v); =20 diff --git a/xen/common/efi/runtime.c b/xen/common/efi/runtime.c index 982e42e8f341..0f1cc765ec5e 100644 --- a/xen/common/efi/runtime.c +++ b/xen/common/efi/runtime.c @@ -94,7 +94,7 @@ struct efi_rs_state efi_rs_enter(void) return state; =20 state.cr3 =3D read_cr3(); - save_fpu_enable(); + vcpu_save_fpu(current); asm volatile ( "fnclex; fldcw %0" :: "m" (fcw) ); asm volatile ( "ldmxcsr %0" :: "m" (mxcsr) ); =20 --=20 2.53.0