repeated domain introductions. */
evtchn_port_t remote_port;
- /* The mfn associated with the event channel, used only to validate
- repeated domain introductions. */
- unsigned long mfn;
-
/* Domain path in store. */
char *path;
domain->interface->rsp_cons = domain->interface->rsp_prod = 0;
}
-/* domid, mfn, evtchn, path */
+/* domid, gfn, evtchn, path */
int do_introduce(struct connection *conn, struct buffered_data *in)
{
struct domain *domain;
char *vec[3];
unsigned int domid;
- unsigned long mfn;
evtchn_port_t port;
int rc;
struct xenstore_domain_interface *interface;
return EACCES;
domid = atoi(vec[0]);
- mfn = atol(vec[1]);
+ /* Ignore the gfn, we don't need it. */
port = atoi(vec[2]);
/* Sanity check args. */
return rc;
}
domain->interface = interface;
- domain->mfn = mfn;
/* Now domain belongs to its connection. */
talloc_steal(domain->conn, domain);
fire_watches(NULL, in, "@introduceDomain", false);
- } else if ((domain->mfn == mfn) && (domain->conn != conn)) {
+ } else {
/* Use XS_INTRODUCE for recreating the xenbus event-channel. */
if (domain->port)
xenevtchn_unbind(xce_handle, domain->port);
rc = xenevtchn_bind_interdomain(xce_handle, domid, port);
domain->port = (rc == -1) ? 0 : rc;
domain->remote_port = port;
- } else
- return EINVAL;
+ }
domain_conn_reset(domain);