# HG changeset patch # User David Scott # Date 1265322653 0 # Node ID e3237e03206eff4bd37a93e681024d277ad1c6c2 # Parent 25ccf85b0d062d9f0c9edf5274b0c7e3b6f7ab02 CA-35920: add hypercall simulator support for SCHEDOP_remote_shutdown. Signed-off-by: David Scott diff -r 25ccf85b0d06 -r e3237e03206e ocaml/xiu/xiu.ml --- a/ocaml/xiu/xiu.ml Thu Feb 04 18:42:33 2010 +0000 +++ b/ocaml/xiu/xiu.ml Thu Feb 04 22:30:53 2010 +0000 @@ -119,6 +119,11 @@ | Domctl_unknown of int type sysctl = Sysctl_getdomaininfolist | Sysctl_physinfo | Sysctl_getcpuinfo | Sysctl_unknown of int + +type hypcall = Hypcall_domain_shutdown + +let hypcall_of_int = function + | 1 -> Hypcall_domain_shutdown let domctl_of_int = function | 1 -> Domctl_create | 2 -> Domctl_destroy @@ -528,6 +533,11 @@ transfer_to_domain d (-d.tot_mem_kib); Hashtbl.remove domains domid +let domain_shutdown domid reason = + let d = domain_find domid in + d.state <- Shutdown reason; + 0 + let domain_sethandle domid uuid = let dom = domain_find domid in dom.uuid <- uuid; () @@ -597,7 +607,19 @@ let int_of_hexstring s = Scanf.sscanf s "%x" (fun a -> a) let do_xc_cmd fd cmd = - let do_xc_domctl _cmd args = + let do_hypcall _cmd args = + let cmd = hypcall_of_int (int_of_string _cmd) in + match cmd, args with + | Hypcall_domain_shutdown, [domid; reason] -> + let domid = int_of_string domid in + let reason = int_of_string reason in + hypercall_debug (sprintf "domain_shutdown %d %d" domid reason); + exn_to_errno (fun () -> domain_shutdown domid reason) + | _,_ -> + hypercall_debug (sprintf "HYCALL(%s) not implemented or invalid number of args ([%s])" _cmd (String.concat ";" args)); + -einval + in + let do_xc_domctl _cmd args = let cmd = domctl_of_int (int_of_string _cmd) in match cmd, args with | Domctl_create, [hvm; hap; handle] -> @@ -716,6 +738,7 @@ let ret = match lcmd with | "domctl" :: cmd :: args -> do_xc_domctl cmd args | "sysctl" :: cmd :: args -> do_xc_sysctl cmd args + | "hypcall" :: cmd :: args -> do_hypcall cmd args | _ -> -einval in marshall_int fd ret