@@ -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
@@ -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);
@@ -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 */