diff options
author | Ian Campbell <ian.campbell@citrix.com> | 2012-01-31 16:34:39 +0000 |
---|---|---|
committer | Ian Campbell <ian.campbell@citrix.com> | 2012-01-31 16:34:39 +0000 |
commit | f80309d43143c81de1261d669e8b995e171ea73a (patch) | |
tree | ed53a0fab5035bab1031df2f81ffbf96958ccac5 /tools | |
parent | ea81e4fdbffd2a7abf40458e40041ad185ede8a1 (diff) | |
download | xen-f80309d43143c81de1261d669e8b995e171ea73a.tar.gz xen-f80309d43143c81de1261d669e8b995e171ea73a.tar.bz2 xen-f80309d43143c81de1261d669e8b995e171ea73a.zip |
libxl: remove libxl_button_press in favour of libxl_send_trigger.
send_trigger already included all the operations covered by button_press.
Rework send_trigger to take an enum instead of a string.
I stopped short at removing the xl "button-press" command but instead have
marked it as deprecated.
Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Acked-by: Ian Jackson <Ian.Jackson@eu.citrix.com>
Committed-by: Ian Jackson <Ian.Jackson@eu.citrix.com>
Diffstat (limited to 'tools')
-rw-r--r-- | tools/libxl/libxl.c | 82 | ||||
-rw-r--r-- | tools/libxl/libxl.h | 4 | ||||
-rw-r--r-- | tools/libxl/libxl_types.idl | 7 | ||||
-rw-r--r-- | tools/libxl/xl_cmdimpl.c | 20 | ||||
-rw-r--r-- | tools/ocaml/libs/xl/xenlight.ml.in | 4 | ||||
-rw-r--r-- | tools/ocaml/libs/xl/xenlight.mli.in | 4 | ||||
-rw-r--r-- | tools/ocaml/libs/xl/xenlight_stubs.c | 19 |
7 files changed, 58 insertions, 82 deletions
diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c index 60487fceb8..a5d87c7cc3 100644 --- a/tools/libxl/libxl.c +++ b/tools/libxl/libxl.c @@ -2728,24 +2728,6 @@ out: return 0; } -int libxl_button_press(libxl_ctx *ctx, uint32_t domid, libxl_button button) -{ - int rc = -1; - - switch (button) { - case LIBXL_BUTTON_POWER: - rc = xc_domain_send_trigger(ctx->xch, domid, XEN_DOMCTL_SENDTRIGGER_POWER, 0); - break; - case LIBXL_BUTTON_SLEEP: - rc = xc_domain_send_trigger(ctx->xch, domid, XEN_DOMCTL_SENDTRIGGER_SLEEP, 0); - break; - default: - break; - } - - return rc; -} - int libxl_get_physinfo(libxl_ctx *ctx, libxl_physinfo *physinfo) { xc_physinfo_t xcphysinfo = { 0 }; @@ -3144,44 +3126,46 @@ int libxl_sched_sedf_domain_set(libxl_ctx *ctx, uint32_t domid, return 0; } -static int trigger_type_from_string(char *trigger_name) -{ - if (!strcmp(trigger_name, "nmi")) - return XEN_DOMCTL_SENDTRIGGER_NMI; - else if (!strcmp(trigger_name, "reset")) - return XEN_DOMCTL_SENDTRIGGER_RESET; - else if (!strcmp(trigger_name, "init")) - return XEN_DOMCTL_SENDTRIGGER_INIT; - else if (!strcmp(trigger_name, "power")) - return XEN_DOMCTL_SENDTRIGGER_POWER; - else if (!strcmp(trigger_name, "sleep")) - return XEN_DOMCTL_SENDTRIGGER_SLEEP; - else - return -1; -} - -int libxl_send_trigger(libxl_ctx *ctx, uint32_t domid, char *trigger_name, uint32_t vcpuid) +int libxl_send_trigger(libxl_ctx *ctx, uint32_t domid, + libxl_trigger trigger, uint32_t vcpuid) { - int rc = -1; - int trigger_type = -1; + int rc; - if (!strcmp(trigger_name, "s3resume")) { + switch (trigger) { + case LIBXL_TRIGGER_POWER: + rc = xc_domain_send_trigger(ctx->xch, domid, + XEN_DOMCTL_SENDTRIGGER_POWER, vcpuid); + break; + case LIBXL_TRIGGER_SLEEP: + rc = xc_domain_send_trigger(ctx->xch, domid, + XEN_DOMCTL_SENDTRIGGER_SLEEP, vcpuid); + break; + case LIBXL_TRIGGER_NMI: + rc = xc_domain_send_trigger(ctx->xch, domid, + XEN_DOMCTL_SENDTRIGGER_NMI, vcpuid); + break; + case LIBXL_TRIGGER_INIT: + rc = xc_domain_send_trigger(ctx->xch, domid, + XEN_DOMCTL_SENDTRIGGER_INIT, vcpuid); + break; + case LIBXL_TRIGGER_RESET: + rc = xc_domain_send_trigger(ctx->xch, domid, + XEN_DOMCTL_SENDTRIGGER_RESET, vcpuid); + break; + case LIBXL_TRIGGER_S3RESUME: xc_set_hvm_param(ctx->xch, domid, HVM_PARAM_ACPI_S_STATE, 0); - return 0; - } - - trigger_type = trigger_type_from_string(trigger_name); - if (trigger_type == -1) { - LIBXL__LOG_ERRNOVAL(ctx, LIBXL__LOG_ERROR, -1, - "Invalid trigger, valid triggers are <nmi|reset|init|power|sleep>"); - return ERROR_INVAL; + rc = 0; + break; + default: + rc = EINVAL; + break; } - rc = xc_domain_send_trigger(ctx->xch, domid, trigger_type, vcpuid); if (rc != 0) { LIBXL__LOG_ERRNOVAL(ctx, LIBXL__LOG_ERROR, rc, - "Send trigger '%s' failed", trigger_name); - return ERROR_FAIL; + "Send trigger '%s' failed", + libxl_trigger_to_string(trigger)); + rc = ERROR_FAIL; } return 0; diff --git a/tools/libxl/libxl.h b/tools/libxl/libxl.h index e7e4f4ec68..ea5997be04 100644 --- a/tools/libxl/libxl.h +++ b/tools/libxl/libxl.h @@ -575,8 +575,6 @@ int libxl_userdata_retrieve(libxl_ctx *ctx, uint32_t domid, * On error return, *data_r and *datalen_r are undefined. */ -int libxl_button_press(libxl_ctx *ctx, uint32_t domid, libxl_button button); - int libxl_get_physinfo(libxl_ctx *ctx, libxl_physinfo *physinfo); int libxl_get_topologyinfo(libxl_ctx *ctx, libxl_topologyinfo *info); libxl_vcpuinfo *libxl_list_vcpu(libxl_ctx *ctx, uint32_t domid, @@ -603,7 +601,7 @@ int libxl_sched_sedf_domain_get(libxl_ctx *ctx, uint32_t domid, int libxl_sched_sedf_domain_set(libxl_ctx *ctx, uint32_t domid, libxl_sched_sedf *scinfo); int libxl_send_trigger(libxl_ctx *ctx, uint32_t domid, - char *trigger_name, uint32_t vcpuid); + libxl_trigger trigger, uint32_t vcpuid); int libxl_send_sysrq(libxl_ctx *ctx, uint32_t domid, char sysrq); int libxl_send_debug_keys(libxl_ctx *ctx, char *keys); diff --git a/tools/libxl/libxl_types.idl b/tools/libxl/libxl_types.idl index c859c3db1c..617dad6374 100644 --- a/tools/libxl/libxl_types.idl +++ b/tools/libxl/libxl_types.idl @@ -75,9 +75,14 @@ libxl_action_on_shutdown = Enumeration("action_on_shutdown", [ (6, "COREDUMP_RESTART"), ]) -libxl_button = Enumeration("button", [ +libxl_trigger = Enumeration("trigger", [ + (0, "UNKNOWN"), (1, "POWER"), (2, "SLEEP"), + (3, "NMI"), + (4, "INIT"), + (5, "RESET"), + (6, "S3RESUME"), ]) libxl_tsc_mode = Enumeration("tsc_mode", [ diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c index 5260abc073..faa69f2da1 100644 --- a/tools/libxl/xl_cmdimpl.c +++ b/tools/libxl/xl_cmdimpl.c @@ -3465,26 +3465,29 @@ int main_create(int argc, char **argv) static void button_press(const char *p, const char *b) { - libxl_button button; + libxl_trigger trigger; find_domain(p); if (!strcmp(b, "power")) { - button = LIBXL_BUTTON_POWER; + trigger = LIBXL_TRIGGER_POWER; } else if (!strcmp(b, "sleep")) { - button = LIBXL_BUTTON_SLEEP; + trigger = LIBXL_TRIGGER_SLEEP; } else { fprintf(stderr, "%s is an invalid button identifier\n", b); exit(2); } - libxl_button_press(ctx, domid, button); + libxl_send_trigger(ctx, domid, trigger, 0); } int main_button_press(int argc, char **argv) { int opt; + fprintf(stderr, "WARNING: \"button-press\" is deprecated. " + "Please use \"trigger\"\n"); + if ((opt = def_getopt(argc, argv, "", "button-press", 2)) != -1) return opt; @@ -4512,10 +4515,11 @@ int main_rename(int argc, char **argv) int main_trigger(int argc, char **argv) { int opt; - char *trigger_name = NULL; char *endptr = NULL; const char *dom = NULL; int vcpuid = 0; + const char *trigger_name = NULL; + libxl_trigger trigger; if ((opt = def_getopt(argc, argv, "", "trigger", 2)) != -1) return opt; @@ -4525,6 +4529,10 @@ int main_trigger(int argc, char **argv) find_domain(dom); trigger_name = argv[optind++]; + if (libxl_trigger_from_string(trigger_name, &trigger)) { + fprintf(stderr, "Invalid trigger \"%s\"\n", trigger_name); + return -1; + } if (argv[optind]) { vcpuid = strtol(argv[optind], &endptr, 10); @@ -4533,7 +4541,7 @@ int main_trigger(int argc, char **argv) } } - libxl_send_trigger(ctx, domid, trigger_name, vcpuid); + libxl_send_trigger(ctx, domid, trigger, vcpuid); return 0; } diff --git a/tools/ocaml/libs/xl/xenlight.ml.in b/tools/ocaml/libs/xl/xenlight.ml.in index f4bba86837..bf7a45080c 100644 --- a/tools/ocaml/libs/xl/xenlight.ml.in +++ b/tools/ocaml/libs/xl/xenlight.ml.in @@ -29,10 +29,8 @@ module Topologyinfo = struct external get : unit -> t = "stub_xl_topologyinfo" end -external button_press : domid -> button -> unit = "stub_xl_button_press" - -external send_trigger : domid -> string -> int -> unit = "stub_xl_send_trigger" +external send_trigger : domid -> trigger -> int -> unit = "stub_xl_send_trigger" external send_sysrq : domid -> char -> unit = "stub_xl_send_sysrq" external send_debug_keys : domid -> string -> unit = "stub_xl_send_debug_keys" diff --git a/tools/ocaml/libs/xl/xenlight.mli.in b/tools/ocaml/libs/xl/xenlight.mli.in index 2b169a085e..7006b2a145 100644 --- a/tools/ocaml/libs/xl/xenlight.mli.in +++ b/tools/ocaml/libs/xl/xenlight.mli.in @@ -29,8 +29,6 @@ module Topologyinfo : sig external get : unit -> t = "stub_xl_topologyinfo" end -external button_press : domid -> button -> unit = "stub_xl_button_press" - -external send_trigger : domid -> string -> int -> unit = "stub_xl_send_trigger" +external send_trigger : domid -> trigger -> int -> unit = "stub_xl_send_trigger" external send_sysrq : domid -> char -> unit = "stub_xl_send_sysrq" external send_debug_keys : domid -> string -> unit = "stub_xl_send_debug_keys" diff --git a/tools/ocaml/libs/xl/xenlight_stubs.c b/tools/ocaml/libs/xl/xenlight_stubs.c index 59329f184f..4b19e9a858 100644 --- a/tools/ocaml/libs/xl/xenlight_stubs.c +++ b/tools/ocaml/libs/xl/xenlight_stubs.c @@ -432,21 +432,6 @@ value stub_xl_device_pci_remove(value info, value domid) CAMLreturn(Val_unit); } -value stub_xl_button_press(value domid, value button) -{ - CAMLparam2(domid, button); - int ret; - INIT_STRUCT(); - - INIT_CTX(); - ret = libxl_button_press(ctx, Int_val(domid), Int_val(button) + LIBXL_BUTTON_POWER); - if (ret != 0) - failwith_xl("button_press", &lg); - FREE_CTX(); - - CAMLreturn(Val_unit); -} - value stub_xl_physinfo_get(value unit) { CAMLparam1(unit); @@ -523,10 +508,10 @@ value stub_xl_send_trigger(value domid, value trigger, value vcpuid) { CAMLparam3(domid, trigger, vcpuid); int ret; - char *c_trigger; + libxl_trigger c_trigger = LIBXL_TRIGGER_UNKNOWN; INIT_STRUCT(); - c_trigger = dup_String_val(&gc, trigger); + trigger_val(&gc, &lg, &c_trigger, trigger); INIT_CTX(); ret = libxl_send_trigger(ctx, Int_val(domid), c_trigger, Int_val(vcpuid)); |