> On 30 Nov 2022, at 16:54, Andrew Cooper <andrew.coop...@citrix.com> wrote: > > 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 <andrew.coop...@citrix.com> > --- > CC: Christian Lindig <christian.lin...@citrix.com> > CC: David Scott <d...@recoil.org> > CC: Edwin Torok <edvin.to...@citrix.com> > CC: Rob Hoes <rob.h...@citrix.com>
reviewd in person: Reviewed-by: Edwin Török <edvin.to...@citrix.com> > > 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 >