Xenstored always needs to bind the DOM_EXC VIRQ.

Instead of doing it shortly after the call to Event.init(), do it in the
init() call itself.  This removes the need for the field to be a mutable
option.

It will also simplify a future change to restore both parts from the live
update record, rather than re-initialising them from scratch.

Rename the field from virq_port (which could be any VIRQ) to it's proper name.

Signed-off-by: Andrew Cooper <[email protected]>
---
CC: Christian Lindig <[email protected]>
CC: David Scott <[email protected]>
CC: Edwin Torok <[email protected]>
CC: Rob Hoes <[email protected]>

v2:
 * New.
---
 tools/ocaml/xenstored/event.ml     | 9 ++++++---
 tools/ocaml/xenstored/xenstored.ml | 4 +---
 2 files changed, 7 insertions(+), 6 deletions(-)

diff --git a/tools/ocaml/xenstored/event.ml b/tools/ocaml/xenstored/event.ml
index ccca90b6fc4f..a3be296374ff 100644
--- a/tools/ocaml/xenstored/event.ml
+++ b/tools/ocaml/xenstored/event.ml
@@ -17,12 +17,15 @@
 (**************** high level binding ****************)
 type t = {
        handle: Xeneventchn.handle;
-       mutable virq_port: Xeneventchn.t option;
+       domexc: Xeneventchn.t;
 }
 
-let init () = { handle = Xeneventchn.init (); virq_port = None; }
+let init () =
+       let handle = Xeneventchn.init () in
+       let domexc = Xeneventchn.bind_dom_exc_virq handle in
+       { handle; domexc }
+
 let fd eventchn = Xeneventchn.fd eventchn.handle
-let bind_dom_exc_virq eventchn = eventchn.virq_port <- Some 
(Xeneventchn.bind_dom_exc_virq eventchn.handle)
 let bind_interdomain eventchn domid port = Xeneventchn.bind_interdomain 
eventchn.handle domid port
 let unbind eventchn port = Xeneventchn.unbind eventchn.handle port
 let notify eventchn port = Xeneventchn.notify eventchn.handle port
diff --git a/tools/ocaml/xenstored/xenstored.ml 
b/tools/ocaml/xenstored/xenstored.ml
index c5dc7a28d082..55071b49eccb 100644
--- a/tools/ocaml/xenstored/xenstored.ml
+++ b/tools/ocaml/xenstored/xenstored.ml
@@ -397,7 +397,6 @@ let _ =
        if cf.restart && Sys.file_exists Disk.xs_daemon_database then (
                let rwro = DB.from_file store domains cons 
Disk.xs_daemon_database in
                info "Live reload: database loaded";
-               Event.bind_dom_exc_virq eventchn;
                Process.LiveUpdate.completed ();
                rwro
        ) else (
@@ -413,7 +412,6 @@ let _ =
 
                if cf.domain_init then (
                        Connections.add_domain cons (Domains.create0 domains);
-                       Event.bind_dom_exc_virq eventchn
                );
                rw_sock
        ) in
@@ -451,7 +449,7 @@ let _ =
                        let port = Event.pending eventchn in
                        debug "pending port %d" (Xeneventchn.to_int port);
                        finally (fun () ->
-                               if Some port = eventchn.Event.virq_port then (
+                               if port = eventchn.Event.domexc then (
                                        let (notify, deaddom) = Domains.cleanup 
domains in
                                        List.iter (Store.reset_permissions 
store) deaddom;
                                        List.iter (Connections.del_domain cons) 
deaddom;
-- 
2.11.0


Reply via email to