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

[PATCH v2 3/3] libs/guest: Set console as disconnected on resume


  • To: <xen-devel@xxxxxxxxxxxxxxxxxxxx>
  • From: Jason Andryuk <jason.andryuk@xxxxxxx>
  • Date: Fri, 22 Aug 2025 17:39:45 -0400
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=lists.xenproject.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0)
  • 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=19cplcKMnFgiawUGNbnlhakIWSLzp3vbDklKXu2XH0Y=; b=Nxi9H3XZ4MTZyVLy3bI2C57ewHkxFmmtik7hGhNf5jNq2En/6aXbJEXulomP1DHEl2gsbM2StAd3uBx0ARbqlnh1kLdAvw6NRMukYRP3qRRCg3FrlCTC6IxzW8guNLJe84aZlRLCj4A1aT/oK71aABlJIgBiKcuJm/aLM5q7PaLLHqawupkYE70dT+BiQbtUnCHEkfkjX/6lmltcJQ8VVL43FwGDcjJAUj5xtwcOawFq0V9mo81eBuGt4MWZTUW6SydLyV2EdgINjXhEuWcGOPD6pad0hbcpilcVmpcxaYpLQN/empTx+euw7TxyY0igks60hiJbjQCnVoLP4bfk2A==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=HDyctpuzeIiqxU5e4vZT4iJRtYNAAgi6RtgxYibmke2uCxMP3qVXlBIamKE4Or4N8Ip/sX9QloUQt1bNFeffOPLmg0lFlWHHms+qi0bMIMHT+rcwBkk000pxlD+c00Rc3QBNdWwz5CnR2DV1pvGs2qbpwt+FIEzw2GMSjpkOygowE3I4Jt271cIN+7caguek4RQcuWw+A8ly+qE+V6243cSk7BMClNX/aX+Ks4XE6SEi4vfbHgJzTRzQiK5dwkGcHZjNVQKf4S46UbiJl7u06jpHBjKj6PzFRwvVIppSM12v3V095frR67eBlDkUaVc0cyd45b/uPVowiv0ZnDmfHQ==
  • Cc: Alejandro Vallejo <alejandro.garciavallejo@xxxxxxx>, Jason Andryuk <jason.andryuk@xxxxxxx>, Anthony PERARD <anthony.perard@xxxxxxxxxx>, "Juergen Gross" <jgross@xxxxxxxx>
  • Delivery-date: Fri, 22 Aug 2025 21:43:08 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

There is currently an asymmetry between HVM where the page is cleared
and PV where the contents are restored.

Add xc_dom_console_set_disconnected() to only set the connection flag
for PV guests.

xenconsoled is responsible for setting the console connected when it
attaches.

Signed-off-by: Jason Andryuk <jason.andryuk@xxxxxxx>
---
v2:
New
---
 tools/include/xenguest.h                 |  2 ++
 tools/libs/guest/xg_dom_boot.c           | 24 ++++++++++++++++++++----
 tools/libs/guest/xg_sr_restore_x86_hvm.c |  2 +-
 tools/libs/guest/xg_sr_restore_x86_pv.c  |  1 +
 4 files changed, 24 insertions(+), 5 deletions(-)

diff --git a/tools/include/xenguest.h b/tools/include/xenguest.h
index 1d5a6d3509..c88958faa9 100644
--- a/tools/include/xenguest.h
+++ b/tools/include/xenguest.h
@@ -337,6 +337,8 @@ int xc_dom_boot_image(struct xc_dom_image *dom);
 int xc_dom_compat_check(struct xc_dom_image *dom);
 int xc_dom_console_init(xc_interface *xch, uint32_t guest_domid,
                         xen_pfn_t console_gfn);
+int xc_dom_console_set_disconnected(xc_interface *xch, uint32_t guest_domid,
+                                    xen_pfn_t console_gfn);
 int xc_dom_gnttab_init(struct xc_dom_image *dom);
 int xc_dom_gnttab_seed(xc_interface *xch, uint32_t guest_domid,
                        bool is_hvm,
diff --git a/tools/libs/guest/xg_dom_boot.c b/tools/libs/guest/xg_dom_boot.c
index b5f248e642..f51b6a78c8 100644
--- a/tools/libs/guest/xg_dom_boot.c
+++ b/tools/libs/guest/xg_dom_boot.c
@@ -428,9 +428,10 @@ int xc_dom_gnttab_init(struct xc_dom_image *dom)
                               dom->console_domid, dom->xenstore_domid);
 }
 
-int xc_dom_console_init(xc_interface *xch,
-                        uint32_t domid,
-                        unsigned long dst_pfn)
+static int dom_console_init(xc_interface *xch,
+                            uint32_t domid,
+                            unsigned long dst_pfn,
+                            bool clear)
 {
     const size_t size = PAGE_SIZE;
     struct xencons_interface *xencons = xc_map_foreign_range(
@@ -439,7 +440,8 @@ int xc_dom_console_init(xc_interface *xch,
     if ( xencons == NULL )
         return -1;
 
-    memset(xencons, 0, size);
+    if (clear)
+        memset(xencons, 0, size);
     xencons->connection = XENCONSOLE_DISCONNECTED;
 
     munmap(xencons, size);
@@ -447,6 +449,20 @@ int xc_dom_console_init(xc_interface *xch,
     return 0;
 }
 
+int xc_dom_console_init(xc_interface *xch,
+                        uint32_t domid,
+                        unsigned long dst_pfn)
+{
+    return dom_console_init(xch, domid, dst_pfn, true);
+}
+
+int xc_dom_console_set_disconnected(xc_interface *xch,
+                                    uint32_t domid,
+                                    unsigned long dst_pfn)
+{
+    return dom_console_init(xch, domid, dst_pfn, false);
+}
+
 /*
  * Local variables:
  * mode: C
diff --git a/tools/libs/guest/xg_sr_restore_x86_hvm.c 
b/tools/libs/guest/xg_sr_restore_x86_hvm.c
index d6ea6f3012..a5d1511fde 100644
--- a/tools/libs/guest/xg_sr_restore_x86_hvm.c
+++ b/tools/libs/guest/xg_sr_restore_x86_hvm.c
@@ -62,7 +62,7 @@ static int handle_hvm_params(struct xc_sr_context *ctx,
         {
         case HVM_PARAM_CONSOLE_PFN:
             ctx->restore.console_gfn = entry->value;
-            xc_clear_domain_page(xch, ctx->domid, entry->value);
+            xc_dom_console_init(xch, ctx->domid, entry->value);
             break;
         case HVM_PARAM_STORE_PFN:
             ctx->restore.xenstore_gfn = entry->value;
diff --git a/tools/libs/guest/xg_sr_restore_x86_pv.c 
b/tools/libs/guest/xg_sr_restore_x86_pv.c
index 9cd6a88022..876748c11e 100644
--- a/tools/libs/guest/xg_sr_restore_x86_pv.c
+++ b/tools/libs/guest/xg_sr_restore_x86_pv.c
@@ -208,6 +208,7 @@ static int process_start_info(struct xc_sr_context *ctx,
         goto err;
     }
 
+    xc_dom_console_set_disconnected(xch, ctx->domid, mfn);
     ctx->restore.console_gfn = mfn;
     SET_FIELD(guest_start_info, console.domU.mfn, mfn, ctx->x86.pv.width);
     SET_FIELD(guest_start_info, console.domU.evtchn,
-- 
2.50.1




 


Rackspace

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