aboutsummaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorIan Campbell <ian.campbell@citrix.com>2012-01-31 16:34:39 +0000
committerIan Campbell <ian.campbell@citrix.com>2012-01-31 16:34:39 +0000
commitf80309d43143c81de1261d669e8b995e171ea73a (patch)
treeed53a0fab5035bab1031df2f81ffbf96958ccac5 /tools
parentea81e4fdbffd2a7abf40458e40041ad185ede8a1 (diff)
downloadxen-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.c82
-rw-r--r--tools/libxl/libxl.h4
-rw-r--r--tools/libxl/libxl_types.idl7
-rw-r--r--tools/libxl/xl_cmdimpl.c20
-rw-r--r--tools/ocaml/libs/xl/xenlight.ml.in4
-rw-r--r--tools/ocaml/libs/xl/xenlight.mli.in4
-rw-r--r--tools/ocaml/libs/xl/xenlight_stubs.c19
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));