mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 10:11:27 +01:00
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:
1 parent
79eb2871f2
commit
fc2b57c9af
3 files changed
+12
-2
No files matched your search
@@ -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 */
|
||||
|
||||