mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 18:50:05 +01:00
xl: Add "xl sysrq" command, a clone of "xm sysrq".
Signed-off-by: Yang Hongyang <yanghy@cn.fujitsu.com>
This commit is contained in:
1 parent
1e2619f4b0
commit
c614ef19d3
5 files changed
+57
No files matched your search
@@ -2629,3 +2629,13 @@ int libxl_send_trigger(struct libxl_ctx *ctx, uint32_t domid, char *trigger_name
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
int libxl_send_sysrq(struct libxl_ctx *ctx, uint32_t domid, char sysrq)
|
||||
{
|
||||
char *dompath = libxl_xs_get_dompath(ctx, domid);
|
||||
|
||||
libxl_xs_write(ctx, XBT_NULL, libxl_sprintf(ctx, "%s/control/sysrq", dompath), "%c", sysrq);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -481,5 +481,6 @@ int libxl_sched_credit_domain_set(struct libxl_ctx *ctx, uint32_t domid,
|
||||
struct libxl_sched_credit *scinfo);
|
||||
int libxl_send_trigger(struct libxl_ctx *ctx, uint32_t domid,
|
||||
char *trigger_name, uint32_t vcpuid);
|
||||
int libxl_send_sysrq(struct libxl_ctx *ctx, uint32_t domid, char sysrq);
|
||||
#endif /* LIBXL_H */
|
||||
|
||||
@@ -3058,3 +3058,43 @@ int main_trigger(int argc, char **argv)
|
||||
|
||||
exit(0);
|
||||
}
|
||||
|
||||
|
||||
int main_sysrq(int argc, char **argv)
|
||||
{
|
||||
int opt;
|
||||
char *sysrq = NULL;
|
||||
char *dom = NULL;
|
||||
|
||||
while ((opt = getopt(argc, argv, "h")) != -1) {
|
||||
switch (opt) {
|
||||
case 'h':
|
||||
help("sysrq");
|
||||
exit(0);
|
||||
default:
|
||||
fprintf(stderr, "option `%c' not supported.\n", opt);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
dom = argv[optind++];
|
||||
if (!dom || !argv[optind]) {
|
||||
fprintf(stderr, "'xl sysrq' requires 2 arguments.\n\n");
|
||||
help("sysrq");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
find_domain(dom);
|
||||
|
||||
sysrq = argv[optind];
|
||||
|
||||
if (sysrq[1] != '\0') {
|
||||
fprintf(stderr, "Invalid sysrq.\n\n");
|
||||
help("sysrq");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
libxl_send_sysrq(&ctx, domid, sysrq[0]);
|
||||
|
||||
exit(0);
|
||||
}
|
||||
@@ -39,5 +39,6 @@ int main_domid(int argc, char **argv);
|
||||
int main_domname(int argc, char **argv);
|
||||
int main_rename(int argc, char **argv);
|
||||
int main_trigger(int argc, char **argv);
|
||||
int main_sysrq(int argc, char **argv);
|
||||
|
||||
void help(char *command);
|
||||
@@ -172,6 +172,11 @@ struct cmd_spec cmd_table[] = {
|
||||
"Send a trigger to a domain",
|
||||
"<Domain> <nmi|reset|init|power|sleep> [<VCPU>]",
|
||||
},
|
||||
{ "sysrq",
|
||||
&main_sysrq,
|
||||
"Send a sysrq to a domain",
|
||||
"<Domain> <letter>",
|
||||
},
|
||||
};
|
||||
|
||||
int cmdtable_len = sizeof(cmd_table)/sizeof(struct cmd_spec);
|
||||