xenstored: send an evtchn notification on introduce_domain

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>
This commit is contained in:
Luca Miccio authored and Stefano Stabellini committed 2022-05-24 16:18:08 -07:00
1 parent 79eb2871f2
commit fc2b57c9af
3 files changed
+12 -2

No files matched your search

+7 -1
View 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
+4
View 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);
+1 -1
View 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 */
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.