]> xenbits.xensource.com Git - people/tklengyel/xen.git/commitdiff
tools/oxenstored: Bind the DOM_EXC VIRQ in in Event.init()
authorAndrew Cooper <andrew.cooper3@citrix.com>
Tue, 29 Nov 2022 21:05:43 +0000 (21:05 +0000)
committerAndrew Cooper <andrew.cooper3@citrix.com>
Tue, 20 Dec 2022 13:13:40 +0000 (13:13 +0000)
Xenstored always needs to bind the DOM_EXC VIRQ.

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

It will also simplify a future change to support live update.  Rename the
field from virq_port (which could be any VIRQ) to it's proper name.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Edwin Török <edvin.torok@citrix.com>
Acked-by: Christian Lindig <christian.lindig@citrix.com>
(cherry picked from commit 9804a5db435fe40c8ded8cf36c2d2b2281c56f1d)

tools/ocaml/xenstored/event.ml
tools/ocaml/xenstored/xenstored.ml

index ccca90b6fc4f0aac860772a8aac23171bdb5e668..a3be296374ffb650ccd925378e45a14f826f2ef9 100644 (file)
 (**************** 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
index c5dc7a28d082b03bdd46e57c7beea6f529386428..55071b49eccb331ee2b9f550ec1e870faade998d 100644 (file)
@@ -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;