[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[RFC v1 2/7] x86/hvm: Introduce hvm_emulate_one_ctxt


  • To: xen-devel@xxxxxxxxxxxxxxxxxxxx
  • From: Ross Lagerwall <ross.lagerwall@xxxxxxxxxx>
  • Date: Mon, 18 May 2026 14:13:59 +0100
  • 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
  • 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-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==
  • 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"
  • Authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=citrix.com;
  • Cc: Ross Lagerwall <ross.lagerwall@xxxxxxxxxx>, Jan Beulich <jbeulich@xxxxxxxx>, Andrew Cooper <andrew.cooper3@xxxxxxxxxx>, Roger Pau Monné <roger.pau@xxxxxxxxxx>, Teddy Astie <teddy.astie@xxxxxxxxxx>
  • Delivery-date: Mon, 18 May 2026 13:14:33 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

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 <ross.lagerwall@xxxxxxxxxx>
---
 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 *descr)
 {
     struct hvm_emulate_ctxt ctxt;
-    int rc;
 
     hvm_emulate_init_once(&ctxt, validate, descr, guest_cpu_user_regs());
+    return hvm_emulate_one_ctxt(&ctxt);
+}
 
-    switch ( rc = hvm_emulate_one(&ctxt, VIO_no_completion) )
+bool hvm_emulate_one_ctxt(struct hvm_emulate_ctxt *ctxt)
+{
+    int rc = 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;
 
     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;
 
     case X86EMUL_EXCEPTION:
-        hvm_inject_event(&ctxt.ctxt.event);
+        hvm_inject_event(&ctxt->ctxt.event);
         break;
     }
 
-    hvm_emulate_writeback(&ctxt);
+    hvm_emulate_writeback(ctxt);
 
     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);
-- 
2.53.0




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.