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

[xen staging] xenconsole: Add connection flag



commit ddc2dd12644bcabcd10a5b3446f0397ef4e24f7c
Author:     Jason Andryuk <jason.andryuk@xxxxxxx>
AuthorDate: Fri Aug 22 17:39:43 2025 -0400
Commit:     Anthony PERARD <anthony.perard@xxxxxxxxxx>
CommitDate: Fri Oct 3 15:50:32 2025 +0200

    xenconsole: Add connection flag
    
    With hyperlaunch, a domU can start before its console ring is connected
    by xenconsoled.  With nothing emptying the ring, it can quickly fill
    during boot.  In domU_write_console(), __write_console() returns 0 when
    the ring is full.  This loops spins until xenconsoled starts emptying
    the ring:
    
            while (len) {
                    ssize_t sent = __write_console(cons, data, len);
    
                    if (sent < 0)
                            return sent;
    
                    data += sent;
                    len -= sent;
    
                    if (unlikely(len))
                            HYPERVISOR_sched_op(SCHEDOP_yield, NULL);
            }
    
    The goal of this patch is to add a way for the frontend to know when a
    console is connected.  This patch adds a new flag to the end of the
    console ring structure.  It is used for the backend to indicate that it
    has connected and started servicing the page.
    
    The two values are
    XENCONSOLE_DISCONNECTED 1
    XENCONSOLE_CONNECTED    0
    
    XENCONSOLE_DISCONNECTED indicates to the guest that ring is
    disconnected, so it will not be serviced.  The guest can avoid writing
    into it in that case.  A domU can use console hypercalls and only
    transition to the ring when it is connected and won't fill and block.
    
    Once the backend (xenconsoled) maps and starts servicing the
    console, the flag will be set to XENCONSOLE_CONNECTED (0) to indicate
    the backend state to the frontend.
    
    The connected value as 0 will be match the default of a zero-ed console
    page.  Hyperlaunch can set the flag to XENCONSOLE_DISCONNECTED and let
    xenconsoled set to XENCONSOLE_CONNECTED.
    
    Old domU hvc_xen drivers won't check the flag.
    New domU hvc_xen running on a new xen/xenconsoled will work properly.
    New domU hvc_xen on old xen/xenconsoled should only see a 0 for the flag
    and behave as if connected.
    
    Signed-off-by: Jason Andryuk <jason.andryuk@xxxxxxx>
    Reviewed-by: Juergen Gross <jgross@xxxxxxxx>
    Release-Acked-By: Oleksii Kurochko <oleksii.kurochko@xxxxxxxxx>
    Acked-by: Anthony PERARD <anthony.perard@xxxxxxxxxx>
---
 tools/console/daemon/io.c       |  4 ++++
 xen/include/public/io/console.h | 13 +++++++++++++
 2 files changed, 17 insertions(+)

diff --git a/tools/console/daemon/io.c b/tools/console/daemon/io.c
index bb739bdb8c..43d4973c24 100644
--- a/tools/console/daemon/io.c
+++ b/tools/console/daemon/io.c
@@ -781,6 +781,10 @@ static int console_create_ring(struct console *con)
                con->log_fd = create_console_log(con);
 
  out:
+       /* Mark the console connected. */
+       if (!err && con->interface)
+               con->interface->connection = XENCONSOLE_CONNECTED;
+
        return err;
 }
 
diff --git a/xen/include/public/io/console.h b/xen/include/public/io/console.h
index 4509b4b689..b9ebfaff3f 100644
--- a/xen/include/public/io/console.h
+++ b/xen/include/public/io/console.h
@@ -19,6 +19,19 @@ struct xencons_interface {
     char out[2048];
     XENCONS_RING_IDX in_cons, in_prod;
     XENCONS_RING_IDX out_cons, out_prod;
+/*
+ * Flag values signaling from backend to frontend whether the console is
+ * connected.  i.e. Whether it will be serviced and emptied.
+ *
+ * The flag starts as disconnected.
+ */
+#define XENCONSOLE_DISCONNECTED 1
+/*
+ * The flag is set to connected when the backend connects and the console
+ * will be serviced.
+ */
+#define XENCONSOLE_CONNECTED    0
+    uint8_t connection;
 };
 
 #ifdef XEN_WANT_FLEX_CONSOLE_RING
--
generated by git-patchbot for /home/xen/git/xen.git#staging



 


Rackspace

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