|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [XEN PATCH 6/7] xenstored: do_introduce: handle the late_init case
From: Luca Miccio <lucmiccio@xxxxxxxxx>
If the function is called with late_init set then also notify the domain
using the xenstore event channel.
Signed-off-by: Luca Miccio <lucmiccio@xxxxxxxxx>
Signed-off-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxx>
CC: wl@xxxxxxx
CC: Anthony PERARD <anthony.perard@xxxxxxxxxx>
CC: Juergen Gross <jgross@xxxxxxxx>
CC: julien@xxxxxxx
---
tools/xenstore/xenstored_domain.c | 15 ++++++++++-----
1 file changed, 10 insertions(+), 5 deletions(-)
diff --git a/tools/xenstore/xenstored_domain.c
b/tools/xenstore/xenstored_domain.c
index d03c7d93a9..17b8021ca8 100644
--- a/tools/xenstore/xenstored_domain.c
+++ b/tools/xenstore/xenstored_domain.c
@@ -429,7 +429,7 @@ static void domain_conn_reset(struct domain *domain)
static struct domain *introduce_domain(const void *ctx,
unsigned int domid,
- evtchn_port_t port, bool restore)
+ evtchn_port_t port, bool restore, bool
late_init)
{
struct domain *domain;
int rc;
@@ -461,6 +461,9 @@ static struct domain *introduce_domain(const void *ctx,
/* Now domain belongs to its connection. */
talloc_steal(domain->conn, domain);
+ if (late_init)
+ xenevtchn_notify(xce_handle, domain->port);
+
if (!is_master_domain && !restore)
fire_watches(NULL, ctx, "@introduceDomain", NULL,
false, NULL);
@@ -479,9 +482,10 @@ static struct domain *introduce_domain(const void *ctx,
int do_introduce(struct connection *conn, struct buffered_data *in)
{
struct domain *domain;
- char *vec[3];
+ char *vec[4];
unsigned int domid;
evtchn_port_t port;
+ bool late_init;
if (get_strings(in, vec, ARRAY_SIZE(vec)) < ARRAY_SIZE(vec))
return EINVAL;
@@ -489,12 +493,13 @@ int do_introduce(struct connection *conn, struct
buffered_data *in)
domid = atoi(vec[0]);
/* Ignore the gfn, we don't need it. */
port = atoi(vec[2]);
+ late_init = atoi(vec[3]);
/* Sanity check args. */
if (port <= 0)
return EINVAL;
- domain = introduce_domain(in, domid, port, false);
+ domain = introduce_domain(in, domid, port, false, late_init);
if (!domain)
return errno;
@@ -723,7 +728,7 @@ void dom0_init(void)
if (port == -1)
barf_perror("Failed to initialize dom0 port");
- dom0 = introduce_domain(NULL, xenbus_master_domid(), port, false);
+ dom0 = introduce_domain(NULL, xenbus_master_domid(), port, false,
false);
if (!dom0)
barf_perror("Failed to initialize dom0");
@@ -1292,7 +1297,7 @@ void read_state_connection(const void *ctx, const void
*state)
#endif
} else {
domain = introduce_domain(ctx, sc->spec.ring.domid,
- sc->spec.ring.evtchn, true);
+ sc->spec.ring.evtchn, true, false);
if (!domain)
barf("domain allocation error");
--
2.25.1
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |