[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[xen stable-4.16] tools/oxenstored: Bind the DOM_EXC VIRQ in in Event.init()



commit cd69a4cf61d6a4ae8f0021f2baa1d7eb6462cbb6
Author:     Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
AuthorDate: Tue Nov 29 21:05:43 2022 +0000
Commit:     Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
CommitDate: Mon Dec 12 11:04:12 2022 +0000

    tools/oxenstored: Bind the DOM_EXC VIRQ in in Event.init()
    
    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@xxxxxxxxxx>
    Reviewed-by: Edwin Török <edvin.torok@xxxxxxxxxx>
    Acked-by: Christian Lindig <christian.lindig@xxxxxxxxxx>
    (cherry picked from commit 9804a5db435fe40c8ded8cf36c2d2b2281c56f1d)
---
 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 ccca90b6fc..a3be296374 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 c5dc7a28d0..55071b49ec 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;
--
generated by git-patchbot for /home/xen/git/xen.git#stable-4.16



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.