@@ -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