Skip to content

Commit b22fbce

Browse files
committed
xenlight: wait for devices to complete hotplug after starting a VM
Signed-off-by: Rob Hoes <[email protected]>
1 parent d099bef commit b22fbce

File tree

1 file changed

+29
-0
lines changed

1 file changed

+29
-0
lines changed

xl/xenops_server_xenlight.ml

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2117,6 +2117,35 @@ module VM = struct
21172117
in
21182118
debug "Xenlight has created domain %d" domid;
21192119

2120+
(* Wait for device hotplugs to finish, and write remaining xenstore keys *)
2121+
2122+
List.iter (fun vif ->
2123+
(* wait for plug (to be removed if possible) *)
2124+
let open Device_common in
2125+
let open Vif in
2126+
let devid = vif.position in
2127+
let backend_domid = with_xs (fun xs -> VIF.backend_domid_of xs vif) in
2128+
let frontend = { domid; kind = Vif; devid = devid } in
2129+
let backend = { domid = backend_domid; kind = Vif; devid = devid } in
2130+
let device = { backend = backend; frontend = frontend } in
2131+
with_xs (fun xs -> Hotplug.wait_for_plug task ~xs device);
2132+
2133+
(* add disconnect flag *)
2134+
let disconnect_path, flag = VIF.disconnect_flag device vif.locking_mode in
2135+
with_xs (fun xs -> xs.Xs.write disconnect_path flag);
2136+
) vifs;
2137+
2138+
List.iter (fun (_, devid, _, backend_domid) ->
2139+
(* wait for plug *)
2140+
let device =
2141+
let open Device_common in
2142+
let frontend = { domid; kind = Vbd; devid = devid } in
2143+
let backend = { domid = backend_domid; kind = Vbd; devid = devid } in
2144+
{ backend = backend; frontend = frontend }
2145+
in
2146+
with_xs (fun xs -> Hotplug.wait_for_plug task ~xs device);
2147+
) vbds_extra;
2148+
21202149
(* Write remaining xenstore keys *)
21212150
let dom_path = xs.Xs.getdomainpath domid in
21222151
let vm_path = "/vm/" ^ vm.Vm.id in

0 commit comments

Comments
 (0)