From nobody Sat May 23 21:05:07 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=1779110092; cv=pass; d=zohomail.com; s=zohoarc; b=fDBTraT4LMD05szDQF0m5b+q1AdVNHxnr18LJOegk0A2n3DKiCJBb6uLnlMo4mjqWeCwN9ATrGvWoVHT1G6G7F6ZRpZ4YYmC5bZcOscYV3guUbBQQfZXEYVyViQgag5DGi0gWNOlQX/emIBvsrNqlamSXz7hPsv51m9p6xZKi0Y= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779110092; 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=YmWCXDgj2ZZ2XpOGe/Bk8AcX6edLOrCqiS8EDz8T5GY=; b=j5g+cxSRuxELC6sSD75sGZ+/Q6Odolycy9VRcphBWk2oHEB9o2qjzCH0eK1fHBxvsrNEkSQosmiBCU2mnxpVKopOhHg4k+x5u5jeupZYDyxsf/3gmvZITQowfL8xFNjDaCEMchRaPI5u52btHNGEyDyZpjVRiZgUmgNKaPkvMpY= 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 1779110092236429.8009101891246; Mon, 18 May 2026 06:14:52 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1311843.1581973 (Exim 4.92) (envelope-from ) id 1wOxnb-0008Jy-L7; Mon, 18 May 2026 13:14:23 +0000 Received: by outflank-mailman (output) from mailman id 1311843.1581973; Mon, 18 May 2026 13:14:23 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wOxnb-0008Jr-Ha; Mon, 18 May 2026 13:14:23 +0000 Received: by outflank-mailman (input) for mailman id 1311843; Mon, 18 May 2026 13:14:23 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wOxna-0008JZ-To for xen-devel@lists.xenproject.org; Mon, 18 May 2026 13:14:23 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wOxna-009DFo-64 for xen-devel@lists.xenproject.org; Mon, 18 May 2026 15:14:22 +0200 Received: from [10.42.69.2] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 6a0b10ab-e002-0a2a0a5209dd-0a2a4502a610-10 for ; Mon, 18 May 2026 15:14:21 +0200 Received: from [52.101.201.42] (helo=PH7PR06CU001.outbound.protection.outlook.com) by tlsNG-720697.mxtls.expurgate.net with ESMTPS (eXpurgate 4.56.1) (envelope-from ) id 6a0b10ab-af86-0a2a45020019-3465c92ae39e-3 for ; Mon, 18 May 2026 15:14:20 +0200 Received: from CH8PR03MB8274.namprd03.prod.outlook.com (2603:10b6:610:2ba::5) by BY5PR03MB5111.namprd03.prod.outlook.com (2603:10b6:a03:1e2::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.25.24; Mon, 18 May 2026 13:14: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%7]) with mapi id 15.21.0025.022; Mon, 18 May 2026 13:14: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=vGSterGOJEwV89HAjCcxXmzfJvI0aQOE4d5iYZ7EDqVjeCFXTg0tJvOnrl79P51Mm8nFx1BrC+VuVZXq75M5sLrXhBd0avyLHEqaTUYOd7SBvpsjk5sFiZ+Nj1YJPg0xs7b2yEhlL/Vy5AWQG9CabH9dTjqkO4JnLOLfHghBRPxoXKhnKLyHkMPapwT9MpbGA6JdwN+i9rwrr1F2gR59P+NnqMcFooLgmsZAxDJ8GB1ZQEZwjPKC5TK9CCWKz9iZk8dgt5K6kSKoFk4N34DYMJx8R7Qn7QnrJOwHEEH/Vd3nrP0ACoQ2U76rxMkIghFq48i8ZashN7qtnIJ+ZQ2Nmg== 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=YmWCXDgj2ZZ2XpOGe/Bk8AcX6edLOrCqiS8EDz8T5GY=; b=eO+IR2qpYQqOoEyb3Gciu7dL//aZwy2yiDSNAtoYKrmGfut4WFJfiWBsjYaqvnAqOwBGLI+hZ/YI9FNA7C/l2br9RZ5Pj/Ybj5PKIwoCifL0cvfigZLoFsYe3777LnjA6/loFnGGO6zgyTNxJ/fRJzIRKteV05vpAoDm7qv4GeGp7YNncAxwss3yf5nQiSVDj/KMCsxGpckp8G2pryvfasUsVjGRHprOKdDQhf3CmNPmi3ao2Zq1fB5FhYBQR6f/VrGhEjWbKUWEpBeZu3Uo6BBMCMDTs3b9zefheXiNgHmjM8rL2X8q8FRsveG9km5ocVP/0UJEySx1jSJBqELGAw== 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=YmWCXDgj2ZZ2XpOGe/Bk8AcX6edLOrCqiS8EDz8T5GY=; b=pIsHuvXcGYauXgdb/sNX6a+cd1oC3BWdojgZiMQdR/6hrh+AmOAlWauOdHCcIH2YWEXKDmYOJb5CbGJVQ/erQi66tRCBSL9ZuytG1THS1kuXWtwvdIXrjWmhPe/P3Dz/hgn88rL6y1CgVBzOAtjBTAp5aEHDVTdLiDfs/w+duck= 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: Ross Lagerwall , Jan Beulich , Andrew Cooper , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= , Teddy Astie , Jason Andryuk Subject: [RFC v1 1/7] x86/hvm: Move description into hvm_emulate_ctxt Date: Mon, 18 May 2026 14:13:58 +0100 Message-ID: <20260518131404.3716969-2-ross.lagerwall@citrix.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260518131404.3716969-1-ross.lagerwall@citrix.com> References: <20260518131404.3716969-1-ross.lagerwall@citrix.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: LO4P265CA0036.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:2ae::12) To CH8PR03MB8274.namprd03.prod.outlook.com (2603:10b6:610:2ba::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH8PR03MB8274:EE_|BY5PR03MB5111:EE_ X-MS-Office365-Filtering-Correlation-Id: 582fbf76-f75a-4997-4cfd-08deb4df5c3a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014|22082099003|56012099003|18002099003|3023799003|11063799003; X-Microsoft-Antispam-Message-Info: HRCXS+IwIDFXK82aFXQSl5d7uD1HxrDKfqPZWzTLXPDKOnq4FIo91PWwnLSi5RoQT4IiHDqXbcdDiKGaDykmQH3HwcLOpo/fuFRyRNnwJwKtLvv1qsuWkPd9dNBstnXox7/78bgI2g2xIIfvgkcmLuk1H/8x4koIFzeYDxq3YKQUHCFr2CR2HN5XOfbJQEZxMXUFfeSopO9vAmA54kejpuOMRjMKe92Ik1TaQJ2F9DilGdfwncCwbWBCNzBYAC4NV8dcr8+uiGIt3Wve7gjuZqjh2D1nho59kl09a6hEIobVR20puvNidPp5rs3dWzgIbuHO2PGM80kzFbYMoEYmB369c3Ivpbd3mm/shJt6sB9h1/JtvNqOcz5LjP3RBiBQiHTc7TSR7DwW/D//Xp9flxL3yI8qnHi89ZqCdO9k3tpKicwVOeD4gSUpuaCtyoAXxMsXTxWfRaWp61Vbwj/dkSfCs5+gdbyHymYOE2iiKk7WNEbRjr6Amk+r0+ZL9kcg3+gyF6vNhKtpZ9nGxP9AZWVP9ic6IKLee1YJdy0LfFEcfy6rbbkq3+/LwCoA+iwu7PklPhc1WEtfKTtaO51eYw/3tov1XLaNNItJpClg55iIRiBQOzQcZlO+Oh1dzQzPKw8jcAYiipQvajuq0dyv+7vnek0Hdu+/4WiEEuPMrmk80HsNy3gU/qbx9RqdBkmC 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)(22082099003)(56012099003)(18002099003)(3023799003)(11063799003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?O+A/Bl2ZWPhuTYGHSgaTqyHRBclGHAaju5oZydYZgY481LSzSKtm7hZ/8RAs?= =?us-ascii?Q?2fpDlgDx4pp7mrNS28I6s5CKJ1dAYJpv2F+ykQ2qGz2rN/FfV/LqoVTkdFBk?= =?us-ascii?Q?vjijCDfMKujpnxhevqzKVr/inzIbv2U4gpYqiQt42CL5k47a9qI2pCxJCPe9?= =?us-ascii?Q?8haDCLm/x0GhVByGI5BHnMMbxSMmUeoS953wLZIOXXxOuHaWMQNkXOOC2MNP?= =?us-ascii?Q?6O4uqjWlonDGksZY+CKGWIFbSXhvAe/nTJU05eBJj5lnb35ZeANqueUbuoQX?= =?us-ascii?Q?Gpym9CPVRtMA3vunQw5Mh3ellDMwVg3lozjEEw4QneLB1PGZ7W+wvlCW7TsN?= =?us-ascii?Q?5Mfs2+5tQqq9tAeNn284g5hy8lcpoQEQoHr5IPuevepY5sm/XJ7ZjkY2tUCo?= =?us-ascii?Q?Nnk+Qwyq6t6nWkFszQyQAIPccTphyr92MwjGhJgI1lB/BH7Lu1U5L8SIL4ET?= =?us-ascii?Q?jqdaIA4yJyXnOtkybD5A6azAJIRmy+Yu+UM/ZzyYFhO3DOD6TSmBiKTImHt1?= =?us-ascii?Q?e3auodqeZDXYBmzz7GyIT1n3tLXhIaKoYe6vNiEk1GBCdkH3a3iYvdAKwA0E?= =?us-ascii?Q?mmGxeOWnzKOA+XloRIUFqgY00PotJaQGXX9iAvsO4zZYMh2Q+1RJW1WbNLgT?= =?us-ascii?Q?4beH+tOh9VX6zfJwEG0tNp4t9VidSCJhnOaGMIwMjdgqt8HBBtED64+YoA2T?= =?us-ascii?Q?QGjt9dbxdfi7L/Z3BMpNIJgBrDBkRySkpe74RV0GzfIAUDQnyEjPtwWXtiGq?= =?us-ascii?Q?H5S5bXnzG1y5WoYXIfd24PJeWFcKGZNH3wsM41kaf+PhprYa8LibwPELSrdm?= =?us-ascii?Q?JcHZtG48+AH2PEy9gD18iD4qhGqdRfoYqikNa7xIiLghfnjqITSfFlqHFSzN?= =?us-ascii?Q?ipQfuEgeyUh1YlQqLr8lgNp8Gr+7mkZ5wDYu8WKPL9gnTl0R1JlSg58C9dCh?= =?us-ascii?Q?Sw/X0qLkDd2r3jMN4oySLfqreGfelOiE2BL9KLYSExShJrn0vHSF+h/P2fVE?= =?us-ascii?Q?76zh2Es48XNMPn03Lk0UiPXRM/dkp7DMxo5gdgYRCwj2ZLvv6rTvu4hmwCTJ?= =?us-ascii?Q?1LoTQOYxkM93x3kuX3NsEDI+1hpRTv+6Fpr4FMTS/fukDMRyW9Ufl5X0kDMK?= =?us-ascii?Q?Aob52rR601d43l7afqmwEAgc4Fggqh3eYLZ0uymeMPX46OJtwP4/73NKkyPs?= =?us-ascii?Q?xbyZeeZuu0ceYnQdE9jLzbXVhcnDZhsqHTVEUoCS3lomKZiHB4+L7T3/aGvh?= =?us-ascii?Q?2gjO4104l0ZIDIDd/kSMphAwqgC49BY2KQwVgZVyTzEV+NoV9zQslGusxDwA?= =?us-ascii?Q?poP2kS++/1o+14/+zuaf/dmKoJUGExmlJGsbfGzQEw7Hc3BWzR6vunhkZdMV?= =?us-ascii?Q?xWE4uPZqcv6I0ZSdU4l/4AMKE1p0ci7ay5SP2ZNrdloLqLYW5aIdHA64zoWo?= =?us-ascii?Q?+Gc2JA2Qzkd6wnw2+C7U4QCE7v4pLw9VHiJ4IXkXImJy2SPQSB1sRWSKq8J5?= =?us-ascii?Q?DAXIiygnTH+2b6YqHSjE6dJmzBdwdZuBs6XmNdHiytROKhH6OtDbdbXbQfc1?= =?us-ascii?Q?dZFOTz7ucEr5QWpTh4R6aUxMX7TP8CaOJRtcUvlt5tSHiuK0Wex4md2gNfYK?= =?us-ascii?Q?P1PFi1d664pd01+uZQyTSawXYhDcHCB627uuJhxCBUx/rVdY9W5n2F5ov3Ln?= =?us-ascii?Q?Bz6GJxCCaQw+9iPXBC3drVvrviSTU/kRdClE2hKun7tb1u7s1ItWo7FUOouM?= =?us-ascii?Q?E8aaiXzx/erFcxgL03V/ncL0GeLPeto=3D?= X-OriginatorOrg: citrix.com X-MS-Exchange-CrossTenant-Network-Message-Id: 582fbf76-f75a-4997-4cfd-08deb4df5c3a X-MS-Exchange-CrossTenant-AuthSource: CH8PR03MB8274.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 May 2026 13:14:15.2762 (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: BJL1Gzg3GvdpT0EYqhGUv4bpsvwT0jKT/Bvjdpkftdn1+64WWuP9fw9z6lzHSg5RJL/xJ37scNXpmSh40Y4tFuRIiBYxz/OEJa3oYIq6OiM= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR03MB5111 X-purgate-ID: tlsNG-720697/1779110061-8077A161-4D9ECB49/0/0 X-purgate-type: clean X-purgate-size: 6095 X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1779110093726154100 Content-Type: text/plain; charset="utf-8" This will be needed to split up hvm_emulate_one_insn(). Signed-off-by: Ross Lagerwall --- xen/arch/x86/hvm/emulate.c | 4 +++- xen/arch/x86/hvm/hvm.c | 2 +- xen/arch/x86/hvm/io.c | 6 +++--- xen/arch/x86/hvm/ioreq.c | 2 +- xen/arch/x86/hvm/svm/emulate.c | 4 ++-- xen/arch/x86/hvm/vmx/realmode.c | 2 +- xen/arch/x86/include/asm/hvm/emulate.h | 2 ++ 7 files changed, 13 insertions(+), 9 deletions(-) diff --git a/xen/arch/x86/hvm/emulate.c b/xen/arch/x86/hvm/emulate.c index bb1bb03ac4e9..a96d7814f91c 100644 --- a/xen/arch/x86/hvm/emulate.c +++ b/xen/arch/x86/hvm/emulate.c @@ -2868,7 +2868,7 @@ void hvm_emulate_one_vm_event(enum emul_kind kind, un= signed int trapnr, struct hvm_emulate_ctxt ctx =3D {}; int rc; =20 - hvm_emulate_init_once(&ctx, NULL, guest_cpu_user_regs()); + hvm_emulate_init_once(&ctx, NULL, NULL, guest_cpu_user_regs()); =20 switch ( kind ) { @@ -2929,6 +2929,7 @@ void hvm_emulate_one_vm_event(enum emul_kind kind, un= signed int trapnr, void hvm_emulate_init_once( struct hvm_emulate_ctxt *hvmemul_ctxt, hvm_emulate_validate_t *validate, + const char *descr, struct cpu_user_regs *regs) { struct vcpu *curr =3D current; @@ -2941,6 +2942,7 @@ void hvm_emulate_init_once( hvmemul_get_seg_reg(x86_seg_ss, hvmemul_ctxt); =20 hvmemul_ctxt->validate =3D validate; + hvmemul_ctxt->descr =3D descr; hvmemul_ctxt->ctxt.regs =3D regs; hvmemul_ctxt->ctxt.cpu_policy =3D curr->domain->arch.cpu_policy; hvmemul_ctxt->ctxt.force_writeback =3D true; diff --git a/xen/arch/x86/hvm/hvm.c b/xen/arch/x86/hvm/hvm.c index f759a397c557..de399bd9024a 100644 --- a/xen/arch/x86/hvm/hvm.c +++ b/xen/arch/x86/hvm/hvm.c @@ -3835,7 +3835,7 @@ void hvm_ud_intercept(struct cpu_user_regs *regs) bool should_emulate =3D false; struct hvm_emulate_ctxt ctxt; =20 - hvm_emulate_init_once(&ctxt, NULL, regs); + hvm_emulate_init_once(&ctxt, NULL, NULL, regs); =20 if ( opt_hvm_fep ) { diff --git a/xen/arch/x86/hvm/io.c b/xen/arch/x86/hvm/io.c index 23a5ea0e6197..d9838c36d330 100644 --- a/xen/arch/x86/hvm/io.c +++ b/xen/arch/x86/hvm/io.c @@ -55,16 +55,16 @@ bool hvm_emulate_one_insn(hvm_emulate_validate_t *valid= ate, const char *descr) struct hvm_emulate_ctxt ctxt; int rc; =20 - hvm_emulate_init_once(&ctxt, validate, guest_cpu_user_regs()); + hvm_emulate_init_once(&ctxt, validate, descr, guest_cpu_user_regs()); =20 switch ( rc =3D hvm_emulate_one(&ctxt, VIO_no_completion) ) { case X86EMUL_UNHANDLEABLE: - hvm_dump_emulation_state(XENLOG_G_WARNING, descr, &ctxt, rc); + hvm_dump_emulation_state(XENLOG_G_WARNING, ctxt.descr, &ctxt, rc); return false; =20 case X86EMUL_UNRECOGNIZED: - hvm_dump_emulation_state(XENLOG_G_WARNING, descr, &ctxt, rc); + hvm_dump_emulation_state(XENLOG_G_WARNING, ctxt.descr, &ctxt, rc); hvm_inject_hw_exception(X86_EXC_UD, X86_EVENT_NO_EC); break; =20 diff --git a/xen/arch/x86/hvm/ioreq.c b/xen/arch/x86/hvm/ioreq.c index a5fa97e149ba..42ff796c6cb9 100644 --- a/xen/arch/x86/hvm/ioreq.c +++ b/xen/arch/x86/hvm/ioreq.c @@ -39,7 +39,7 @@ bool arch_vcpu_ioreq_completion(enum vio_completion compl= etion) { struct hvm_emulate_ctxt ctxt; =20 - hvm_emulate_init_once(&ctxt, NULL, guest_cpu_user_regs()); + hvm_emulate_init_once(&ctxt, NULL, NULL, guest_cpu_user_regs()); vmx_realmode_emulate_one(&ctxt); hvm_emulate_writeback(&ctxt); =20 diff --git a/xen/arch/x86/hvm/svm/emulate.c b/xen/arch/x86/hvm/svm/emulate.c index 1f5436c8ea5d..1dd830a31bd7 100644 --- a/xen/arch/x86/hvm/svm/emulate.c +++ b/xen/arch/x86/hvm/svm/emulate.c @@ -71,7 +71,7 @@ unsigned int svm_get_insn_len(struct vcpu *v, unsigned in= t instr_enc) #endif =20 ASSERT(v =3D=3D current); - hvm_emulate_init_once(&ctxt, NULL, guest_cpu_user_regs()); + hvm_emulate_init_once(&ctxt, NULL, NULL, guest_cpu_user_regs()); hvm_emulate_init_per_insn(&ctxt, NULL, 0); state =3D x86_decode_insn(&ctxt.ctxt, hvmemul_insn_fetch); if ( IS_ERR_OR_NULL(state) ) @@ -116,7 +116,7 @@ unsigned int svm_get_task_switch_insn_len(void) struct x86_emulate_state *state; unsigned int emul_len, modrm_reg; =20 - hvm_emulate_init_once(&ctxt, NULL, guest_cpu_user_regs()); + hvm_emulate_init_once(&ctxt, NULL, NULL, guest_cpu_user_regs()); hvm_emulate_init_per_insn(&ctxt, NULL, 0); state =3D x86_decode_insn(&ctxt.ctxt, hvmemul_insn_fetch); if ( IS_ERR_OR_NULL(state) ) diff --git a/xen/arch/x86/hvm/vmx/realmode.c b/xen/arch/x86/hvm/vmx/realmod= e.c index ff44ddcfa627..9879533280d0 100644 --- a/xen/arch/x86/hvm/vmx/realmode.c +++ b/xen/arch/x86/hvm/vmx/realmode.c @@ -163,7 +163,7 @@ void vmx_realmode(struct cpu_user_regs *regs) if ( intr_info & INTR_INFO_VALID_MASK ) __vmwrite(VM_ENTRY_INTR_INFO, 0); =20 - hvm_emulate_init_once(&hvmemul_ctxt, NULL, regs); + hvm_emulate_init_once(&hvmemul_ctxt, NULL, NULL, regs); =20 /* Only deliver interrupts into emulated real mode. */ if ( !(curr->arch.hvm.guest_cr[0] & X86_CR0_PE) && diff --git a/xen/arch/x86/include/asm/hvm/emulate.h b/xen/arch/x86/include/= asm/hvm/emulate.h index 178ac32e151f..2801d14d5455 100644 --- a/xen/arch/x86/include/asm/hvm/emulate.h +++ b/xen/arch/x86/include/asm/hvm/emulate.h @@ -30,6 +30,7 @@ struct hvm_emulate_ctxt { * filtering. */ hvm_emulate_validate_t *validate; + const char *descr; =20 /* Cache of 16 bytes of instruction. */ uint8_t insn_buf[16]; @@ -74,6 +75,7 @@ void hvm_emulate_one_vm_event(enum emul_kind kind, void hvm_emulate_init_once( struct hvm_emulate_ctxt *hvmemul_ctxt, hvm_emulate_validate_t *validate, + const char *descr, struct cpu_user_regs *regs); /* Must be called once before each instruction emulated. */ void hvm_emulate_init_per_insn( --=20 2.53.0 From nobody Sat May 23 21:05:07 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=1779110096; cv=pass; d=zohomail.com; s=zohoarc; b=P7IBdFqLaBO3tBAb8rdroYIXlNYu5iKjiC9pV1nbBA8RFAch0LtbXqvLc/ehqvzZeaqohiKOs7MJk6nL9MsIMC8jrhzBXS2GWP4RCXDUDRajDIqsxljpXHPRQLRRhq0uqL92eaA2RQlh2BUt/yrEdzuqhJ9f8jYJfhLyugPAVB0= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779110096; 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=nFgETPH49yxWfA5mC3say2GUzcswnrvzxCdDMHgH7g8=; b=OGJuOeiCaWIXUOrki0jLTyRp994K1eC1kdYXFzuwQigrHYtOKsU7lh2eDVVpO352CoXrvHjRz2DWNB0FUUbjqqVCKewF0O4acQBF/QqL0+zflSBi61Wary9yDLTSzTs4XN5JrKE6Ry+ZVpbCMYNUKhJEmhEW6j8ISo561rp7BxY= 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 1779110096848858.6223156055227; Mon, 18 May 2026 06:14:56 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1311844.1581983 (Exim 4.92) (envelope-from ) id 1wOxng-00007g-0U; Mon, 18 May 2026 13:14:28 +0000 Received: by outflank-mailman (output) from mailman id 1311844.1581983; Mon, 18 May 2026 13:14:27 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wOxnf-00007V-U3; Mon, 18 May 2026 13:14:27 +0000 Received: by outflank-mailman (input) for mailman id 1311844; Mon, 18 May 2026 13:14:26 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wOxne-00006Q-Ev for xen-devel@lists.xenproject.org; Mon, 18 May 2026 13:14:26 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wOxnd-003Jkw-Ra for xen-devel@lists.xenproject.org; Mon, 18 May 2026 15:14:25 +0200 Received: from [10.42.69.9] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 6a0b10ad-2eae-0a2a0a5409dd-0a2a4509864e-12 for ; Mon, 18 May 2026 15:14:25 +0200 Received: from [52.101.201.59] (helo=PH7PR06CU001.outbound.protection.outlook.com) by tlsNG-bad1c0.mxtls.expurgate.net with ESMTPS (eXpurgate 4.56.1) (envelope-from ) id 6a0b10ae-2497-0a2a45090019-3465c93bafe8-3 for ; Mon, 18 May 2026 15:14:24 +0200 Received: from CH8PR03MB8274.namprd03.prod.outlook.com (2603:10b6:610:2ba::5) by BY5PR03MB5111.namprd03.prod.outlook.com (2603:10b6:a03:1e2::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.25.24; Mon, 18 May 2026 13:14:20 +0000 Received: from CH8PR03MB8274.namprd03.prod.outlook.com ([fe80::ebe2:32c1:d2be:a096]) by CH8PR03MB8274.namprd03.prod.outlook.com ([fe80::ebe2:32c1:d2be:a096%7]) with mapi id 15.21.0025.022; Mon, 18 May 2026 13:14:20 +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=jDFmTrjy7owN6gd0JBZmZDBZg7kverEU5ObP3EVcraemPxWE1g6bAILrNHfyqFTpjWnFgejMaKbGM+c8tUDwGgI+iDPMzIWgE+VqZ8wQAp2I6KfTNA+Qd5PgIFMm6bXkGoVRxolDpdxD2sLt3APKX87tdBqcMxfzGc1enPclHMWRhEiDvlQshkM2eIITc0a1lrGXnTyiM0bJhIRjYVrWPWAbUObrIXf9Li4/0x7ixrs/W+ewZHsCTq1LnXAO3x9E1h7e4Rft2GETsW8BHcVse2a+P/AfWmwVmio5LhvuthmtR4RXtGAnj+dKqAipfaIdhxNStC40d1f3UzuvvGaDKA== 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=nFgETPH49yxWfA5mC3say2GUzcswnrvzxCdDMHgH7g8=; b=udxHn8CJtVnrqZ5tufSoVXYp8zYesPo59DuYSGb8hYL21pyp/XZs4YkSPn3/swfKGoVlICdvTVt7fzkA/ReRPj6DXKMVD2WxB0nosx2GVd3qDqXvJD/GCfNtMIQ4fZwmR37OzOmWPpk/ERYehCkhnFxQD3X7OUVu9EsCy0PoyFvAhhaihViEazkRPEfduMx+Kcq7kwkMt2AwhlSTZNnYgrRh+pcMugKJ8eOGSkx3gXThVKm+nOwG4Sbej+MNCAZVqZKRF35z5w0sbzr0YRcQOPPZZGPA2oqbPo/BEsD9xYNsKuMP+fEWIy9qI9/g2ArOFHXYMnVCbNCipkPaclY+hA== 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=nFgETPH49yxWfA5mC3say2GUzcswnrvzxCdDMHgH7g8=; b=vNPWkeziUzv6kN9xIHUSDgDMFuF6UkixhAdziRpfrfv/Yuxrk0Rf2L/zt3FVkYyCikWymVSRrksuRRcgko//DA/euk3E2bfHjsxl3o+7yQaCucF2xDYaCBgv8gHDQSFlJYfyLCdkODkwZcOhiebaZV29zTTaGbuIQGczTVPNDIk= 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: Ross Lagerwall , Jan Beulich , Andrew Cooper , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= , Teddy Astie Subject: [RFC v1 2/7] x86/hvm: Introduce hvm_emulate_one_ctxt Date: Mon, 18 May 2026 14:13:59 +0100 Message-ID: <20260518131404.3716969-3-ross.lagerwall@citrix.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260518131404.3716969-1-ross.lagerwall@citrix.com> References: <20260518131404.3716969-1-ross.lagerwall@citrix.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: LO0P265CA0003.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:355::12) To CH8PR03MB8274.namprd03.prod.outlook.com (2603:10b6:610:2ba::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH8PR03MB8274:EE_|BY5PR03MB5111:EE_ X-MS-Office365-Filtering-Correlation-Id: ebfe7f42-f7bc-42d7-278c-08deb4df5f2b X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014|22082099003|56012099003|18002099003|3023799003|11063799003; X-Microsoft-Antispam-Message-Info: FZ45hwJG6OYsQZrzeRBNo4iueIbngJj5suVPTM+/TuAYMnsWLP/pGTvGDPeQ770bboSdED3s+WNdnblov+qPcxAs1+NacUtqJVDW9D3b9AlJoFrl/IU5+CuXLMF2lRKWwRMgsa0Qtn5LgHdSKnPdO6tTQSYnH7nlqeTYOSgLoR+0AhFhllgjfHRlUXnJI0nkyNJf4+6aY5L6U68kxc30ZJEnSnhAXGBdqmBABUStysuBEm00TQP037l3wuEKK7dPOOwGW7zjfTHfU7cmIMMVtBYrE/hMl7NPW+HG/9H0Ig/MhiW9GEsZcMTpsnkR5j0loQSJkHHB5OKPWhp/Q/7ShCX3uQTU7y+NamY0qKnIJK3p4Pj4GcB+8EaTx/xFSgcuimIy0PGV2Ynbbzuil6BQpg2DLJbggBoVolLMzA+N0JBBPUTCP+4W4iFXCk1XsFaeQRtRpNcNVbgkE66kJ5/5Zcrp8dPwDdiI/27AjO2jLhGTp4pS8RtGgnrNTiOIQVc356En0bZWTB5et3WzQKmv/CGrRZPmvo4pMG2sXjQbbA07UR3xhOa0WmFDiKwITCPWrLUsgkV0uplZhJBdyunQ/veR8jfglPjJupLO7l/fO1A7UQJHW7CczGIwQhekuYQn+3KOW4alinHizVHDHLjmCQocqGYOXRemq3WYzl18VkLGw4j5bXJWYodSPwNRmotz 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)(22082099003)(56012099003)(18002099003)(3023799003)(11063799003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?rmcuoXuEGay1YjauErUju+7F5CV/r51/TDEqCKEfQ/MzQnArV8ezD1sAqrHk?= =?us-ascii?Q?ACCZUnHetQ4b830KYIxx62PWNou28AxbTWqCc6PEKNEC7mtw1BLLhjOhGjfk?= =?us-ascii?Q?wKVSERZW1GMMa8vPHwzoX15cYZ8joeoQaS8AiJpa/cAqUya96lWKOJYzAwXM?= =?us-ascii?Q?Nn51X8F21yO9vlTTvCk1bZh7/kM1WMgmb1PJZS/Biy9XhcKFo9HieNN4ZTWa?= =?us-ascii?Q?U2jwQQsf1b8DiOH9tyuRl1N8lYIQjrkzSUoIVZJYHsqadb1KTBrn7OiI/f17?= =?us-ascii?Q?rCui8ub6sEDyyTECFUlKODU4rFlrFClpy0K6vRFZHZQqZsftIK8xrZcz/px6?= =?us-ascii?Q?lKEjGdaNQVQTLpQFzXP0ba887ua4TFuU6JVAGEHUvMFXsl8llpxtkRZbjmPA?= =?us-ascii?Q?oMjh6QaYy2sFwwwyQRK2UZI/zFLpKwKdLjblvW21DN2cFFujI9lYrL0a+A5B?= =?us-ascii?Q?3bXWG8LPcST+aiZiCY7tsb7zRtKekYGOtMaG5QPFR6PrybA+6y/3PL10rJCU?= =?us-ascii?Q?eIGEOl2wUzLQMSrbUTlDUDB5BwgBqo88BgWAMRn8kOYF9rlv5ZmbmJ8we73r?= =?us-ascii?Q?ov9QU5gncN+U9RUH11WnKho0jw9BBiEHk/7RZwwM3mL0Uayn7K9zJm2hdn/j?= =?us-ascii?Q?k6HBsvkShl1RvWgpoFeL6YCBIepGn+kJv8tN2tXSNdsANzj+1jouIF+h4mGt?= =?us-ascii?Q?LJnTl43HGyXaSXji/cZmkd5Xlku2qX2ezfif1O0x6IhvQZa57cK04DH3HOYT?= =?us-ascii?Q?osLXMN1a9EQL9b3rn+qTR8dTmpYGTXFpkeC5G5H3mQzR0DeUPQL5+9Zu5g1x?= =?us-ascii?Q?5LpSobY3ZVyYgnQqxRl9j01es7ss5vSqIUCujZZ4s7ktXq/H2qPAiYbEwjms?= =?us-ascii?Q?exq6PGTU+cuZcDBEy3DAgz6PjH2GQ4rr+YcR1ObQ5OW4TZm38vKP9LnYDhXB?= =?us-ascii?Q?cFh2yhkeUU1ISK86cvbd5ylMjaNXjlbdPDHlSWDq1wKIRLLABUSbLM98hNzQ?= =?us-ascii?Q?EZ2C1Tw2R+cV7q33JaNjV+hO+soW/qE5MFh2r02xylNBu57XYVchX+qdGCZV?= =?us-ascii?Q?5KofkoDuleKnoz3zznfk1jkIawdslCQeJPql5YOkQv8L6fHIgPqdlPxV6VwH?= =?us-ascii?Q?CqrRWh6qqNZ9nF+PlPCztApp4V6OLI6GT1nOPeuVcyfGwwKMykzREY/swS5j?= =?us-ascii?Q?6mgiAD0FOtcXEjheAY8dH04hycFeK2NBgA6w54d4VKzD8NW2ad1WHpRY0hbJ?= =?us-ascii?Q?jwNLzyxD9FV519NWskWka3nRPWPRe8wvmdm0SMcUJYvFYxYdnbV6Q+KoxC2a?= =?us-ascii?Q?NrNNDD3mf9A9X3mgBmi/KCJfW3c48tRjLiAxAH6K15neEuqpmaVNzjBiLech?= =?us-ascii?Q?R2HPC6qpNmYPs2nOdKxtwEMyR3iJrqX9iAvE7o1AqGmwnOk0mo+pkMa8+TX4?= =?us-ascii?Q?NaGFOZXcm3ndHVgqQWsQDs4dkT4YJYMPwqDXt4Pa2gV5LmabujztXxfzaej1?= =?us-ascii?Q?8w56NUDc/Q2ooz8s2PYFfOMVBH9XkvlJJd0SJsOGnXMTsLQ4Mba8bRAt0sDj?= =?us-ascii?Q?k9ZOKw0O5APpyYNcjqgfkAIZZTFM85Mvp7xVhw2lcdG6D0oh0asuekDuPMXe?= =?us-ascii?Q?dl12w0px3vAjfhbn7HLHAenQQXi5dS1d68/0/FNv7GJw+nBEynCv+XfuAXBa?= =?us-ascii?Q?EgWB4zW/dNQ8kRTH1EOOrjtzLlgLpp1gTkgWgwVTudR0aMWlRxrytmHtRi57?= =?us-ascii?Q?QdNbVW4+AWw7lCCgLIAelLR8GbRJJ/M=3D?= X-OriginatorOrg: citrix.com X-MS-Exchange-CrossTenant-Network-Message-Id: ebfe7f42-f7bc-42d7-278c-08deb4df5f2b X-MS-Exchange-CrossTenant-AuthSource: CH8PR03MB8274.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 May 2026 13:14:20.2776 (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: MCdI7ZZUbkvU3RjxAPl3lay6BeYWspfM6QiKQ7jb6nyl3Q13ngnkeWvN8W8Lbb+U5euvVBWYE/a2RB99J21KYHpcNKhe8AunM1/0MHsFMRM= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR03MB5111 X-purgate-ID: tlsNG-bad1c0/1779110065-8957AA53-EE0C1D5E/0/0 X-purgate-type: clean X-purgate-size: 2398 X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1779110097764154100 Content-Type: text/plain; charset="utf-8" This is like hvm_emulate_one_insn() but takes an existing hvm_emulate_ctxt as a parameter. This will be needed to merge the instruction emulator and VMEXIT fast paths. Signed-off-by: Ross Lagerwall --- xen/arch/x86/hvm/io.c | 17 +++++++++++------ xen/arch/x86/include/asm/hvm/emulate.h | 1 + 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/xen/arch/x86/hvm/io.c b/xen/arch/x86/hvm/io.c index d9838c36d330..7dc6f64b646e 100644 --- a/xen/arch/x86/hvm/io.c +++ b/xen/arch/x86/hvm/io.c @@ -53,27 +53,32 @@ void send_timeoffset_req(unsigned long timeoff) bool hvm_emulate_one_insn(hvm_emulate_validate_t *validate, const char *de= scr) { struct hvm_emulate_ctxt ctxt; - int rc; =20 hvm_emulate_init_once(&ctxt, validate, descr, guest_cpu_user_regs()); + return hvm_emulate_one_ctxt(&ctxt); +} =20 - switch ( rc =3D hvm_emulate_one(&ctxt, VIO_no_completion) ) +bool hvm_emulate_one_ctxt(struct hvm_emulate_ctxt *ctxt) +{ + int rc =3D hvm_emulate_one(ctxt, VIO_no_completion); + + switch ( rc ) { case X86EMUL_UNHANDLEABLE: - hvm_dump_emulation_state(XENLOG_G_WARNING, ctxt.descr, &ctxt, rc); + hvm_dump_emulation_state(XENLOG_G_WARNING, ctxt->descr, ctxt, rc); return false; =20 case X86EMUL_UNRECOGNIZED: - hvm_dump_emulation_state(XENLOG_G_WARNING, ctxt.descr, &ctxt, rc); + hvm_dump_emulation_state(XENLOG_G_WARNING, ctxt->descr, ctxt, rc); hvm_inject_hw_exception(X86_EXC_UD, X86_EVENT_NO_EC); break; =20 case X86EMUL_EXCEPTION: - hvm_inject_event(&ctxt.ctxt.event); + hvm_inject_event(&ctxt->ctxt.event); break; } =20 - hvm_emulate_writeback(&ctxt); + hvm_emulate_writeback(ctxt); =20 return true; } diff --git a/xen/arch/x86/include/asm/hvm/emulate.h b/xen/arch/x86/include/= asm/hvm/emulate.h index 2801d14d5455..084e2bd90588 100644 --- a/xen/arch/x86/include/asm/hvm/emulate.h +++ b/xen/arch/x86/include/asm/hvm/emulate.h @@ -65,6 +65,7 @@ enum emul_kind { bool __nonnull(1, 2) hvm_emulate_one_insn( hvm_emulate_validate_t *validate, const char *descr); +bool hvm_emulate_one_ctxt(struct hvm_emulate_ctxt *ctxt); int hvm_emulate_one( struct hvm_emulate_ctxt *hvmemul_ctxt, enum vio_completion completion); --=20 2.53.0 From nobody Sat May 23 21:05:07 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=1779110096; cv=pass; d=zohomail.com; s=zohoarc; b=IOIDz/vr/JUhRo88BQH9524dxqra5Ykyx+5OvwEpR+eHWlzhdqEjdxpVlPpNQfZGilgxPvmZR3wOssSqS7IXE8pP3KCaOSgEuNCU4cozTx1wsbjxeYq8ATbTwIPytP9iBVfoMdINFENH/a7ylnFNEcMgS0jP8ZWZ8+tsmtPQcLw= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779110096; 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=IvpufiE6EX4IADgKhV1F40NPVtMT7lPinzez3cDqZ/k=; b=jvz4NouH+BeiZAp8uzMrZPzMQlmdS2W8bhpHkCNzjdWB2JXWY0I50NXSaxmhEL7rFDs/kotraBPVFIElSUe9KTKxe/xdEqt4/xVXk2SjtrH10ZA3C6NngEQ5FbZexIBNOgtqvAo17GzJE6u+HXLVTzXoQvQg7SXNU9pRxNy+pJo= 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 1779110096011966.6271119401027; Mon, 18 May 2026 06:14:56 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1311845.1581992 (Exim 4.92) (envelope-from ) id 1wOxni-0000Ng-8m; Mon, 18 May 2026 13:14:30 +0000 Received: by outflank-mailman (output) from mailman id 1311845.1581992; Mon, 18 May 2026 13:14:30 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wOxni-0000NX-47; Mon, 18 May 2026 13:14:30 +0000 Received: by outflank-mailman (input) for mailman id 1311845; Mon, 18 May 2026 13:14:29 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wOxnh-0000KK-06 for xen-devel@lists.xenproject.org; Mon, 18 May 2026 13:14:29 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wOxng-00EWKw-CM for xen-devel@lists.xenproject.org; Mon, 18 May 2026 15:14:28 +0200 Received: from [10.42.69.10] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 6a0b10aa-5cb7-0a2a0a5109dd-0a2a450aa170-48 for ; Mon, 18 May 2026 15:14:28 +0200 Received: from [40.107.208.49] (helo=PH0PR06CU001.outbound.protection.outlook.com) by tlsNG-4011c0.mxtls.expurgate.net with ESMTPS (eXpurgate 4.56.1) (envelope-from ) id 6a0b10b2-56b3-0a2a450a0019-286bd03147ae-3 for ; Mon, 18 May 2026 15:14:28 +0200 Received: from CH8PR03MB8274.namprd03.prod.outlook.com (2603:10b6:610:2ba::5) by BY5PR03MB5111.namprd03.prod.outlook.com (2603:10b6:a03:1e2::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.25.24; Mon, 18 May 2026 13:14:24 +0000 Received: from CH8PR03MB8274.namprd03.prod.outlook.com ([fe80::ebe2:32c1:d2be:a096]) by CH8PR03MB8274.namprd03.prod.outlook.com ([fe80::ebe2:32c1:d2be:a096%7]) with mapi id 15.21.0025.022; Mon, 18 May 2026 13:14:23 +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=KsV39skMRHI6JNafJKHe2WpW2WvXfSPJo58c9633aMt2xqaV296InJ13wNYfvSu++LrH67Jx8KLW1LK61QtG0WH+KamG/A3oLUobFkYEuf2VrljD/eN4FbWDbyBFLpiqY8bXq7z9E0aDxMdBGZJFNMEodMiS+Mq/G4AF8R4VxEW5JFmvGKM/vFSwjg3EqVV3qeN5gluKT4bVxD/U2L5/raqzwogJUswTVTMSi+bo/YxNRkZGQ+nwB+3eg+ZS5maQik3Bj4v9s5NWkUg4yJzM+Z7ROowV85lBMNuYlredCTUGugsntQ+uuwza3E5NqikY7vA5jcYKGxAsXlqPQzy8eA== 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=IvpufiE6EX4IADgKhV1F40NPVtMT7lPinzez3cDqZ/k=; b=C9H0tTNEy5ArjqkzokC8lHlg5i9rgIvXKi4shMc+buSmeV4usg66B6pBEEs3VHgHOXJ+1XptSYcOB7f0po50pSpsOpM/tLtB0piCnxXlmLlMeZV5jSKbBTsqGIjVjCK0Ex39RQfIse+4AVJTbldo3/VckMcck5VaIzG4Fl6LUw6+5EcN7ZbYIO3RAo0be2qg8yVWaLR3ZyeUJfXZs989N4/UpwrmvewXRaKzAS89ZCcSx1dcEqOAmeZSO57RCErgxcoToG+aR1eUTRZuvFoxSFlP3Himlw4WvNMGZ1dUWboI12OLFPUijP9busW8D1Ioh4x3DX9EfC247eMAS/Dt+g== 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=IvpufiE6EX4IADgKhV1F40NPVtMT7lPinzez3cDqZ/k=; b=iCNnDkDr0ycJG2/xEIovV3zbuTTrrG2wqDSwbU4VHI6xOIPUR9Wwhy9fUM7JiS8HE9HAj+Hll6YTL6bwFOlr9tGy7UNXkH3cnp1NQiL6n+x7P1MroLtmuTNxVqr4TWmk8aG6r1FtgCeHHtXQV8m4QIrcoPtQRQG1bPfFxakkH4I= 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: Ross Lagerwall , Jan Beulich , Andrew Cooper , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= , Teddy Astie Subject: [RFC v1 3/7] x86/emul: Separate out instruction completion Date: Mon, 18 May 2026 14:14:00 +0100 Message-ID: <20260518131404.3716969-4-ross.lagerwall@citrix.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260518131404.3716969-1-ross.lagerwall@citrix.com> References: <20260518131404.3716969-1-ross.lagerwall@citrix.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AS4PR10CA0005.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:20b:5dc::13) To CH8PR03MB8274.namprd03.prod.outlook.com (2603:10b6:610:2ba::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH8PR03MB8274:EE_|BY5PR03MB5111:EE_ X-MS-Office365-Filtering-Correlation-Id: f0b56c02-0799-45c7-807c-08deb4df613d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014|22082099003|56012099003|18002099003|3023799003|11063799003; X-Microsoft-Antispam-Message-Info: TC/bt776wv+lTW1EoVcUWMvaDvxbHDdARI1mrw/5SXKhrk9dzl6NwomlMQ82qrAvHzMyy8fHLIA8tSafF1bvpfMLF0frwH91zq8p5JF0/c2zhmVicjhO0XMjOEDUfJm27StcNdnBAx0PXfXCWxkJ/rFoC94u3QtZ4AinKuQqfW5gI6gKEQYWsFIzMHcwht5T1NBME+3/0flfC98WE5x7D94F6RwFs7suW0IZVA3EzO047AjdtAW+jaJOQ9aT4o5wlCsa4OkInCQMe2UEjba4Q/3JRhmP/4zTIAVgUdr34hEbzAkxSKwL2d+qeYO7MTbDSZt2GN9MFOotBS8OMysMQd2gaKFeZlIabUfIZqEM7igWbS3DeTqMX4B5Kd3INXVh/7PTT3/4X8f5L1LlWhOdHw9+dF3EFNz17BbZKE2RKA/9qkr9TFBSf35zDoR5xwcjUfRDzOCKkZJRbyQkrupRWBilyiMqH4l1B+7gtw8jCkw6fouszICNcJ+7elPH21f59NDifjOnPXD8p0WBDCFpQC6kRK8PRSgEQCY3bz8m7XJ+LOBQ9tjNGwtBPw0SadxWOArVh9lCTo7nu682lR6NZX78Tqy1hI1uISzobjHqH9TltfZOQVbRF4HmU2JXIe9lEuyQHfbALZWTzUbF526w0jm9GIx5sJHqhs0j351FS6thOj4PBLQHbIi4QN5k/Hfn 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)(22082099003)(56012099003)(18002099003)(3023799003)(11063799003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?qlfB+jTAQlAbBYQDbh5PfwPatKBwKzHNFcHlh9UdCyuXFckqVuDzZMaHqZ7H?= =?us-ascii?Q?336W9VV+yvSNRYgluFCaweA/SNrrRcZfr7bBthUZf4OakWsrhc8LiGzO8pVl?= =?us-ascii?Q?R9SWjb/sFXuWVn6Aj2dkykbEumTc1cMa3736zGVhxw6zX2Wm1HDBcTli6KCS?= =?us-ascii?Q?QocKZgN5rAU+xu2w971M5juRjKA6I1V8DZvmNZ2G1RQvahF7P8nUyJCSiC+E?= =?us-ascii?Q?+n43XHZu9IaPYBoh2jhQGahOlW4p0uNoPm+KGzxmryTPt4RAIbPI63R1HIwY?= =?us-ascii?Q?9s3uHCfksRL5htTbgS4gFkojRFjbQaZFE6Bb47Llp3/OLHrYW6BLxfeYe/bd?= =?us-ascii?Q?RRMS5FIlZq4mwouCb+4mN2zfPPYjDJuAlvS9pzBwqA1DqS+GxmbHxlQNdv9s?= =?us-ascii?Q?ZvzyWwSf5nAs82A+rL+TwaR85DUbsY51Y6g00vorwnqyW9Gr9yRAUlD2WKDn?= =?us-ascii?Q?sxDdvF+xI4OpJ8cAr5ueEKXQ+vyJK3pO4Y88TsayO+Ni26p8V4hdUE3yE12U?= =?us-ascii?Q?wXlcN2a43alm/S2HRyxfVebrpY5p4mWp8jsjx26dAO0H88w1Phs26ygLAiI3?= =?us-ascii?Q?Ra2hRM3cd9yhB/CLQX1a8r0NfyT9NW6NuDxVAc1WRsdbmyzKzPO3mTpqYqFF?= =?us-ascii?Q?GkWSj/Ognuk9KagZC+rWg940e/ZyTqGLSwdeeOgwn7fhZTP0gLfKwWVUl9f+?= =?us-ascii?Q?jG+bZ7TEJgSrs1PeawTgmJXBzAEyNHsDvhdF/t2iRk0SW96IZ54AZQzPECF5?= =?us-ascii?Q?LsLe6BWrjXrN3B+G+W7PetGL+OmZt5lL9HdykyP3ZrzxW+i4UQ8w7snFX5Yd?= =?us-ascii?Q?B3kEZqj1H5FK26GL8U2sCA5UWXse4JmTQm9eWZQDyKbCLz6X7kvSVzilEG23?= =?us-ascii?Q?7u3SKlK63TJ6msh+cpNtZffHn1ic5dJw+69pL078rilnHuCe6Y7NQoLRmbcs?= =?us-ascii?Q?qE1JDyi2ZFG2cV9PKDJQw45usXIBvFe4uMq9BYEDK7Ogf1kO7xNQXr/u8In5?= =?us-ascii?Q?VaGblX99mzwcoB0yuD0tGF3NWEJF1pe1wHFnd8KP3Xw3V3Vd0DVZCQXT4ZmJ?= =?us-ascii?Q?Icjt/nprKdnt1hqwPoukfE0C1VsEek0y2kBDG8cwIBLAlSBio699lEsQI246?= =?us-ascii?Q?maintDwwDKFu2fPD26dMMqXroH+wYfGx7+JNh7ww0IIlVHMGH14o3JTkIEtn?= =?us-ascii?Q?+OksI8TmxqJpOoxA1gnils6vhMmWYoha3KnfC5mhWuFu3nhI9aFhyrMtfXQF?= =?us-ascii?Q?NhG3kR9OiKa535oB+YSvA4vP4P3emGlJHGcKfmH3lldDHGlA6eD4bP37iiGV?= =?us-ascii?Q?T+maLmU1Ie6vsEAwWweQVMXuJmyVcP8geP9rEn/TwKW1j6n4fFK7gyiHUZMN?= =?us-ascii?Q?ioJaGnHQ4MpK8B7uqtaKgIUaQWoRUM5b+1Qnm+t9MNO+gyRgc16v3nbnNTwo?= =?us-ascii?Q?NSmmD1DLFKdmwQTDSn0B7q7VKQ3QI0Gd6eAiNOn7IhvL3Dmww4e1n+dh2vyL?= =?us-ascii?Q?BV1BOEWQRw3rjxzlUOd1c2yfAd7IABdwFihKZWUpaw2rAVS1EOlDgxBzIVOH?= =?us-ascii?Q?qgKCa3QFK7JRobOAmDBSmvQfIcxx1eP374c21pSJ91tSItDQs43ljmEf5HI1?= =?us-ascii?Q?Xr9Pp1iZFkrwqbva/6wS4XeVxZDmjArW8p9NfWdN3gG0Drdy2mjEG+ZscEap?= =?us-ascii?Q?5JD4e9YjgsU/EAxYHopCOKt0T7iEJGGyEvU7PxrkuEP+3OYWpP+gNnrP7vgh?= =?us-ascii?Q?t/oAZ1ejDvgzIYUbmxG32zcV/Q/XRec=3D?= X-OriginatorOrg: citrix.com X-MS-Exchange-CrossTenant-Network-Message-Id: f0b56c02-0799-45c7-807c-08deb4df613d X-MS-Exchange-CrossTenant-AuthSource: CH8PR03MB8274.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 May 2026 13:14:23.7949 (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: F3FQZQM4rfQYtzM7ZSsdCAz1aH4sbzHtpqXu9GydHclp3ymMTQ/crmLULzvk5QmWFkQpHe+Uaq1l/n2+ouSUv9QsgWEaRF3gHvlMFBQ7mLs= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR03MB5111 X-purgate-ID: tlsNG-4011c0/1779110068-7236B8B7-976AE496/0/0 X-purgate-type: clean X-purgate-size: 6425 X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1779110096524158500 Content-Type: text/plain; charset="utf-8" To support merging the emulated instruction and VMEXIT paths, split out instruction completion from the core x86 emulation so it can be called separately. Signed-off-by: Ross Lagerwall --- xen/arch/x86/x86_emulate/x86_emulate.c | 48 +++++++++++++++----------- xen/arch/x86/x86_emulate/x86_emulate.h | 3 ++ 2 files changed, 30 insertions(+), 21 deletions(-) diff --git a/xen/arch/x86/x86_emulate/x86_emulate.c b/xen/arch/x86/x86_emul= ate/x86_emulate.c index 364e6c092ded..76fbebf96b4d 100644 --- a/xen/arch/x86/x86_emulate/x86_emulate.c +++ b/xen/arch/x86/x86_emulate/x86_emulate.c @@ -320,7 +320,7 @@ do { = \ rc =3D ops->insn_fetch(ip, NULL, 0, ctxt); \ if ( rc ) goto done; \ _regs.r(ip) =3D ip; \ - singlestep =3D _regs.eflags & X86_EFLAGS_TF; \ + ctxt->singlestep =3D _regs.eflags & X86_EFLAGS_TF; \ } while (0) =20 #define validate_far_branch(cs, ip) ({ \ @@ -337,7 +337,7 @@ do { = \ ({ \ validate_far_branch(cs, newip); \ _regs.r(ip) =3D (newip); \ - singlestep =3D _regs.eflags & X86_EFLAGS_TF; \ + ctxt->singlestep =3D _regs.eflags & X86_EFLAGS_TF; \ }), \ ops->write_segment(x86_seg_cs, cs, ctxt) \ ) @@ -1234,6 +1234,22 @@ int cf_check x86emul_unhandleable_rw( return X86EMUL_UNHANDLEABLE; } =20 +void x86_emulate_complete(struct x86_emulate_ctxt *ctxt, int rc) +{ + /* Zero the upper 32 bits of %rip if not in 64-bit mode. */ + if ( !mode_64bit() ) + ctxt->regs->r(ip) =3D (uint32_t)ctxt->regs->r(ip); + + /* Should a singlestep #DB be raised? */ + if ( rc =3D=3D X86EMUL_OKAY && ctxt->singlestep && !ctxt->retire.mov_s= s ) + { + ctxt->retire.singlestep =3D true; + ctxt->retire.sti =3D false; + } + + ctxt->regs->eflags &=3D ~X86_EFLAGS_RF; +} + /* Helper definitions. */ #define op_bytes (state->op_bytes) #define ad_bytes (state->ad_bytes) @@ -1265,8 +1281,6 @@ x86_emulate( uint8_t b, d, *opc =3D NULL; unsigned int first_byte =3D 0, elem_bytes, insn_bytes =3D 0; uint64_t op_mask =3D ~0ULL; - bool singlestep =3D (_regs.eflags & X86_EFLAGS_TF) && - !is_branch_step(ctxt, ops); bool sfence =3D false, fault_suppression =3D false; struct operand src =3D { .reg =3D PTR_POISON }; struct operand dst =3D { .reg =3D PTR_POISON }; @@ -1280,6 +1294,9 @@ x86_emulate( =20 init_context(ctxt); =20 + ctxt->singlestep =3D (_regs.eflags & X86_EFLAGS_TF) && + !is_branch_step(ctxt, ops); + generate_exception_if((mode_vif() && (_regs.eflags & X86_EFLAGS_VIF) && (_regs.eflags & X86_EFLAGS_VIP)), @@ -2064,7 +2081,7 @@ x86_emulate( goto done; =20 _regs.r(ip) =3D imm1; - singlestep =3D _regs.eflags & X86_EFLAGS_TF; + ctxt->singlestep =3D _regs.eflags & X86_EFLAGS_TF; break; =20 #ifndef X86EMUL_NO_FPU @@ -3103,7 +3120,7 @@ x86_emulate( * Their only mitigation is to use a task gate for handling * #DB (or to not use enable EFER.SCE to start with). */ - singlestep =3D _regs.eflags & X86_EFLAGS_TF; + ctxt->singlestep =3D _regs.eflags & X86_EFLAGS_TF; break; =20 case X86EMUL_OPC(0x0f, 0x06): /* clts */ @@ -3189,7 +3206,7 @@ x86_emulate( ctxt)) !=3D X86EMUL_OKAY ) goto done; =20 - singlestep =3D _regs.eflags & X86_EFLAGS_TF; + ctxt->singlestep =3D _regs.eflags & X86_EFLAGS_TF; break; =20 case X86EMUL_OPC(0x0f, 0x08): /* invd */ @@ -3918,7 +3935,7 @@ x86_emulate( /* In particular mode_64bit() needs to return true from here o= n. */ ctxt->addr_size =3D ctxt->sp_size =3D 64; =20 - singlestep =3D _regs.eflags & X86_EFLAGS_TF; + ctxt->singlestep =3D _regs.eflags & X86_EFLAGS_TF; break; =20 case X86EMUL_OPC(0x0f, 0x35): /* sysexit */ @@ -3958,7 +3975,7 @@ x86_emulate( _regs.r(ip) =3D op_bytes =3D=3D 8 ? _regs.r(dx) : _regs.edx; _regs.r(sp) =3D op_bytes =3D=3D 8 ? _regs.r(cx) : _regs.ecx; =20 - singlestep =3D _regs.eflags & X86_EFLAGS_TF; + ctxt->singlestep =3D _regs.eflags & X86_EFLAGS_TF; break; =20 case X86EMUL_OPC(0x0f, 0x40) ... X86EMUL_OPC(0x0f, 0x4f): /* cmovcc */ @@ -8347,17 +8364,6 @@ x86_emulate( put_fpu(fpu_type, false, state, ctxt, ops); fpu_type =3D X86EMUL_FPU_none; =20 - /* Zero the upper 32 bits of %rip if not in 64-bit mode. */ - if ( !mode_64bit() ) - _regs.r(ip) =3D (uint32_t)_regs.r(ip); - - /* Should a singlestep #DB be raised? */ - if ( rc =3D=3D X86EMUL_OKAY && singlestep && !ctxt->retire.mov_ss ) - { - ctxt->retire.singlestep =3D true; - ctxt->retire.sti =3D false; - } - if ( rc !=3D X86EMUL_DONE ) *ctxt->regs =3D _regs; else @@ -8366,7 +8372,7 @@ x86_emulate( rc =3D X86EMUL_OKAY; } =20 - ctxt->regs->eflags &=3D ~X86_EFLAGS_RF; + x86_emulate_complete(ctxt, rc); =20 done: put_fpu(fpu_type, insn_bytes > 0 && dst.type =3D=3D OP_MEM, state, ctx= t, ops); diff --git a/xen/arch/x86/x86_emulate/x86_emulate.h b/xen/arch/x86/x86_emul= ate/x86_emulate.h index 0fd20747dc43..17bf14455cf3 100644 --- a/xen/arch/x86/x86_emulate/x86_emulate.h +++ b/xen/arch/x86/x86_emulate/x86_emulate.h @@ -594,6 +594,7 @@ struct x86_emulate_ctxt } retire; =20 bool event_pending; + bool singlestep; struct x86_event event; }; =20 @@ -680,6 +681,8 @@ x86_emulate( struct x86_emulate_ctxt *ctxt, const struct x86_emulate_ops *ops); =20 +void x86_emulate_complete(struct x86_emulate_ctxt *ctxt, int rc); + #ifndef NDEBUG /* * In debug builds, wrap x86_emulate() with some assertions about its expe= cted --=20 2.53.0 From nobody Sat May 23 21:05:07 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=1779110091; cv=pass; d=zohomail.com; s=zohoarc; b=XFj7GX7IKgcnwAkSb/+K42p1PxpRMxWG9R5o+zYTNZKu1Bb71s6JDsq30Uet8ecA16Ct6xHiqoL38hCfqM7whkwBDGkQSQyHHqwn3VT37l43nJX2V117fkx8SV5WwPRjEwbsCz8Mlauu06qFoelbu3e1FfL64iKNm7Qu4wt2qvY= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779110091; 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=E01jp2Z6iewjF/MH52l40+JkT5jeEYpzfDYIumrs0IU=; b=g5xhmQUtpcV4CRtx04YeaEAy7xXVAjaBzrMzuDqz/hYJYfJ5fC5UR8KcaLQOru0a2Fw9UZnvh+0Vynko2P08d1Ky5395NJ+OeZ8gbM9dkUzSC14p4k5ETAOKqGYGny5r+TuemGmRyzDFf7UglYTusZ7LjmudkarApmSXS5ZHENw= 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 1779110091663395.8513814282436; Mon, 18 May 2026 06:14:51 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1311847.1582001 (Exim 4.92) (envelope-from ) id 1wOxnl-0000fH-Fv; Mon, 18 May 2026 13:14:33 +0000 Received: by outflank-mailman (output) from mailman id 1311847.1582001; Mon, 18 May 2026 13:14:33 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wOxnl-0000es-CJ; Mon, 18 May 2026 13:14:33 +0000 Received: by outflank-mailman (input) for mailman id 1311847; Mon, 18 May 2026 13:14:32 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wOxnj-0000bp-OX for xen-devel@lists.xenproject.org; Mon, 18 May 2026 13:14:31 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wOxnj-009DNN-4d for xen-devel@lists.xenproject.org; Mon, 18 May 2026 15:14:31 +0200 Received: from [10.42.69.3] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 6a0b10aa-e002-0a2a0a5209dd-0a2a45039368-46 for ; Mon, 18 May 2026 15:14:31 +0200 Received: from [52.101.56.13] (helo=BN1PR04CU002.outbound.protection.outlook.com) by tlsNG-33051d.mxtls.expurgate.net with ESMTPS (eXpurgate 4.56.1) (envelope-from ) id 6a0b10b5-672d-0a2a45030019-3465380dc3c7-3 for ; Mon, 18 May 2026 15:14:30 +0200 Received: from CH8PR03MB8274.namprd03.prod.outlook.com (2603:10b6:610:2ba::5) by BY5PR03MB5111.namprd03.prod.outlook.com (2603:10b6:a03:1e2::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.25.24; Mon, 18 May 2026 13:14:28 +0000 Received: from CH8PR03MB8274.namprd03.prod.outlook.com ([fe80::ebe2:32c1:d2be:a096]) by CH8PR03MB8274.namprd03.prod.outlook.com ([fe80::ebe2:32c1:d2be:a096%7]) with mapi id 15.21.0025.022; Mon, 18 May 2026 13:14:28 +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=GuZlb7uKpvo9maczxH5N2NRCmDsTD9umaTmUdvS5IkGAFvhCQekVHSkTnsCcGuXGUF7380MpWvtVyprRSq/YRP/03NCOFmoSFc1hQ3YNYYCApnGOFQxyOCu9j8QReHyJjNOXPtgl9ygm3yMSgbbKGf3h+0bV+vee1jgqUVemoIiOCfotAFpn4nfbIMadR8oc/vFsp7LQGrU6XxcNRwySkZT6uPWh1FSpx3NBayikA9pfGprJmQa5GFWtsBiSE6t/6MtfOzbKd9iE8huHKhFtGdSNaD55/rlUjjUkozizHhyS/8+CPCqQQI6dNlVeUfvPyI4vv6Yvlf9KU8x/pkM3vQ== 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=E01jp2Z6iewjF/MH52l40+JkT5jeEYpzfDYIumrs0IU=; b=GmPxPmJYcPiUyvgSKXypjGxedEU1SZdONU3G4BAKk1GPaHRzIf136TGiYJYM8Edn9Sf3RZLe3/qR/+Yuvj0QdpPPsCouz6ivFaokujG9Eg7i/haZYqPhX2xS5N131GTupEh8w1lLWz6bqyu3aw6FfZ6cfnalTuzKEXb2mARyxNpeHenFNA1/rmggHDglL1ujQ6z2jIWMa52YJIrP4rkFsesB4KYaSsmoF4gQ2mjWUu3D1TfsC0Q8UDBm8c4uXP59QJZ4OHBwJ+/1fQQW1HoNd+xmZ6JRVX5cpi6qx7QcYtuj+r+Zxkd8bKh7c9H9LehS0W3Ce2dchXSZ4Yza1F3+dA== 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=E01jp2Z6iewjF/MH52l40+JkT5jeEYpzfDYIumrs0IU=; b=JrwbENw0EVUBYb4agrMGNpL2rI8b8GClIi7jG6z6/M+168/nghVqLdNhwqC18zIEG1Lh/yYMF4fZtyW8O0qCaqoW77E8e9/tnkymvMgA9YiAMzDfijhZePO4Qx5YOoFLIm1r1Bu2ocWfI5uX/z+1FB5if1eNoO/4082PMCPj9+M= 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: Ross Lagerwall , Jan Beulich , Andrew Cooper , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= , Teddy Astie Subject: [RFC v1 4/7] x86/hvm: Support a fast path during emulation Date: Mon, 18 May 2026 14:14:01 +0100 Message-ID: <20260518131404.3716969-5-ross.lagerwall@citrix.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260518131404.3716969-1-ross.lagerwall@citrix.com> References: <20260518131404.3716969-1-ross.lagerwall@citrix.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: LO4P123CA0362.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:18e::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_|BY5PR03MB5111:EE_ X-MS-Office365-Filtering-Correlation-Id: a667065c-4896-4d76-7bec-08deb4df63a9 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014|22082099003|56012099003|18002099003|3023799003|11063799003; X-Microsoft-Antispam-Message-Info: hBjlCrB1Viehht3VOiAvG64AanGlSpYCI0pn6mohhk++38UJMu0gdyM7CS2Njso6dJuGzHN62c5xoFe0soDWZo9SfDHOV3/sCKAOk77kMrX+5qb7Qc/l4BgBniRP/tXDxvfZibVt1XUCJ+Xw36kt55Ah82kVGCyx3I7QbwIwfD2FYS+r/tRmSjULQHpwxbj/eJnb28V9SGjknPhlNjn8351To1CZvDF6s7cAI0H3VNK1ayRh5rjWoEt9tZfIT0+BEuazKI6fyzFXeyJxrUvmCMr3M366Tyi22SiSyVtEW20KDPv6U9NA8FahyYRCBAsEraDxkFRQsA86xitzIlMolAWW97YwIGavYCqJzcrr/wAlzFuCgOgKJy0cfuDMFLWxI/VpScrcCW9hnO7jW6xqwn6q0Km1MtYeMVbEtLlAhd5AmqGTgbOcuJBmeSLEQ6aYp95ArFNTlJXxXKnozyRz7FvsSouR+LgtMBnblGskF8/kiXZgZR6KKyD19waFvMUpwl3PTAneD+hQ1NbX0UVmC6Tr1f0H7j8y87gwCO/LKqsNJty3+FXGiuCrPBX4pv9CG9goqRWTm0asxozXm+3E9yWZdRu1b07eRsj4A3rSxw2L2ZFqulxRYNxTK5XWw9iSjDu494ySfyycX+y7dAChhmNU0jI66rVr1K1uHxr840jThlzc2gM/I3oHerkDjLpY 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)(22082099003)(56012099003)(18002099003)(3023799003)(11063799003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?pcg7YG4MRPTQfOJorsLSmhTh2LWk9D8OY62tusqrtFjdpzn3C0pzJkadcjzL?= =?us-ascii?Q?4MOTLNJamGJ/RiZfqMEI6JzrUEtrbV8sK+flCSuMVuhmStoGEcWYsz9zigkG?= =?us-ascii?Q?I1GXjXJRcI1sEnuKQyJx+UUCx0QdpEryl2Ed79CtGzkbzLXh6iUTMpAo6CD3?= =?us-ascii?Q?Oz11ZAZaTtUtR8Y1Dq/D7WXgK7lGVszAMC9eAN63DuC7ab3hKdomcufEQRhG?= =?us-ascii?Q?vqOo0mMnPYe/yimQQ+d6APS3SN+NYqZgA+nwYqLbYp8cFFYkzfi+ffsTQAq1?= =?us-ascii?Q?ZxTlVsJa6+V99NLiMWTow+/2t3a4sEz/Es5/kg7jNEL8Q5z7ueHrmgSLeLhD?= =?us-ascii?Q?jlF+FJ58R50Q/syzGqu7GFx7SQbbZbg5FNZmvERwfoi7Pe60gXyyqhjgkN3T?= =?us-ascii?Q?Sy7RTL8Z+OVqN2RZ58g+3rzyc9AYZQZ3J3p6fbbQXuAdcZ0vaN3/R/l12vzd?= =?us-ascii?Q?hvY0NUpFNpbMytT7ZKIvIqUWgIKGhuco8QGE8I0PDcN/qmZBOz+k+Ifg/f1N?= =?us-ascii?Q?Czfe0LhKGsa2/lYwFK7/Yo3QzvuDRDSgEIdSTV7jD9UlIdMYt0GbitkYnMqf?= =?us-ascii?Q?FmFMi343J5UBH2nXHn1hFzpik0ob/4JsBxPH9xCdXIm8ZDXf4+Uw/TS96KvE?= =?us-ascii?Q?SGPlCm3d4jRvJazT2Sw2oKBfulWjeLQE22cQh8pjWqSKvZYRjr2dhmOSnCGa?= =?us-ascii?Q?hyOR5hZQlzLaUxempvH3pFrXRRqe8zzw1PSnQRBVVXZhjAnYcaO2IMLcVhjI?= =?us-ascii?Q?Qo4daVEl4CX/koEbnUr5DAhnoZnag3CjekMEC3lLcuEX7HLQN1UdyIgBUPcy?= =?us-ascii?Q?PIH9t2p5k7xpwwHvRUxNPYLySf9p4hqtxQ6pCn4yST/o4EYvV5g4SS8uj5Q7?= =?us-ascii?Q?wEIL0TFKuk/QrPL5ZuCjYS5SNDAzZAdckoJDRGiGcgoMcYDRrDxMPRcRvjZA?= =?us-ascii?Q?efWEjIFEG4DZoBg7W30h2tjjrERbskM2OrCL3Jv6rZOtmRiSinxvjDQlhYmr?= =?us-ascii?Q?h/1S+EbwRDdKBn6TTR1ji4HUowTfRiZpkW4eRZz87mE/IDs4jO79xHmp1WOc?= =?us-ascii?Q?GNWv6MAuNie+1GZtONKC3cAmD1w4/bmuA4H9oXqVrekkG1yOUA1iAd0U7ZBw?= =?us-ascii?Q?jNwp5lg0N9y5b3Qb4ACGW2IdjbmhNf2KccP0TXVOGVnqrOzzPCvEhx+JHeaN?= =?us-ascii?Q?l+L4g6eDJcC4Y9JZODhC7veDbAq/XEmbrVp5AM/XRPDHP/3m8X5KigaKaJa4?= =?us-ascii?Q?BTkGgyU947aAyVkv07AQwxNMdjQZddsQCGweAR676upMH6Xcrq3uX7xRjDKU?= =?us-ascii?Q?fCLnksue8rq6QM7s1oS17qzQRVJ1vNb2mW1LHGdxUz/leHqXh9DCuJl6DlU9?= =?us-ascii?Q?n6H3PuxtC8xpF5gXSu7E92m4rF44dpttT0KRYsTTpi9hnNjYOjYSZZtrNi7F?= =?us-ascii?Q?SFHjoNWBmGXlfDg5wf36+SSdgAPzENXD2S0kVGt8iq7nIjPLBf4ZnEusBatT?= =?us-ascii?Q?pj1fqkvL7+iGeeUt7nBCiMeAdoj6SCBHLVVGcQysgcR+UrsJGkaCikj6AbfW?= =?us-ascii?Q?8XtQ9GUpy2AMnf56b4KbNDi8Nahgps9W7jnDjU6eAUnhggsORLc0O1s+ztlj?= =?us-ascii?Q?Ub5Orc4LR+Hs1vEEDCcbAKT/V0AZLcJZeg5jdazHLG2hY4MI/lXM2isme4tp?= =?us-ascii?Q?TGvycLtPT+mCh3/i4i82QSGv8txqoZ/cyTGgI/xfoKNkq77LC0Dw5x41eF2J?= =?us-ascii?Q?BhSGVrlAgyWok678mMiHYHMMD7PoTfM=3D?= X-OriginatorOrg: citrix.com X-MS-Exchange-CrossTenant-Network-Message-Id: a667065c-4896-4d76-7bec-08deb4df63a9 X-MS-Exchange-CrossTenant-AuthSource: CH8PR03MB8274.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 May 2026 13:14:28.1158 (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: c7n2IhOyE3uYNtBgqv10I+vFnmtCAoENlcYYeNHyIV9SjaUmipL85TzaJ1BKGpfE+fHdA1+7/cYY1kBAnpBtw7EXE8OGsGWYjUvxa6fEWW8= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR03MB5111 X-purgate-ID: tlsNG-33051d/1779110071-4066C938-B80763D6/0/0 X-purgate-type: clean X-purgate-size: 8277 X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1779110092508158500 Content-Type: text/plain; charset="utf-8" Information to complete the instruction may be provided by the processor during a VMEXIT. Add a fast path during emulation to use this information and avoid going through the full x86 emulator. Plumbing the fast path through the emulator ensures consistent behaviour. Signed-off-by: Ross Lagerwall --- xen/arch/x86/hvm/emulate.c | 160 ++++++++++++++++++------- xen/arch/x86/include/asm/hvm/emulate.h | 3 + 2 files changed, 123 insertions(+), 40 deletions(-) diff --git a/xen/arch/x86/hvm/emulate.c b/xen/arch/x86/hvm/emulate.c index a96d7814f91c..c9553cd28238 100644 --- a/xen/arch/x86/hvm/emulate.c +++ b/xen/arch/x86/hvm/emulate.c @@ -2724,6 +2724,52 @@ static const struct x86_emulate_ops hvm_emulate_ops = =3D { .vmfunc =3D hvmemul_vmfunc, }; =20 +static int hvm_emulate_insn_len(struct hvm_emulate_ctxt *hvmemul_ctxt) +{ + struct x86_emulate_state *state; + unsigned long emul_len; + unsigned int instr_opcode, instr_modrm; + unsigned int modrm_rm, modrm_reg; + int modrm_mod; + + state =3D x86_decode_insn(&hvmemul_ctxt->ctxt, hvmemul_insn_fetch); + if ( IS_ERR_OR_NULL(state) ) + return X86EMUL_EXCEPTION; + + emul_len =3D x86_insn_length(state, &hvmemul_ctxt->ctxt); + modrm_mod =3D x86_insn_modrm(state, &modrm_rm, &modrm_reg); + x86_emulate_free_state(state); + + /* Extract components from instr_enc. */ + instr_modrm =3D hvmemul_ctxt->insn & 0xff; + instr_opcode =3D hvmemul_ctxt->insn >> 8; + + if ( instr_opcode =3D=3D hvmemul_ctxt->ctxt.opcode ) + { + if ( !instr_modrm ) + { + hvmemul_ctxt->insn_len =3D emul_len; + return X86EMUL_OKAY; + } + + if ( modrm_mod =3D=3D MASK_EXTR(instr_modrm, 0300) && /* oct= al-ok */ + (modrm_reg & 7) =3D=3D MASK_EXTR(instr_modrm, 0070) && /* oct= al-ok */ + (modrm_rm & 7) =3D=3D MASK_EXTR(instr_modrm, 0007) ) /* oct= al-ok */ + { + hvmemul_ctxt->insn_len =3D emul_len; + return X86EMUL_OKAY; + } + } + + printk(XENLOG_G_WARNING + "Insn mismatch: Expected opcode %#x, modrm %#x, got emul_len %l= u\n", + instr_opcode, instr_modrm, emul_len); + hvm_dump_emulation_state(XENLOG_G_WARNING, "Insn len", + hvmemul_ctxt, X86EMUL_UNHANDLEABLE); + + return X86EMUL_EXCEPTION; +} + /* * Note that passing VIO_no_completion into this function serves as kind * of (but not fully) an "auto select completion" indicator. When there's @@ -2733,63 +2779,97 @@ static int _hvm_emulate_one(struct hvm_emulate_ctxt= *hvmemul_ctxt, const struct x86_emulate_ops *ops, enum vio_completion completion) { - const struct cpu_user_regs *regs =3D hvmemul_ctxt->ctxt.regs; + struct cpu_user_regs *regs =3D hvmemul_ctxt->ctxt.regs; struct vcpu *curr =3D current; uint32_t new_intr_shadow; struct hvm_vcpu_io *hvio =3D &curr->arch.hvm.hvm_io; int rc; =20 - /* - * Enable caching if it's currently disabled, but leave the cache - * untouched if it's already enabled, for re-execution to consume - * entries populated by an earlier pass. - */ - if ( hvio->cache->num_ents > hvio->cache->max_ents ) + if ( hvmemul_ctxt->insn ) { - ASSERT(curr->io.req.state =3D=3D STATE_IOREQ_NONE); - hvio->cache->num_ents =3D 0; + hvm_emulate_init_per_insn(hvmemul_ctxt, NULL, 0); + if ( !hvmemul_ctxt->insn_len ) + { + rc =3D hvm_emulate_insn_len(hvmemul_ctxt); + if ( rc =3D=3D X86EMUL_EXCEPTION ) + { + x86_emul_hw_exception(X86_EXC_GP, 0, &hvmemul_ctxt->ctxt); + goto complete_insn; + } + } + + switch ( hvmemul_ctxt->insn ) + { + default: + ASSERT_UNREACHABLE(); + rc =3D X86EMUL_UNHANDLEABLE; + break; + } + + if ( rc =3D=3D X86EMUL_OKAY ) + { + regs->rip +=3D hvmemul_ctxt->insn_len; + hvmemul_ctxt->ctxt.singlestep =3D regs->eflags & X86_EFLAGS_TF; + x86_emulate_complete(&hvmemul_ctxt->ctxt, rc); + } } else - ASSERT(curr->io.req.state =3D=3D STATE_IORESP_READY); + { + /* No fast path. Go through full emulator */ + /* + * Enable caching if it's currently disabled, but leave the cache + * untouched if it's already enabled, for re-execution to consume + * entries populated by an earlier pass. + */ + if ( hvio->cache->num_ents > hvio->cache->max_ents ) + { + ASSERT(curr->io.req.state =3D=3D STATE_IOREQ_NONE); + hvio->cache->num_ents =3D 0; + } + else + ASSERT(curr->io.req.state =3D=3D STATE_IORESP_READY); =20 - hvm_emulate_init_per_insn(hvmemul_ctxt, hvio->mmio_insn, - hvio->mmio_insn_bytes); + hvm_emulate_init_per_insn(hvmemul_ctxt, hvio->mmio_insn, + hvio->mmio_insn_bytes); =20 - hvio->mmio_retry =3D 0; + hvio->mmio_retry =3D 0; =20 - rc =3D x86_emulate(&hvmemul_ctxt->ctxt, ops); - if ( rc =3D=3D X86EMUL_OKAY && hvio->mmio_retry ) - rc =3D X86EMUL_RETRY; + rc =3D x86_emulate(&hvmemul_ctxt->ctxt, ops); + if ( rc =3D=3D X86EMUL_OKAY && hvio->mmio_retry ) + rc =3D X86EMUL_RETRY; =20 - if ( !ioreq_needs_completion(&curr->io.req) ) - completion =3D VIO_no_completion; - else if ( completion =3D=3D VIO_no_completion ) - completion =3D (curr->io.req.type !=3D IOREQ_TYPE_PIO || - hvmemul_ctxt->is_mem_access) ? VIO_mmio_completion - : VIO_pio_completion; + if ( !ioreq_needs_completion(&curr->io.req) ) + completion =3D VIO_no_completion; + else if ( completion =3D=3D VIO_no_completion ) + completion =3D (curr->io.req.type !=3D IOREQ_TYPE_PIO || + hvmemul_ctxt->is_mem_access) ? VIO_mmio_completi= on + : VIO_pio_completio= n; =20 - switch ( curr->io.completion =3D completion ) - { - case VIO_no_completion: - case VIO_pio_completion: - hvio->mmio_cache_count =3D 0; - hvio->mmio_insn_bytes =3D 0; - hvio->mmio_access =3D (struct npfec){}; - hvmemul_cache_disable(curr); - break; + switch ( curr->io.completion =3D completion ) + { + case VIO_no_completion: + case VIO_pio_completion: + hvio->mmio_cache_count =3D 0; + hvio->mmio_insn_bytes =3D 0; + hvio->mmio_access =3D (struct npfec){}; + hvmemul_cache_disable(curr); + break; =20 - case VIO_mmio_completion: - case VIO_realmode_completion: - BUILD_BUG_ON(sizeof(hvio->mmio_insn) < sizeof(hvmemul_ctxt->insn_b= uf)); - hvio->mmio_insn_bytes =3D hvmemul_ctxt->insn_buf_bytes; - memcpy(hvio->mmio_insn, hvmemul_ctxt->insn_buf, hvio->mmio_insn_by= tes); - break; + case VIO_mmio_completion: + case VIO_realmode_completion: + BUILD_BUG_ON(sizeof(hvio->mmio_insn) < sizeof(hvmemul_ctxt->in= sn_buf)); + hvio->mmio_insn_bytes =3D hvmemul_ctxt->insn_buf_bytes; + memcpy(hvio->mmio_insn, hvmemul_ctxt->insn_buf, hvio->mmio_ins= n_bytes); + break; =20 - default: - ASSERT_UNREACHABLE(); - return X86EMUL_UNHANDLEABLE; + default: + ASSERT_UNREACHABLE(); + return X86EMUL_UNHANDLEABLE; + } } =20 + complete_insn: + if ( hvmemul_ctxt->ctxt.retire.singlestep ) hvm_inject_hw_exception(X86_EXC_DB, X86_EVENT_NO_EC); =20 diff --git a/xen/arch/x86/include/asm/hvm/emulate.h b/xen/arch/x86/include/= asm/hvm/emulate.h index 084e2bd90588..1e626f8af8f2 100644 --- a/xen/arch/x86/include/asm/hvm/emulate.h +++ b/xen/arch/x86/include/asm/hvm/emulate.h @@ -53,6 +53,9 @@ struct hvm_emulate_ctxt { bool is_mem_access; =20 bool set_context; + + unsigned int insn; + unsigned int insn_len; }; =20 enum emul_kind { --=20 2.53.0 From nobody Sat May 23 21:05:07 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=1779110104; cv=pass; d=zohomail.com; s=zohoarc; b=K6I3oXs54sKxF3acyXVj9tt+0lXWv5QFoEoyTCbbz7xbSe9JvM7ps4WpbA9GJ3laYmk44Cvstyul0hdZM4ZGNQaY73Ti3Ug0KiEM6YFAWMzfbuCQ6Ur+pbO2fENyVtsVIoOvmFXwnS/Hy9FqofPlsUL4pS8A6M6EUjhexncLiLk= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779110104; 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=py92D7T6ajUs/lftz0hxd7Va7hBBB94kwza6iTYKzCg=; b=oFTYPbCV4cprPAozjJQqplHYFJqcLshqCTnDwZ05+Bovz6IrP11J9xU62IH++sIBrVJzZYYKK31ayenQFGjjNngFXsy1/SbofP33B6qpxuHbshwKBAZfG1LmulLzvY1AVt7coZkZEdn/PqR0GG0MII7yKRYZB65JaJtoq2rfbg8= 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 1779110104637611.3839682927927; Mon, 18 May 2026 06:15:04 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1311849.1582010 (Exim 4.92) (envelope-from ) id 1wOxnr-00016I-VM; Mon, 18 May 2026 13:14:39 +0000 Received: by outflank-mailman (output) from mailman id 1311849.1582010; Mon, 18 May 2026 13:14:39 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wOxnr-000169-S6; Mon, 18 May 2026 13:14:39 +0000 Received: by outflank-mailman (input) for mailman id 1311849; Mon, 18 May 2026 13:14:39 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wOxnr-00013G-0d for xen-devel@lists.xenproject.org; Mon, 18 May 2026 13:14:39 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wOxnq-003JoA-Cq for xen-devel@lists.xenproject.org; Mon, 18 May 2026 15:14:38 +0200 Received: from [10.42.69.1] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 6a0b10b7-2eae-0a2a0a5409dd-0a2a4501bf3c-14 for ; Mon, 18 May 2026 15:14:38 +0200 Received: from [52.101.56.22] (helo=BN1PR04CU002.outbound.protection.outlook.com) by tlsNG-d62444.mxtls.expurgate.net with ESMTPS (eXpurgate 4.56.1) (envelope-from ) id 6a0b10b9-c1f2-0a2a45010019-346538161449-3 for ; Mon, 18 May 2026 15:14:34 +0200 Received: from CH8PR03MB8274.namprd03.prod.outlook.com (2603:10b6:610:2ba::5) by BY5PR03MB5111.namprd03.prod.outlook.com (2603:10b6:a03:1e2::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.25.24; Mon, 18 May 2026 13:14:31 +0000 Received: from CH8PR03MB8274.namprd03.prod.outlook.com ([fe80::ebe2:32c1:d2be:a096]) by CH8PR03MB8274.namprd03.prod.outlook.com ([fe80::ebe2:32c1:d2be:a096%7]) with mapi id 15.21.0025.022; Mon, 18 May 2026 13:14:31 +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=QAy02tJS5b5VGRekoS78xeBonh4UNZzl91vKvy8cvS4092S7rn9iYdge2nQcGj/k2jFTdaxkRGR0xWlVgzq6vDEdIVYRatsH54YxLOlgRFXXMqku3nK+h6RYAutb5NbndrSI7VmV0SuHwkxSvZQZUgHaCnd0ezXwlodteT2GvsgrIXQ3Ox8TYH/Xk5KoFXcDMfTTqqx9b03CTAMISKWlAssgs9uylnI81X1k7v6ofKDZZN+gKLWkMg8Vut4t5mrjMZynbKewnBHenXlbzk0o9CeTYAMPWBnLFG6kdpTz8SpDneY5EWZT0jVpmZPyYrntjv9Oegy9pteCFgu10kC08A== 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=py92D7T6ajUs/lftz0hxd7Va7hBBB94kwza6iTYKzCg=; b=WQTfwzApEro7Xe9pkuynshJJYYNh1oTAri6T4k6o+Cy3KC9HhR9BVjmSdcwS7UDwUrct2k1M80QRiNetdw3daNtmmaR3Ytd+LlvvLcn4KZbEcdqfk5jcl2tgolh9Hi2Kx33tLNpWNKpxNTxTxfDlf831w58H6a5OoKRBFCHsP0dsjprx2NKpQo7PUoIZu85QW757k4JT4zwBEtGIQb0oamlAimEupf8sobp4zpOxaOKLioEU7Hy9LHJDSXnN1DcKJes3Bc1uxYrbbVfxcrm1imyMkjzfxb3rdKTiE4RhL+W6v6qA8pZHSn+0GIUZECH6jXvs4v+4hU6tZPgh8CBk3A== 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=py92D7T6ajUs/lftz0hxd7Va7hBBB94kwza6iTYKzCg=; b=fy8+EXebDbMhWkGEaI5YMwVV0S59T76fT46bgD8unDyQlo+RE978X1kXeeCTLFoLS1XK02UsE2A5890DlL1Iaq6bbhpesDxwxWvCBgeN43FygSmqvL3XdJT27ZXc/M1xApZtURdLB33y3XhEqw0Z8zQEnl7p5OaX2x0CNDr+GvQ= 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: Ross Lagerwall , Jan Beulich , Andrew Cooper , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= , Jason Andryuk , Teddy Astie Subject: [RFC v1 5/7] x86/hvm: Move INSTR_* constants to hvm.h Date: Mon, 18 May 2026 14:14:02 +0100 Message-ID: <20260518131404.3716969-6-ross.lagerwall@citrix.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260518131404.3716969-1-ross.lagerwall@citrix.com> References: <20260518131404.3716969-1-ross.lagerwall@citrix.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: LO4P123CA0370.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:18e::15) To CH8PR03MB8274.namprd03.prod.outlook.com (2603:10b6:610:2ba::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH8PR03MB8274:EE_|BY5PR03MB5111:EE_ X-MS-Office365-Filtering-Correlation-Id: 5b5df522-df46-421b-b7a3-08deb4df65e4 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014|22082099003|56012099003|18002099003|3023799003|11063799003; X-Microsoft-Antispam-Message-Info: e9y3u0Qr3nxsz/plYe7lyNk9Qm5G1NkE4hJSHRLwAxhiStA5U04bK8Pdgb2mfM1nj/7FLFQw468UOiseS9NX8RgZq1fzTRRL/ckndQ0bWMxXUnKalGzP1Hfc9jde6NN2lrn38jNhjJJtzBZN09aJ0W8UBdHP8JP9X4IcuyrFJc/zV+L4vzWXHt7MsNO17kHBee+C21X98QbveqFh2EBP4J9AbHIKvU2JlkbCyqjFDI5Q7agncIz6c/wmComAH4PQWvcA1cWGqAFA7fCx4iNOcNHxZyOEt+rfzWU9tXFrRhDXAjmEswb7COgayy13TgQHLE1Nj09EVqR/DIVUFCpiXEBZzTg7iXZoBr1Um+hHRrfKjVm3AjDheGpqw5DJXHUzxxLSNjePDNxyZgteuhrCSF+zI821FGM8uZu/2mvhiasHKCVSBYQ2fsV+vOLZ9QtROuocBkOBuZg3GPLbDh8h8/5UBwt4BwOsIXSSkAAypcCYdZkgn1BzhilEd+5y4ff8Fl99iv6ekiFDb66SNAei8Fw+fhrLVxnWxdAzVa/lvqlhEF4ZekiT4oEPAoiG91eCOvcC2CQwYhg505OjX8iI4wwI0zmHiBHB8vbGGqhXG7eb2jHVTNYL9lzlLjCif/L62giEkhZXdm/420tx2rVarEAZz+NtvP4+XVNPOCJQchh5e9ScyO3b/P2QmOJ0hlLZ 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)(22082099003)(56012099003)(18002099003)(3023799003)(11063799003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?Z5iGAc4L4eeMxVQMQNGJdXt/TT5WGMxFcyQ8piwPo1dXEqe7NfGtbcAFd8Cz?= =?us-ascii?Q?bXjUOXxF1rJ/NnJTfa/BYG+/L6XeJOclIq/OZTP+g4ld96R02dDX348zVuEA?= =?us-ascii?Q?ZrX2IqxLzmSNcsHSzl5dGOQP8N91sA3kjcLUENEaG/tewhjCX2Vx+9P5vAL0?= =?us-ascii?Q?Amb2opucCthBneVvsj845lrDugkOpIxES0xSbEQ2Czx7mKhuLP7vA6rwC7wg?= =?us-ascii?Q?1ChCutz1awEH2OfCwTRfaxqOhYDeBsgI48eGCSR7/dVOHpM1waWpP4NahIvi?= =?us-ascii?Q?DV0FEXrs4m79K02n/0aPvPAIdBvvBMCXPOzk1EIH3uAe4LtYZYoP50nnsKpa?= =?us-ascii?Q?ESZtdzRU9m65V/HYpMsdmpjTtiJdwb/ULUITT6RficUrB6/hYTjO6zDgSbL3?= =?us-ascii?Q?7m0AVNhGu9QJLui1FStev0FD/F0QoZXTbGIfKxxOeHIv3rQ5DGWOZcyQSSzo?= =?us-ascii?Q?OVwLeUixGsxkWLZhF50CgDwRoqhmh9dAus3N6Ek+ltvp4QAzksBjUzXAbHhZ?= =?us-ascii?Q?8Bc05Z1l8r+tlxY0jQIp8JUx70B+fw6bRXjuHebjudgNxUcLPeQCrB2uDaHZ?= =?us-ascii?Q?VKg3c5CI9ol0lf4j8N06kBQe8HbeZAbFfpYFieNXVhhRGXYNxHoCRgPD8YoH?= =?us-ascii?Q?7EGs6TmSY4dxveOZU5Q9taf+LOGyE6kquijzui5YQ5DXt53FGc5/y5R8bXDG?= =?us-ascii?Q?xF8Xeh+L7fINGhZjwFK6e6amNTHr1DcNX3B/rDYK/9mrlcDVEZ5uPUeZ4OaO?= =?us-ascii?Q?HPTno+1bqZKHZyjjbVxLe5E8oHXPtU4TjClsZQzFo9S23+pDpWlLvC8xhPDY?= =?us-ascii?Q?aMDugjlwIkI1cwWgX21x1hHDqn7DPj+vWUSy6LMJAqcgRzG0ksgGBBJkU2R0?= =?us-ascii?Q?YoQARS7v+cqGXzMuL2ij438+KRWAehqQ/y70nHhGaoCE6cXdoMn8rXpU5bDi?= =?us-ascii?Q?2WYmQ8e7c1TZeLyN/mbKAsIS02qgGsU8wKKBZlGQqWPnwPvuLd512E6EzP3o?= =?us-ascii?Q?gFDGaKkPpHTAQbS4nMvxaXRW6JZpHQc6hSLXmLRVUTKsPTppmNlR7sYRMRYP?= =?us-ascii?Q?dCtQg66dHUbYqXWUVEJAjUX4z5H5gIwi66chpccHyb48Zh9KKD4+lvpFN104?= =?us-ascii?Q?NUIsMlxqgbDY0kJx94K0EuqsM6LSZ6Bvqh9tr4s2s1Ikoc3GkT981cq9jejv?= =?us-ascii?Q?sNmv6LR3B3uCDO0EvYp7mPijKY2z7V7cQ0WYkIKTkflWpBNmP8GnCseTmB/j?= =?us-ascii?Q?gMGGvrCFv5rH4Z/2xkuCOWQL8uxJa2T5uUfCEEIn9baSbgItLTOUZrL1hDTV?= =?us-ascii?Q?3PTvzX59PfAVCMXcJLy/pkf2oUR6iPZEgXS8xkdaFxuK4dYKbgTrSjDnigNg?= =?us-ascii?Q?PMnXBDLwohFDTHZ+1YA6w9z3MpLB2uOJOtw1kCGn5sSa6auqa9ph/J3wfUVX?= =?us-ascii?Q?UoBi0zc+PvmYPuCFkJhVnnK5U5dNANqHHvcLziKf4dAgcBdOZpcFtU8Y9r3J?= =?us-ascii?Q?YDth0dGv/tdvq52fmh4A1wZY6p9T+GN4NJJTKm7+ynpj9lckkS+jvDnRyI+z?= =?us-ascii?Q?yxtbTTJmQQSmOXdsrj4INfw3jNta59t4P7h1Ok+dO8irHgrUd5eUBl4cn7ZM?= =?us-ascii?Q?ThTMlq2mjQd8omZG4OEskp7wTqT6uuUVkrXStFLQg7vFYpmi0AhXqb6Lw98Z?= =?us-ascii?Q?MdbiC7FL3ywajUpbWBEDJzkSaqWXA3k1tqxJf/by+dJn5r/4XxLNdrypKMU6?= =?us-ascii?Q?8JqhHqiTm0XIdvSlqIqZ38D8JkmC0WQ=3D?= X-OriginatorOrg: citrix.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5b5df522-df46-421b-b7a3-08deb4df65e4 X-MS-Exchange-CrossTenant-AuthSource: CH8PR03MB8274.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 May 2026 13:14:31.5784 (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: cpfI7Cmvgxc0kl6iiC+3OatIvTGrfT6eLo59jbU9NwsWY7pI0zVfBuKAB9nPhEbEcbAwyp/vHI8nGxuv7WdE644X4KPcWYfXCX9ZhoW54Oc= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR03MB5111 X-purgate-ID: tlsNG-d62444/1779110074-B4D49FF4-C251B081/0/0 X-purgate-type: clean X-purgate-size: 4736 X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1779110105706154100 Content-Type: text/plain; charset="utf-8" These aren't specific to SVM and will be used for emulator fast path so move them to hvm.h. Signed-off-by: Ross Lagerwall --- xen/arch/x86/hvm/svm/svm.h | 29 ----------------------------- xen/arch/x86/include/asm/hvm/hvm.h | 29 +++++++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 29 deletions(-) diff --git a/xen/arch/x86/hvm/svm/svm.h b/xen/arch/x86/hvm/svm/svm.h index cfa411ad5ae1..f75bca7c5f66 100644 --- a/xen/arch/x86/hvm/svm/svm.h +++ b/xen/arch/x86/hvm/svm/svm.h @@ -36,35 +36,6 @@ static inline void svm_invlpga(unsigned long linear, uin= t32_t asid) asm volatile ( "invlpga" :: "a" (linear), "c" (asid) ); } =20 -/* - * Encoding for svm_get_insn_len(). We take X86EMUL_OPC() for the main - * opcode, shifted left to make room for the ModRM byte. - * - * The Grp7 instructions have their ModRM byte expressed in octal for easi= er - * cross referencing with the opcode extension table. - */ -#define INSTR_ENC(opc, modrm) (((opc) << 8) | (modrm)) - -#define INSTR_PAUSE INSTR_ENC(X86EMUL_OPC_F3(0, 0x90), 0) -#define INSTR_INT3 INSTR_ENC(X86EMUL_OPC( 0, 0xcc), 0) -#define INSTR_ICEBP INSTR_ENC(X86EMUL_OPC( 0, 0xf1), 0) -#define INSTR_HLT INSTR_ENC(X86EMUL_OPC( 0, 0xf4), 0) -#define INSTR_XSETBV INSTR_ENC(X86EMUL_OPC(0x0f, 0x01), 0321) /* octal= -ok */ -#define INSTR_VMRUN INSTR_ENC(X86EMUL_OPC(0x0f, 0x01), 0330) /* octal= -ok */ -#define INSTR_VMCALL INSTR_ENC(X86EMUL_OPC(0x0f, 0x01), 0331) /* octal= -ok */ -#define INSTR_VMLOAD INSTR_ENC(X86EMUL_OPC(0x0f, 0x01), 0332) /* octal= -ok */ -#define INSTR_VMSAVE INSTR_ENC(X86EMUL_OPC(0x0f, 0x01), 0333) /* octal= -ok */ -#define INSTR_STGI INSTR_ENC(X86EMUL_OPC(0x0f, 0x01), 0334) /* octal= -ok */ -#define INSTR_CLGI INSTR_ENC(X86EMUL_OPC(0x0f, 0x01), 0335) /* octal= -ok */ -#define INSTR_INVLPGA INSTR_ENC(X86EMUL_OPC(0x0f, 0x01), 0337) /* octal= -ok */ -#define INSTR_RDTSCP INSTR_ENC(X86EMUL_OPC(0x0f, 0x01), 0371) /* octal= -ok */ -#define INSTR_INVD INSTR_ENC(X86EMUL_OPC(0x0f, 0x08), 0) -#define INSTR_WBINVD INSTR_ENC(X86EMUL_OPC(0x0f, 0x09), 0) -#define INSTR_WRMSR INSTR_ENC(X86EMUL_OPC(0x0f, 0x30), 0) -#define INSTR_RDTSC INSTR_ENC(X86EMUL_OPC(0x0f, 0x31), 0) -#define INSTR_RDMSR INSTR_ENC(X86EMUL_OPC(0x0f, 0x32), 0) -#define INSTR_CPUID INSTR_ENC(X86EMUL_OPC(0x0f, 0xa2), 0) - unsigned int svm_get_insn_len(struct vcpu *v, unsigned int instr_enc); unsigned int svm_get_task_switch_insn_len(void); =20 diff --git a/xen/arch/x86/include/asm/hvm/hvm.h b/xen/arch/x86/include/asm/= hvm/hvm.h index e7c1364802f8..a9b64814ca71 100644 --- a/xen/arch/x86/include/asm/hvm/hvm.h +++ b/xen/arch/x86/include/asm/hvm/hvm.h @@ -851,6 +851,35 @@ static inline void hvm_sync_pir_to_irr(struct vcpu *v) alternative_vcall(hvm_funcs.sync_pir_to_irr, v); } =20 +/* + * Encoding for svm_get_insn_len(). We take X86EMUL_OPC() for the main + * opcode, shifted left to make room for the ModRM byte. + * + * The Grp7 instructions have their ModRM byte expressed in octal for easi= er + * cross referencing with the opcode extension table. + */ +#define INSTR_ENC(opc, modrm) (((opc) << 8) | (modrm)) + +#define INSTR_PAUSE INSTR_ENC(X86EMUL_OPC_F3(0, 0x90), 0) +#define INSTR_INT3 INSTR_ENC(X86EMUL_OPC( 0, 0xcc), 0) +#define INSTR_ICEBP INSTR_ENC(X86EMUL_OPC( 0, 0xf1), 0) +#define INSTR_HLT INSTR_ENC(X86EMUL_OPC( 0, 0xf4), 0) +#define INSTR_XSETBV INSTR_ENC(X86EMUL_OPC(0x0f, 0x01), 0321) /* octal= -ok */ +#define INSTR_VMRUN INSTR_ENC(X86EMUL_OPC(0x0f, 0x01), 0330) /* octal= -ok */ +#define INSTR_VMCALL INSTR_ENC(X86EMUL_OPC(0x0f, 0x01), 0331) /* octal= -ok */ +#define INSTR_VMLOAD INSTR_ENC(X86EMUL_OPC(0x0f, 0x01), 0332) /* octal= -ok */ +#define INSTR_VMSAVE INSTR_ENC(X86EMUL_OPC(0x0f, 0x01), 0333) /* octal= -ok */ +#define INSTR_STGI INSTR_ENC(X86EMUL_OPC(0x0f, 0x01), 0334) /* octal= -ok */ +#define INSTR_CLGI INSTR_ENC(X86EMUL_OPC(0x0f, 0x01), 0335) /* octal= -ok */ +#define INSTR_INVLPGA INSTR_ENC(X86EMUL_OPC(0x0f, 0x01), 0337) /* octal= -ok */ +#define INSTR_RDTSCP INSTR_ENC(X86EMUL_OPC(0x0f, 0x01), 0371) /* octal= -ok */ +#define INSTR_INVD INSTR_ENC(X86EMUL_OPC(0x0f, 0x08), 0) +#define INSTR_WBINVD INSTR_ENC(X86EMUL_OPC(0x0f, 0x09), 0) +#define INSTR_WRMSR INSTR_ENC(X86EMUL_OPC(0x0f, 0x30), 0) +#define INSTR_RDTSC INSTR_ENC(X86EMUL_OPC(0x0f, 0x31), 0) +#define INSTR_RDMSR INSTR_ENC(X86EMUL_OPC(0x0f, 0x32), 0) +#define INSTR_CPUID INSTR_ENC(X86EMUL_OPC(0x0f, 0xa2), 0) + #else /* CONFIG_HVM */ =20 #define hvm_enabled false --=20 2.53.0 From nobody Sat May 23 21:05:07 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=1779110100; cv=pass; d=zohomail.com; s=zohoarc; b=Z5I8nArmTRoGNl6ozmBLscsXugB6yGP3hytjko8rhBJyPyYBD522VG7ldfOnaNlJelKfIFoQl64YUuPmhNn5htUNKTOSa9XmjPbi6uhGYvibGDfuuYIMCFTXLLUECZuueuyNnAtCxuPT1HM9mhRKXtBjj78EqyMhrVH3K/u2WoQ= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779110100; 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=KoDhQ+7axytwqMbd7TZEfHbYAtFgt+F6pamrfRpBcS0=; b=Y0pjBVchR/IdmpSObTkfD1dCxdlfs7fm9K0F4dQ2upX1h/HohNlMSQ3l16Rl/7lZXHLDaUWB87G83iOgYl2UZIli7t+A0MuACU4NQiS//0cathDWWGwxrDorEN1TDHEUYRVtqZ3hpTETQ8p5fUw46e0foNKVtbABBT2Y0dvSCv8= 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 1779110100611724.0286839313659; Mon, 18 May 2026 06:15:00 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1311851.1582018 (Exim 4.92) (envelope-from ) id 1wOxnt-0001Kk-6E; Mon, 18 May 2026 13:14:41 +0000 Received: by outflank-mailman (output) from mailman id 1311851.1582018; Mon, 18 May 2026 13:14:41 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wOxnt-0001KS-2D; Mon, 18 May 2026 13:14:41 +0000 Received: by outflank-mailman (input) for mailman id 1311851; Mon, 18 May 2026 13:14:40 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wOxnr-00015y-Tq for xen-devel@lists.xenproject.org; Mon, 18 May 2026 13:14:40 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wOxnr-003JoA-9e for xen-devel@lists.xenproject.org; Mon, 18 May 2026 15:14:39 +0200 Received: from [10.42.69.1] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 6a0b10b7-2eae-0a2a0a5409dd-0a2a4501bf3c-22 for ; Mon, 18 May 2026 15:14:39 +0200 Received: from [52.101.56.22] (helo=BN1PR04CU002.outbound.protection.outlook.com) by tlsNG-d62444.mxtls.expurgate.net with ESMTPS (eXpurgate 4.56.1) (envelope-from ) id 6a0b10b9-c1f2-0a2a45010019-346538161449-4 for ; Mon, 18 May 2026 15:14:38 +0200 Received: from CH8PR03MB8274.namprd03.prod.outlook.com (2603:10b6:610:2ba::5) by BY5PR03MB5111.namprd03.prod.outlook.com (2603:10b6:a03:1e2::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.25.24; Mon, 18 May 2026 13:14:36 +0000 Received: from CH8PR03MB8274.namprd03.prod.outlook.com ([fe80::ebe2:32c1:d2be:a096]) by CH8PR03MB8274.namprd03.prod.outlook.com ([fe80::ebe2:32c1:d2be:a096%7]) with mapi id 15.21.0025.022; Mon, 18 May 2026 13:14:36 +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=XmsVF3aYBfqvy99Xv4+jX4KNqikN8LFoFqMES4Q9hvZFSp70qTQx/p8W0du4KnojDHL3aXLhiTBH+/z8CBK2TStTgtL1EGKy5M54Lzft48Pr2K4NPguJTh3aXeHfsXchOewzlCvygM9c2TMlIVRHAdrgIEGGAamWVJ9ZGKI5wJeiugYgRv201zFULbsguEbk78ExtuW+XTnPRbt7roDK8NDWw4bqqcnWNNWylwfoXEow1HaCJK1OJGOLQPZElpqpItzSFzOBVX1qyMKdb3tkDxl64Ug5j7gEU7AIRD9sFBimtQDUhcCx8NgNcMjoIzriFLgq2KfJlNKk9S8soKwlpw== 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=KoDhQ+7axytwqMbd7TZEfHbYAtFgt+F6pamrfRpBcS0=; b=MD2rGGtvtRIZKSA96jkyFYJPJfbta0QpxkKvos79FM882DUde9XC4AOZSevOyQUkcKYzeDsWJNwJIsDnaJTAWptBXrWrDi2TEdbB0puBCDG4K/oOUxnUDk6eYBr6yqjwj/LkgCEQ4Dq1mcxmu4RTZRm0eXSDjmewXrR2M5yymWav3RKcELJaQ6k3uiTXTfmOXMObWOADuhvm1aXPvGoC+bhsC/3KCPfeHV10XP2zwcX/K5NMQsz3d1X9tpzpFwL8XPtZLb71SuRLqv+LINtsZTrUPIKPcfSKUarY0aAWidWg8jcmOPUtjEaZLA4SWXh+ySqMQoKUVfZY+eBtpsV1zw== 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=KoDhQ+7axytwqMbd7TZEfHbYAtFgt+F6pamrfRpBcS0=; b=ag3tNsGfO8D2KzYDipOZKxUrAWdazynABCS5a7ACk85ce89hYoRd6NIR8HUOikaY3okPgl6IMoCLaCggk2JIHZPRPDyHI82JEARGdUq2QvqluiL7WQEK9Myg3Yvxkpr07Wy1vTUPKk4t7f92mE9ttL9VFNgbpjxgvIMU1gG8R1w= 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: Ross Lagerwall , Jan Beulich , Andrew Cooper , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= , Teddy Astie , Jason Andryuk Subject: [RFC v1 6/7] x86/svm: Use the emulator path for VMEXIT_HLT Date: Mon, 18 May 2026 14:14:03 +0100 Message-ID: <20260518131404.3716969-7-ross.lagerwall@citrix.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260518131404.3716969-1-ross.lagerwall@citrix.com> References: <20260518131404.3716969-1-ross.lagerwall@citrix.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: LO4P123CA0373.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:18e::18) To CH8PR03MB8274.namprd03.prod.outlook.com (2603:10b6:610:2ba::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH8PR03MB8274:EE_|BY5PR03MB5111:EE_ X-MS-Office365-Filtering-Correlation-Id: 132fa3f7-db45-45df-61f4-08deb4df689d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014|22082099003|56012099003|18002099003|11063799003; X-Microsoft-Antispam-Message-Info: UsW46sa84rLqLcB3/ncT0KO13TjkveqYENur/yNER1L6i1zD9NdfnxkRO9j3u7DKZER4Ji1V/VcLf6F0UKoDR88Avo4MAxuV2xBYD49F+aW/cXDrA97GpYPyt4y8zvOx2zi2iVy4RqAvxSJjjsp7+DKNQHe0CSZFVVFMnIQpc38xL3aDlU9f302kHH9084dA0zTG9yozsMq6yReKh21FWGmh65DhEnJYBh5jUWN34ZQF5MUe4CnHU+QA/GhY0YiWaGeVlWnkY0X/H8MHThbp28fHTzdiWvqtwPnrZzUbOzR4zYMM2ggcDfK2AC9uBj1cJSAcG2AGbcWKBv97zjRnir8X8/My5Nj30iGD8mkgpWKICGkMbTISuNMt/mwjjIJTR+bdXCrqg+JCxorcW59PPMeIZwboqbd+DIm4q7DMOlwlxGHwukQAitZXhFj8NTdaq6/RdUjsj5fQ/7sfV1EXDrryc6hAwSJANfGQfDmhEZenYG2kpkpa1qH08cOeWAZ5uURNFRheSj+/JoMlF/i9Hz/HlkrmuLVHx7TPtqs+29S85M4UR7YCz5IVlcr2gpGBDVK+90gz4swaKIcecx6i41Wea0H2AakhRORgMtudg+vk3ShEmzuypVEbPn0haO/1UTo3XLlGXTMkUvLp8RjQkyBhMyVWfkgMKIFTwMfQT636PpjiLJq6tt8GmdsPAdUg 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)(22082099003)(56012099003)(18002099003)(11063799003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?4UjIJmNSDMEk/43vFr6s590TZS+r9thMXUH6lLJlRLFynCfvRwkJ68Rw4c1W?= =?us-ascii?Q?Uq6H2GHacCEA2plfZtl6H4DYQ/s/G08ZiCV8X6wdv7Dzq2UPziuUeT43+It1?= =?us-ascii?Q?uIvjOcNbX+7X/BkHUmyq3H/1lVHjy65wwAGAbi8w2ZLus00XbUaNHxFhPTwT?= =?us-ascii?Q?2V+9D2Wr2ULUVDoQV9e+flV5H0XvAixSw0Np2F4+K/ZJhhSxtCKQX8B2Daxv?= =?us-ascii?Q?sYeruix1OytkzeUBBY/RfcqkgMEwIFTqMJKnZvIspy6zDRKhS37I50aCYKcS?= =?us-ascii?Q?7spOSgEelgce8c6LlBmK5NXRC1Zb/f/FkhB2/dbZcMi1HcJBcPgu8RX5B+Q1?= =?us-ascii?Q?vnd3OqLxa8EYvraVqfSSPN0vonRTE0pygZnkZwI+t1Xt4THwiwvvTOfjsVQm?= =?us-ascii?Q?qKgMCENRuR8Lmxg3bIyaDxEGcKWyxEOqkxBxO2W0lI8/IFg46GFgEw17aDg1?= =?us-ascii?Q?7GWRR6wYHUx15MZMw+G3JCK9iFzMIKM0DM1N7N+dYA9KHGiw9BLZVvf+IVID?= =?us-ascii?Q?Ny5rLBSYgAG/hWEyLXfTtcJbpPf7sPO+oARbAUe6Zsl9IujWrEf4ELziWRhs?= =?us-ascii?Q?4Dlm+vxFZTICp/RFsfjOqE33AMd2Ti9r2veiYPWizAq2oG72V4WUKBEWXlPf?= =?us-ascii?Q?FwG1GoT44AMJsvkYKRQQR2uoI3/TMJvXdExtF2Ey2LPGVbLBes3GvNSL2tyq?= =?us-ascii?Q?l2Ryytq5+KcgpBWLYwtx/fXEjZ7BfdNCuETNlyY3wZXQhe3gnIvRuFNdFzA+?= =?us-ascii?Q?PMM/Gpulk/UxhZPJ0fXMjn8K1ynYG6MFEJJgSvXzmTbJ1fHWnSQlYffeciNI?= =?us-ascii?Q?JDM/hZXJhY5bP8D9w4v2MHKcW1aOSbD9Fh5I+w7WfG+QIxafojW4/Ql6G2Jl?= =?us-ascii?Q?oQH4B+ioTiuw6hSQ6yDClmltWkp9fa2Nm8GPFMXQ/VbtUjKszfetSrJifB+w?= =?us-ascii?Q?bSKsoluF5y/XuE8TA6nSNjdwN72Y38jdhL5St+pNwTFFRml5872SlMnrzbFH?= =?us-ascii?Q?x4IxR6KcKpJznPaCEQXR00bIdgjx2RrObFHAuYEJROltLPKztOu6BmHC9ijc?= =?us-ascii?Q?+n4/8PEvKxvFN8JJJNIcSmDM9WJqU0jZmesN2iRm3+iE57Xg3gQOnXYJoFYk?= =?us-ascii?Q?pcDLnIv1LZi1VripA0VLef9mrpm5HZ1BpTJT/1DFNYCOdqmc/tNCLhbNg5ry?= =?us-ascii?Q?/zbWIw40sZysj01PZPiZR/7ZFhRrtQ1MRwwwma0fwZp0jatk1dI4jxucIaOW?= =?us-ascii?Q?Yf3Wn1FiN1T2i+hPE5pDxCiCcugjP8BMZMxltnJOm9R3CN64UKxTANLPPdIC?= =?us-ascii?Q?aI1U5EEuvP30L3jkwT8ls6YUa4mbZ9AlojKIR+ZbEzd0RQUy/z/SymdKSiHD?= =?us-ascii?Q?1mvN0/yaF4HNBsvvbAQg9jWI6QTa0Elxn5GrEB0Jgtuvg3OVoQ+ETr5KPkZj?= =?us-ascii?Q?sbpIFhqJGup8dxRJi0lB92HDhEiL1O8H223RFfewwzNRKuoCjKB6jC4EpyRM?= =?us-ascii?Q?b/bOpy4JxpN8cm2b8LgefFtz75czlHjz2UG/CvD7JqZCOs5qbR4ybEOGHG7H?= =?us-ascii?Q?d7TWnT381pCzaEMonswFfDR3x3ZLiMKweBPHbpoKpXuDi7K7yMf6vfO+mgdC?= =?us-ascii?Q?LePAteObyYYaPGP/DNZKAK/fZ6zU1NcBk/fMOonY+wxORsNEmi9x/0f8Q6iS?= =?us-ascii?Q?O2Tbs2IiesaX0NjCE7yG+JCStrzWrK6IAWjt9aVKuN9xkXP3JoSRzlAPjNTS?= =?us-ascii?Q?GU7jL92p2oB/xiodKDmluLZGCdzVjk0=3D?= X-OriginatorOrg: citrix.com X-MS-Exchange-CrossTenant-Network-Message-Id: 132fa3f7-db45-45df-61f4-08deb4df689d X-MS-Exchange-CrossTenant-AuthSource: CH8PR03MB8274.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 May 2026 13:14:35.9885 (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: l9LaQ+Lp6UYvnC26wCYopAKCf8fyT/fRHJpFpXD/cIUE/SLjYFK4cnq/+/X+dTnch0EO2vhbKw0IDI5zSG/CeVRGNioctBw0J567IkUyrY0= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR03MB5111 X-purgate-ID: tlsNG-d62444/1779110079-ACA50FF4-FF3DD081/0/0 X-purgate-type: clean X-purgate-size: 3664 X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1779110101729154100 Content-Type: text/plain; charset="utf-8" Signed-off-by: Ross Lagerwall --- xen/arch/x86/hvm/emulate.c | 5 +++++ xen/arch/x86/hvm/svm/emulate.c | 2 +- xen/arch/x86/hvm/svm/svm.c | 24 +++++++++++------------- xen/arch/x86/hvm/svm/svm.h | 1 + 4 files changed, 18 insertions(+), 14 deletions(-) diff --git a/xen/arch/x86/hvm/emulate.c b/xen/arch/x86/hvm/emulate.c index c9553cd28238..471c032c1e9c 100644 --- a/xen/arch/x86/hvm/emulate.c +++ b/xen/arch/x86/hvm/emulate.c @@ -2800,6 +2800,11 @@ static int _hvm_emulate_one(struct hvm_emulate_ctxt = *hvmemul_ctxt, =20 switch ( hvmemul_ctxt->insn ) { + case INSTR_HLT: + hvmemul_ctxt->ctxt.retire.hlt =3D true; + rc =3D X86EMUL_OKAY; + break; + default: ASSERT_UNREACHABLE(); rc =3D X86EMUL_UNHANDLEABLE; diff --git a/xen/arch/x86/hvm/svm/emulate.c b/xen/arch/x86/hvm/svm/emulate.c index 1dd830a31bd7..31f3cd88a858 100644 --- a/xen/arch/x86/hvm/svm/emulate.c +++ b/xen/arch/x86/hvm/svm/emulate.c @@ -16,7 +16,7 @@ #include "svm.h" #include "vmcb.h" =20 -static unsigned long svm_nextrip_insn_length(struct vcpu *v) +unsigned long svm_nextrip_insn_length(struct vcpu *v) { struct vmcb_struct *vmcb =3D v->arch.hvm.svm.vmcb; =20 diff --git a/xen/arch/x86/hvm/svm/svm.c b/xen/arch/x86/hvm/svm/svm.c index f49d2ebbfdd5..2d6022d6238c 100644 --- a/xen/arch/x86/hvm/svm/svm.c +++ b/xen/arch/x86/hvm/svm/svm.c @@ -2051,18 +2051,6 @@ static void svm_do_msr_access(struct cpu_user_regs *= regs) hvm_inject_hw_exception(X86_EXC_GP, 0); } =20 -static void svm_vmexit_do_hlt(struct vmcb_struct *vmcb, - struct cpu_user_regs *regs) -{ - unsigned int inst_len; - - if ( (inst_len =3D svm_get_insn_len(current, INSTR_HLT)) =3D=3D 0 ) - return; - __update_guest_eip(regs, inst_len); - - hvm_hlt(regs->eflags); -} - static void svm_vmexit_do_rdtsc(struct cpu_user_regs *regs, bool rdtscp) { struct vcpu *curr =3D current; @@ -2363,6 +2351,13 @@ static void cf_check svm_set_reg(struct vcpu *v, uns= igned int reg, uint64_t val) } } =20 +static void svm_emulate_one(struct hvm_emulate_ctxt *ctxt) +{ + ctxt->insn_len =3D svm_nextrip_insn_length(current); + if ( !hvm_emulate_one_ctxt(ctxt) ) + hvm_inject_hw_exception(X86_EXC_GP, 0); +} + static struct hvm_function_table __initdata_cf_clobber svm_function_table = =3D { .name =3D "SVM", .cpu_up_prepare =3D svm_cpu_up_prepare, @@ -2496,6 +2491,7 @@ void asmlinkage svm_vmexit_handler(void) vintr_t intr; bool vcpu_guestmode =3D false; struct vlapic *vlapic =3D vcpu_vlapic(v); + struct hvm_emulate_ctxt ctxt; =20 regs->rax =3D vmcb->rax; regs->rip =3D vmcb->rip; @@ -2840,7 +2836,9 @@ void asmlinkage svm_vmexit_handler(void) } =20 case VMEXIT_HLT: - svm_vmexit_do_hlt(vmcb, regs); + hvm_emulate_init_once(&ctxt, NULL, NULL, regs); + ctxt.insn =3D INSTR_HLT; + svm_emulate_one(&ctxt); break; =20 case VMEXIT_IOIO: diff --git a/xen/arch/x86/hvm/svm/svm.h b/xen/arch/x86/hvm/svm/svm.h index f75bca7c5f66..9422dbd38a78 100644 --- a/xen/arch/x86/hvm/svm/svm.h +++ b/xen/arch/x86/hvm/svm/svm.h @@ -36,6 +36,7 @@ static inline void svm_invlpga(unsigned long linear, uint= 32_t asid) asm volatile ( "invlpga" :: "a" (linear), "c" (asid) ); } =20 +unsigned long svm_nextrip_insn_length(struct vcpu *v); unsigned int svm_get_insn_len(struct vcpu *v, unsigned int instr_enc); unsigned int svm_get_task_switch_insn_len(void); =20 --=20 2.53.0 From nobody Sat May 23 21:05:07 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=1779110111; cv=pass; d=zohomail.com; s=zohoarc; b=cIDW6K2qyrVnhOupAIcLd5iCcwCrncWvqLHc1whMyA3wxO+dXKFrKtU1a36o0etpFBB3diaDlBAUshF8yo9ntFC4MggXD2ERo8DCW9Oa2r128D9H0834851qkAYQmfhCTASnlZTAG7ofJOkDoidRg8cW92S5HzG9O8N0QV5+B2o= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1779110111; 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=jSz8C0IVcytuL/56tb/6U7V4vTK3UtX0AriIPF8ktGk=; b=CmTFYZUrarFSXEoIQRpTE20Wayr8qwOdKOcc9qbC+rGks6Wp5fpuP8kFGZYLQIq6Zl8ZCttRDpPGqscm1Q6yqoIeSdruyhIMqAlDiPGH5fIIriXdgyIYGKh9Xrw1PtnWHG1Abo3BPkXD47meTv/wb0eNXe2GqZ5iWGjhXLa8yo8= 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 177911011112754.815841499227076; Mon, 18 May 2026 06:15:11 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1311858.1582028 (Exim 4.92) (envelope-from ) id 1wOxny-0001tf-EA; Mon, 18 May 2026 13:14:46 +0000 Received: by outflank-mailman (output) from mailman id 1311858.1582028; Mon, 18 May 2026 13:14:46 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wOxny-0001tP-AR; Mon, 18 May 2026 13:14:46 +0000 Received: by outflank-mailman (input) for mailman id 1311858; Mon, 18 May 2026 13:14:45 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wOxnx-0001nH-6n for xen-devel@lists.xenproject.org; Mon, 18 May 2026 13:14:45 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wOxnw-000mZB-Ix for xen-devel@lists.xenproject.org; Mon, 18 May 2026 15:14:44 +0200 Received: from [10.42.69.2] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 6a0b10b5-bab6-0a2a0a5309dd-0a2a45028f1a-46 for ; Mon, 18 May 2026 15:14:44 +0200 Received: from [40.107.208.42] (helo=PH0PR06CU001.outbound.protection.outlook.com) by tlsNG-720697.mxtls.expurgate.net with ESMTPS (eXpurgate 4.56.1) (envelope-from ) id 6a0b10c0-af86-0a2a45020019-286bd02a7639-3 for ; Mon, 18 May 2026 15:14:42 +0200 Received: from CH8PR03MB8274.namprd03.prod.outlook.com (2603:10b6:610:2ba::5) by BY5PR03MB5111.namprd03.prod.outlook.com (2603:10b6:a03:1e2::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.25.24; Mon, 18 May 2026 13:14:39 +0000 Received: from CH8PR03MB8274.namprd03.prod.outlook.com ([fe80::ebe2:32c1:d2be:a096]) by CH8PR03MB8274.namprd03.prod.outlook.com ([fe80::ebe2:32c1:d2be:a096%7]) with mapi id 15.21.0025.022; Mon, 18 May 2026 13:14:39 +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=nUCV8Dv9bhFFV1MyNsMYFaX0wcL/ybkVWtsPaKZNzle4kMKaXTQpOeNJxCWD7B7wSEXliMEuw7EZ+78/+KV9DTVw9twyxUetliyqAEe8L+CW5Q41CaOuOMYx3hzfq3DPHIO4qzf+rMG8j4ZE14oyYxgwVLp6hEizH8AFfDPKtpeRP0a4rWoHix1HL0Fg45bqTHDZJDbo+JarUxb6q8CkCz1BqWbvNpgXDaIkoQEzQVKQ1stpO+1i2Fe8rafDDkWPr4DLQZdKxo/WvjUxAmlCFvCBGbnrrjNwoE7M2vuvMBOhaN1HOkKUIPWDTVahbHkoAs3LO6dfLHNGlnpsPWOwxg== 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=jSz8C0IVcytuL/56tb/6U7V4vTK3UtX0AriIPF8ktGk=; b=kfFgBKM5E9JPBwfHVq8mJjt52jtJC8jfqOwqKWqwHRy54Wp8W3otK6y2u0O/1Y0ZI+EuH6TQZQA2ZKtg2tZLIDWBTbB7B9gz0TbOxw32eVXm2k3On4TgtAMXUM9yGWT4lzv6EtEezv26Daqnaydznt+ljbqoslrZimyE6h7jKibxmgWkPOGDCJwvGsdcZbSpI/T1INWdEJaNl0UhKkNiJ9mQYV4/wAf+XBiGCbc85nAJzQUEDM0ru2vdjog/NExdZeXoKElRKff9MUj1Zm/NNhvuzsQcdh7a1MR+cjbzHf3dMX6prw5+VxlWXT4Qa5b0EBqi5cUPGYJ5fww2tFPTig== 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=jSz8C0IVcytuL/56tb/6U7V4vTK3UtX0AriIPF8ktGk=; b=X13BSbgcVhVwZT4CqFily1CcqrLPtg4heqRRSnQl3QcXuvCZMJi5gEpUmgEg0+UmbRZsFPokBa/7J7CwIt2E06EUl2/0wRuQgqwiFtWDtlPdNVPWncDyQZlFvzXFTjTscWOLsGFv+HX5gUagPxYdXLNcGWm7pJo0hArXGyhWWPc= 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: Ross Lagerwall , Jan Beulich , Andrew Cooper , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= , Teddy Astie , Jason Andryuk Subject: [RFC v1 7/7] x86/svm: Use the emulator path for VMEXIT_CR* Date: Mon, 18 May 2026 14:14:04 +0100 Message-ID: <20260518131404.3716969-8-ross.lagerwall@citrix.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260518131404.3716969-1-ross.lagerwall@citrix.com> References: <20260518131404.3716969-1-ross.lagerwall@citrix.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: LO4P123CA0572.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:276::22) To CH8PR03MB8274.namprd03.prod.outlook.com (2603:10b6:610:2ba::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH8PR03MB8274:EE_|BY5PR03MB5111:EE_ X-MS-Office365-Filtering-Correlation-Id: c9d292ea-384c-4986-33ff-08deb4df6a9b X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014|22082099003|56012099003|18002099003|11063799003; X-Microsoft-Antispam-Message-Info: awEB4N86Z7GSbvrO1oyHCwt1rs0bAQB0gn69AORCGP9gWSzSfKjIV5PLsX6sdwU1SBlBELf00840pF4rzouwHeaqDP+3q9kiC08RYQ75ybaj3aGHn5bZFarZEZSav+my2PPjsxjoiabJxPtN5aODW/pv4m+QJhxZknLMpdpttaEuERipVXkaWkcLNAWvOhWsd0vTfJeakUkJPD5iqpWVSIsFQm8EnnEMWDUeHFVvfIcEBEWPC/ibs2KB54ncOe6q26c+N1Nr8PMd1Q8cUC1q68901DuX+vQQXtt/k/o8PYZTu68xPvApBb+yygEbWL3CVOXPEwNbqw2Sf6/+Ak8XQjN0csO0KuzS9mpqzjN5sjS50yMbNCnkeZGIe0H1HXqVl9UDDT7vZ825QXTyaaacU7mmxL4//yZbBj0miO9F7EGfeCzG1X28NjvFsNBDv4mYf+pPtGGAS+V6Ff1UmQtbt0mp1OGA6le80O/dgH62GPonATT3phHjI4xKIh4QXp65tHvr9qevlsOynkR+H7yU4F9Er9P9RLht+7LZQKVRATYtZjHlSWpozT1Vd/hJzPV+pcmvx++VQ6r67ta93D/SPj8HRW1MvyOGfopzZWiKkillfIgobX7YwB/VZoe08pt2PZ/qlK8RPCilptA+S2eq0EnCvu0urRSy5ZlraJAVLzSTq0MyHjIrQ16qCp4h1NDw 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)(22082099003)(56012099003)(18002099003)(11063799003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?maTtU7xVEhLCIjQn3HOqwAadUg48LJLeOsf/1a+LifRPUoYFoserKkqw6QF3?= =?us-ascii?Q?V4DoXJ9PWMZvYioz/dpNMGtFzR8w6sNuE36gi+UIi8vfWrMmCSXaqCoKG8KJ?= =?us-ascii?Q?YKGYpDhFqZZXKgfRqES6+TWKPCnoGNo2bZdeqGp4eDY1VvplBoHCB7L8Up65?= =?us-ascii?Q?nSQWQxK7dPXqS4iYUoGkFYqMFqN1Ec2ReO+MuwRfcEuV7xzzqXpvJBKDr/ce?= =?us-ascii?Q?vdC2WPtROdu8RQlQytx7nIt/9rI8e29Cwn7wcK58i+S6+tpORwAgdrvZHCl4?= =?us-ascii?Q?V53asSOEiFKv//LR685oW2KWmgfhiOWX8gq6q0dp/9Ckrp/3ekyiqS6+icC6?= =?us-ascii?Q?QpX05CryFk7zJA40khLPxlCFn+yt8EZmuq0WAH5koaEv5jp3Ra3P3oDARD5R?= =?us-ascii?Q?5BGTL/mhgHH0/Ik5UEssTNW9LFzTG/5y0QbSSeK25pW0ZqyNDRUSkYP+cnEy?= =?us-ascii?Q?7KkfDWX8YgJ6iqiLN2xqBiL+OT3WMtGl24P1eKy6dL5y71ZdF1eyhlEzi3LL?= =?us-ascii?Q?UULM9rbwKcSEHV+QRcsC28zNzOPYGcsA1zXrPrLydTuES+iJAYEWo6AnaCb/?= =?us-ascii?Q?DMCMSzjH8ewdPsLEF7EFom8YKxJsayA33PLT9slMmJsblu/xUdYh60d8ErMi?= =?us-ascii?Q?KRJiRNaYY83kMm7yTejqS24duFrnXWDry1BYR4PNIUbTHOWPA15IZA5L1wYm?= =?us-ascii?Q?rXUI/aCIoRF/sPxvjg6j62K2pA/TKpUtLTMwyveH/OOx5qYBVG39axpASMeP?= =?us-ascii?Q?gTi2PjJEQSRhhvTY89x7Ai/DNzhrrEnO1DeSRQZmbL0qindyjGhEUPPUgxzg?= =?us-ascii?Q?eitW4zCBFpPTlXbT8YWXZozp0GmuQL96SBQnY8r24GlvGsjAwmiWvF6LP0L+?= =?us-ascii?Q?cFbwr7J/9+WfqTVIeOxKL0SqqCXdLiGmPn9DZCn5oU5HIG+d8D9lib2WF221?= =?us-ascii?Q?zioI4ph0nzR8xlGeYkRVbZW4m8xiAWj6WS66EyXnL1nRZ6monSE96Sr8Zc06?= =?us-ascii?Q?Ezt142rzwB8lLHnXpOEXfhmFyMmeXfgGtSelndTwbrZYilv2+ucoKXkc1JxJ?= =?us-ascii?Q?vB1eGss4WvSEjKnRR2jnGTwWqnHx5FsM1Da5bCGi3k9AfEeOJRkY6k8LMqdo?= =?us-ascii?Q?5LYytdUUGrfGDvqMlW7z2PA62ok/1FCJP2XASq4x0iu+ei3/YotIVpg1qVnP?= =?us-ascii?Q?5bGsb0cN7XsxdIIe9N9SemLggoHX5CjXNANbstxNSUFAfGugmiSroYM8I0kd?= =?us-ascii?Q?c3cNZY9PA2CKXcKo9tZDmVvjxDNyulUb0WxRvNKhwkfLCq5vNw1uH6F90U0T?= =?us-ascii?Q?yMzFHI6wnTO9essGV+48hgjB3KEIfyPTFObbdKAznch2dPiRkMEJLt3XYPdg?= =?us-ascii?Q?fA7OEMUfujRvkTq1s3byjbUC9ikJzueeTUeyC/kUsSg5D9gPGpNamEATs//s?= =?us-ascii?Q?I8U4Q+RGoslDVRNFXuiwGQoG5fl5N6ywoAAjPB0c9k/I6alchhYhg3J4Iqq2?= =?us-ascii?Q?VbdAXtG75TBvqwF/pMDlnRqVo9TvYQrO6bNsxxf2wsU4DBt5Zg7t9Hb5BzM7?= =?us-ascii?Q?NYYmwpHdbqY8b14NjYK0NCRoDEAC35K1rNWkRpBOW9Yt9fsM/Mv4dqp1h9LR?= =?us-ascii?Q?zZRxAZG2ZSMcGrnsRICX6x378cAavb2Rm8/V+D+yAVra5kkUdRGbDXccxUrG?= =?us-ascii?Q?mEccvqLwh63QM7Arnr7d/5kQUwUkwsaCZhnbWIPj+9FwhxBXJE1Nd+d78BXZ?= =?us-ascii?Q?A/Bq+Ss+Efik98xsiOK7aTik9LnuiEk=3D?= X-OriginatorOrg: citrix.com X-MS-Exchange-CrossTenant-Network-Message-Id: c9d292ea-384c-4986-33ff-08deb4df6a9b X-MS-Exchange-CrossTenant-AuthSource: CH8PR03MB8274.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 May 2026 13:14:39.3120 (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: lDMkA7rcZ+a+Jv/8DWmkxJFd5Ek8NCzaSsxwCb1fv3haWbdW8QKGl50JRFTQKjTPbGl2ThEQh6y041N816GxX1i5OEKs1fBdNdV1h3VNZ2c= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR03MB5111 X-purgate-ID: tlsNG-720697/1779110083-83762161-3447B30A/0/0 X-purgate-type: clean X-purgate-size: 4269 X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1779110113940154101 Content-Type: text/plain; charset="utf-8" If the processor has provided extra information, use that to accelerate the emulator path. The hvmemul_{read,write}_cr callbacks are used for consistent behaviour between emulated and fast paths. Signed-off-by: Ross Lagerwall --- xen/arch/x86/hvm/emulate.c | 11 ++++++++++ xen/arch/x86/hvm/svm/svm.c | 28 +++++++++----------------- xen/arch/x86/include/asm/hvm/emulate.h | 7 +++++++ xen/arch/x86/include/asm/hvm/hvm.h | 2 ++ 4 files changed, 29 insertions(+), 19 deletions(-) diff --git a/xen/arch/x86/hvm/emulate.c b/xen/arch/x86/hvm/emulate.c index 471c032c1e9c..0f7507575884 100644 --- a/xen/arch/x86/hvm/emulate.c +++ b/xen/arch/x86/hvm/emulate.c @@ -2804,6 +2804,17 @@ static int _hvm_emulate_one(struct hvm_emulate_ctxt = *hvmemul_ctxt, hvmemul_ctxt->ctxt.retire.hlt =3D true; rc =3D X86EMUL_OKAY; break; + case INSTR_MOV_FROM_CR: + case INSTR_MOV_TO_CR: + { + unsigned long *val =3D decode_gpr(regs, hvmemul_ctxt->u.cr.gp); + + if ( hvmemul_ctxt->insn =3D=3D INSTR_MOV_TO_CR ) + rc =3D hvmemul_write_cr(hvmemul_ctxt->u.cr.cr, *val, &hvme= mul_ctxt->ctxt); + else + rc =3D hvmemul_read_cr(hvmemul_ctxt->u.cr.cr, val, &hvmemu= l_ctxt->ctxt); + break; + } =20 default: ASSERT_UNREACHABLE(); diff --git a/xen/arch/x86/hvm/svm/svm.c b/xen/arch/x86/hvm/svm/svm.c index 2d6022d6238c..3ba852f52666 100644 --- a/xen/arch/x86/hvm/svm/svm.c +++ b/xen/arch/x86/hvm/svm/svm.c @@ -1625,22 +1625,6 @@ static void svm_do_nested_pgfault(struct vcpu *v, domain_crash(v->domain); } =20 -static void svm_vmexit_do_cr_access( - struct vmcb_struct *vmcb, struct cpu_user_regs *regs) -{ - int gp, cr, dir, rc; - - cr =3D vmcb->exitcode - VMEXIT_CR0_READ; - dir =3D (cr > 15); - cr &=3D 0xf; - gp =3D vmcb->ei.mov_cr.gpr; - - rc =3D dir ? hvm_mov_to_cr(cr, gp) : hvm_mov_from_cr(cr, gp); - - if ( rc =3D=3D X86EMUL_OKAY ) - __update_guest_eip(regs, vmcb->nextrip - vmcb->rip); -} - static void svm_dr_access(struct vcpu *v, struct cpu_user_regs *regs) { struct vmcb_struct *vmcb =3D vcpu_nestedhvm(v).nv_n1vmcx; @@ -2869,10 +2853,16 @@ void asmlinkage svm_vmexit_handler(void) =20 case VMEXIT_CR0_READ ... VMEXIT_CR15_READ: case VMEXIT_CR0_WRITE ... VMEXIT_CR15_WRITE: + hvm_emulate_init_once(&ctxt, x86_insn_is_cr_access, "CR access", r= egs); + if ( cpu_has_svm_decode && vmcb->ei.mov_cr.mov_insn ) - svm_vmexit_do_cr_access(vmcb, regs); - else if ( !hvm_emulate_one_insn(x86_insn_is_cr_access, "CR access"= ) ) - hvm_inject_hw_exception(X86_EXC_GP, 0); + { + ctxt.u.cr.cr =3D vmcb->exitcode - VMEXIT_CR0_READ; + ctxt.insn =3D (ctxt.u.cr.cr > 15) ? INSTR_MOV_TO_CR : INSTR_MO= V_FROM_CR; + ctxt.u.cr.cr =3D ctxt.u.cr.cr & 0xf; + ctxt.u.cr.gp =3D vmcb->ei.mov_cr.gpr; + } + svm_emulate_one(&ctxt); break; =20 case VMEXIT_INVLPG: diff --git a/xen/arch/x86/include/asm/hvm/emulate.h b/xen/arch/x86/include/= asm/hvm/emulate.h index 1e626f8af8f2..3661ca28d6f4 100644 --- a/xen/arch/x86/include/asm/hvm/emulate.h +++ b/xen/arch/x86/include/asm/hvm/emulate.h @@ -56,6 +56,13 @@ struct hvm_emulate_ctxt { =20 unsigned int insn; unsigned int insn_len; + + union { + struct { + int cr; + int gp; + } cr; + } u; }; =20 enum emul_kind { diff --git a/xen/arch/x86/include/asm/hvm/hvm.h b/xen/arch/x86/include/asm/= hvm/hvm.h index a9b64814ca71..7732217e279a 100644 --- a/xen/arch/x86/include/asm/hvm/hvm.h +++ b/xen/arch/x86/include/asm/hvm/hvm.h @@ -879,6 +879,8 @@ static inline void hvm_sync_pir_to_irr(struct vcpu *v) #define INSTR_RDTSC INSTR_ENC(X86EMUL_OPC(0x0f, 0x31), 0) #define INSTR_RDMSR INSTR_ENC(X86EMUL_OPC(0x0f, 0x32), 0) #define INSTR_CPUID INSTR_ENC(X86EMUL_OPC(0x0f, 0xa2), 0) +#define INSTR_MOV_FROM_CR INSTR_ENC(X86EMUL_OPC(0x0f, 0x20), 0) +#define INSTR_MOV_TO_CR INSTR_ENC(X86EMUL_OPC(0x0f, 0x22), 0) =20 #else /* CONFIG_HVM */ =20 --=20 2.53.0