diff options
Diffstat (limited to '0015-tools-oxenstored-Bind-the-DOM_EXC-VIRQ-in-in-Event.i.patch')
-rw-r--r-- | 0015-tools-oxenstored-Bind-the-DOM_EXC-VIRQ-in-in-Event.i.patch | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/0015-tools-oxenstored-Bind-the-DOM_EXC-VIRQ-in-in-Event.i.patch b/0015-tools-oxenstored-Bind-the-DOM_EXC-VIRQ-in-in-Event.i.patch new file mode 100644 index 0000000..8b83edf --- /dev/null +++ b/0015-tools-oxenstored-Bind-the-DOM_EXC-VIRQ-in-in-Event.i.patch @@ -0,0 +1,82 @@ +From bc5cc00868ea29d814bb3d783e28b49d1acf63e9 Mon Sep 17 00:00:00 2001 +From: Andrew Cooper <andrew.cooper3@citrix.com> +Date: Tue, 29 Nov 2022 21:05:43 +0000 +Subject: [PATCH 15/89] tools/oxenstored: Bind the DOM_EXC VIRQ in in + Event.init() +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +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 | 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; +-- +2.40.0 + |