[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen staging] tools/oxenstored: port XS_INTRODUCE evtchn rebind function from cxenstored
commit f6cc37ea8ac71385b60507c034519f304da75f4c Author: Igor Druzhinin <igor.druzhinin@xxxxxxxxxx> AuthorDate: Mon Aug 19 19:45:35 2019 +0100 Commit: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> CommitDate: Fri Aug 23 13:34:36 2019 +0100 tools/oxenstored: port XS_INTRODUCE evtchn rebind function from cxenstored C version of xenstored had this ability since 61aaed0d5 ("Allow XS_INTRODUCE to be used for rebinding the xenstore evtchn.") from 2007. Copy it as is to Ocaml version. Signed-off-by: Igor Druzhinin <igor.druzhinin@xxxxxxxxxx> Acked-by: Christian Lindig <christian.lindig@xxxxxxxxxx> --- tools/ocaml/xenstored/domain.ml | 6 +++++- tools/ocaml/xenstored/process.ml | 8 +++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/tools/ocaml/xenstored/domain.ml b/tools/ocaml/xenstored/domain.ml index b0a01b06fa..aeb185ff7e 100644 --- a/tools/ocaml/xenstored/domain.ml +++ b/tools/ocaml/xenstored/domain.ml @@ -23,9 +23,9 @@ type t = { id: Xenctrl.domid; mfn: nativeint; - remote_port: int; interface: Xenmmap.mmap_interface; eventchn: Event.t; + mutable remote_port: int; mutable port: Xeneventchn.t option; mutable bad_client: bool; mutable io_credit: int; (* the rounds of ring process left to do, default is 0, @@ -71,6 +71,10 @@ let notify dom = match dom.port with Event.notify dom.eventchn port let bind_interdomain dom = + begin match dom.port with + | None -> () + | Some port -> Event.unbind dom.eventchn port + end; dom.port <- Some (Event.bind_interdomain dom.eventchn dom.id dom.remote_port); debug "bound domain %d remote port %d to local port %s" dom.id dom.remote_port (string_of_port dom.port) diff --git a/tools/ocaml/xenstored/process.ml b/tools/ocaml/xenstored/process.ml index 8a7e538893..ff5c9484fc 100644 --- a/tools/ocaml/xenstored/process.ml +++ b/tools/ocaml/xenstored/process.ml @@ -408,7 +408,13 @@ let do_introduce con _t domains cons data = in let dom = if Domains.exist domains domid then - Domains.find domains domid + let edom = Domains.find domains domid in + if (Domain.get_mfn edom) = mfn && (Connections.find_domain cons domid) != con then begin + (* Use XS_INTRODUCE for recreating the xenbus event-channel. *) + edom.remote_port <- port; + Domain.bind_interdomain edom; + end; + edom else try let ndom = Domains.create domains domid mfn port in Connections.add_domain cons ndom; -- generated by git-patchbot for /home/xen/git/xen.git#staging _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |