]> xenbits.xensource.com Git - people/royger/xen.git/commitdiff
xenstored: send an evtchn notification on introduce_domain
authorLuca Miccio <lucmiccio@gmail.com>
Fri, 13 May 2022 21:07:28 +0000 (14:07 -0700)
committerStefano Stabellini <stefano.stabellini@xilinx.com>
Tue, 24 May 2022 23:18:08 +0000 (16:18 -0700)
When xs_introduce_domain is called, send out a notification on the
xenstore event channel so that any (dom0less) domain waiting for the
xenstore interface to be ready can continue with the initialization.
Before sending the notification, clear XENSTORE_RECONNECTING.

The extra notification is harmless for domains that don't require it.

In xs_wire.h update the commment on top of XENSTORE_RECONNECTING to
generalize its meaning to suit the dom0less use-case better. Also
improve docs/misc/xenstore-ring.txt.

Signed-off-by: Luca Miccio <lucmiccio@gmail.com>
Signed-off-by: Stefano Stabellini <stefano.stabellini@xilinx.com>
Reviewed-by: Juergen Gross <jgross@suse.com>
docs/misc/xenstore-ring.txt
tools/xenstore/xenstored_domain.c
xen/include/public/io/xs_wire.h

index b338b21b198fb916ee4074e11b539ab6ff43812a..f3d6ca42646bd081bde3a5d7c1f506f75daa0f81 100644 (file)
@@ -111,7 +111,13 @@ Assuming the server has advertised the feature, the guest can initiate
 a reconnection by setting the the Connection state to 1 ("Ring close
 and reconnect is in progress") and signalling the event channel.
 The guest must now ignore all fields except the Connection state and
-wait for it to be set to 0 ("Ring is connected")
+wait for it to be set to 0 ("Ring is connected").
+
+In certain circumstances (e.g. dom0less guests with PV drivers support)
+it is possible for the guest to find the Connection state already set to
+1 by someone else during xenstore initialization. In that case, like in
+the previous case, the guest must ignore all fields except the
+Connection state and wait for it to be set to 0 before proceeding.
 
 The server will guarantee to
 
index 80ba1d627b2ee2d0966b5ae3c573a85d22041b5c..de88bf2a68421668dc53a0950644e0df572a13ba 100644 (file)
@@ -493,6 +493,10 @@ static struct domain *introduce_domain(const void *ctx,
                /* Now domain belongs to its connection. */
                talloc_steal(domain->conn, domain);
 
+               /* Notify the domain that xenstore is available */
+               interface->connection = XENSTORE_CONNECTED;
+               xenevtchn_notify(xce_handle, domain->port);
+
                if (!is_master_domain && !restore)
                        fire_watches(NULL, ctx, "@introduceDomain", NULL,
                                     true, NULL);
index 953a0050a382dcb158a8f9ed0ffa925dd74417dc..c1ec7c73e3b1094cca7539f8d6c1003da1f73373 100644 (file)
@@ -141,7 +141,7 @@ struct xenstore_domain_interface {
 
 /* Valid values for the connection field */
 #define XENSTORE_CONNECTED 0 /* the steady-state */
-#define XENSTORE_RECONNECT 1 /* guest has initiated a reconnect */
+#define XENSTORE_RECONNECT 1 /* reconnect in progress */
 
 /* Valid values for the error field */
 #define XENSTORE_ERROR_NONE    0 /* No error */