From: Gihan Munasinghe <GMunasinghe@flexiant.com>
To: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Cc: "xen-devel@lists.xensource.com" <xen-devel@lists.xensource.com>
Subject: Re: [PATCH] new commands "xl reboot" & "xl shutdown"
Date: Wed, 12 May 2010 16:57:12 +0100 [thread overview]
Message-ID: <4BEACFD8.6080601@flexiant.com> (raw)
In-Reply-To: <alpine.DEB.2.00.1005101607020.11380@kaball-desktop>
[-- Attachment #1: Type: text/plain, Size: 1915 bytes --]
Stefano Stabellini wrote:
> On Sat, 8 May 2010, Gihan Munasinghe wrote:
>
>> Guys
>>
>> I patched xl to have "reboot" and "shutdown" commands.
>> I tested this with hvm domains with and and without pv drivers seems to
>> work, of course the os level reboot and shutdown will only happen if
>> there are pv drivers with the dom U.
>>
>> Also the libxl_domain_shutdown was not working for hvm guests without pv
>> drivers, I did a small patch to that as well. (same way xend shutdown
>> works used || instead of a && ). I would appreciate if someone can test
>> this more with hvm and pv domains.
>>
>> Let me know what you think
>>
>>
>
> Thanks for the patch!
> It is mostly correct, however libxenlight changed quite a bit since xen
> 4.0 so could you please port your changes to xen-unstable?
>
>
>
The Patch is ported to xen-unstable see attached
>>
>> +start:
>> + domid = 0;
>> +
>> ret = libxl_domain_make(&ctx, &info1, &domid);
>> if (ret) {
>> fprintf(stderr, "cannot make domain: %d\n", ret);
>>
>
> this is probably not needed anymore
>
>
Yes this fix is not needed anymore
>
>> LOG("Done. Rebooting now");
>> + sleep(2);/*Fix Me: The sleep is put here to slowdown the recreation of the domain
>> + If this sleep it not there, hvm_domain creation failes sometimes*/
>> goto start;
>> }
>> LOG("Done. Exiting now");
>>
>
> since we don't free the ctx anymore here, it might be unnecessary.
> The other changes look OK but we have a command table now, so they need
> to be adapted.
>
>
The sleep is still needed, if not libxl_* calls fails sometimes. I'll do
more debugging with in the calls it self and see, but for now the
sleep() seems to do the trick.
Thanks
Gihan
[-- Attachment #2: xen4-libxl-shutdown-reboot-xenunstable.patch --]
[-- Type: text/plain, Size: 4984 bytes --]
diff -Naur libxl/libxl.c libxl-patch/libxl.c
--- libxl/libxl.c 2010-05-11 09:37:50.000000000 +0100
+++ libxl-patch/libxl.c 2010-05-12 16:24:42.000000000 +0100
@@ -538,12 +538,12 @@
shutdown_path = libxl_sprintf(ctx, "%s/control/shutdown", dom_path);
xs_write(ctx->xsh, XBT_NULL, shutdown_path, req_table[req], strlen(req_table[req]));
- if (/* hvm */ 0) {
+ if (/* hvm */ 1) {
unsigned long acpi_s_state = 0;
unsigned long pvdriver = 0;
xc_get_hvm_param(ctx->xch, domid, HVM_PARAM_ACPI_S_STATE, &acpi_s_state);
xc_get_hvm_param(ctx->xch, domid, HVM_PARAM_CALLBACK_IRQ, &pvdriver);
- if (!pvdriver && acpi_s_state != 0)
+ if (!pvdriver || acpi_s_state != 0)
xc_domain_shutdown(ctx->xch, domid, req);
}
return 0;
diff -Naur libxl/xl_cmdimpl.c libxl-patch/xl_cmdimpl.c
--- libxl/xl_cmdimpl.c 2010-05-11 09:37:50.000000000 +0100
+++ libxl-patch/xl_cmdimpl.c 2010-05-12 16:46:12.000000000 +0100
@@ -1129,6 +1129,7 @@
free(w1);
free(w2);
LOG("Done. Rebooting now");
+ sleep(2);/*Fix Me: If this sleep is not there the domain creation failes sometimes*/
goto start;
}
LOG("Done. Exiting now");
@@ -1226,6 +1227,12 @@
} else if(!strcmp(command, "destroy")) {
printf("Usage: xl destroy <Domain>\n\n");
printf("Terminate a domain immediately.\n\n");
+ } else if(!strcmp(command, "shutdown")) {
+ printf("Usage: xl shutdown <Domain>\n\n");
+ printf("issue a shutdown signal to a domain.\n\n");
+ } else if(!strcmp(command, "reboot")) {
+ printf("Usage: xl reboot <Domain>\n\n");
+ printf("issue a reboot signal to a domain.\n\n");
} else if (!strcmp(command, "console")) {
printf("Usage: xl console <Domain>\n\n");
printf("Attach to domain's console.\n\n");
@@ -1591,6 +1598,23 @@
if (rc) { fprintf(stderr,"destroy failed (rc=%d)\n.",rc); exit(-1); }
}
+void shutdown_domain(char *p)
+{
+ int rc;
+ find_domain(p);
+ rc=libxl_domain_shutdown(&ctx, domid, 0);
+ if (rc) { fprintf(stderr,"shutdown failed (rc=%d)\n.",rc);exit(-1); }
+}
+
+void reboot_domain(char *p)
+{
+ int rc;
+ find_domain(p);
+ rc=libxl_domain_shutdown(&ctx, domid, 1);
+ if (rc) { fprintf(stderr,"reboot failed (rc=%d)\n.",rc);exit(-1); }
+}
+
+
void list_domains(int verbose)
{
struct libxl_dominfo *info;
@@ -2340,6 +2364,59 @@
exit(0);
}
+int main_shutdown(int argc, char **argv)
+{
+ int opt;
+ char *p;
+
+ while ((opt = getopt(argc, argv, "h")) != -1) {
+ switch (opt) {
+ case 'h':
+ help("shutdown");
+ exit(0);
+ default:
+ fprintf(stderr, "option not supported\n");
+ break;
+ }
+ }
+ if (optind >= argc) {
+ help("shutdown");
+ exit(2);
+ }
+
+ p = argv[optind];
+
+ shutdown_domain(p);
+ exit(0);
+}
+
+int main_reboot(int argc, char **argv)
+{
+ int opt;
+ char *p;
+
+ while ((opt = getopt(argc, argv, "h")) != -1) {
+ switch (opt) {
+ case 'h':
+ help("reboot");
+ exit(0);
+ default:
+ fprintf(stderr, "option not supported\n");
+ break;
+ }
+ }
+ if (optind >= argc) {
+ help("reboot");
+ exit(2);
+ }
+
+ p = argv[optind];
+
+ reboot_domain(p);
+ exit(0);
+}
+
+
int main_list(int argc, char **argv)
{
int opt, verbose = 0;
diff -Naur libxl/xl_cmdimpl.h libxl-patch/xl_cmdimpl.h
--- libxl/xl_cmdimpl.h 2010-05-11 09:37:50.000000000 +0100
+++ libxl-patch/xl_cmdimpl.h 2010-05-11 12:51:14.000000000 +0100
@@ -27,6 +27,8 @@
int main_pause(int argc, char **argv);
int main_unpause(int argc, char **argv);
int main_destroy(int argc, char **argv);
+int main_shutdown(int argc, char **argv);
+int main_reboot(int argc, char **argv);
int main_list(int argc, char **argv);
int main_list_vm(int argc, char **argv);
int main_create(int argc, char **argv);
diff -Naur libxl/xl_cmdtable.c libxl-patch/xl_cmdtable.c
--- libxl/xl_cmdtable.c 2010-05-11 09:37:50.000000000 +0100
+++ libxl-patch/xl_cmdtable.c 2010-05-11 13:28:31.000000000 +0100
@@ -18,6 +18,8 @@
{ "create", &main_create, "create a domain from config file <filename>" },
{ "list", &main_list, "list information about all domains" },
{ "destroy", &main_destroy, "terminate a domain immediately" },
+ { "shutdown", &main_shutdown, "issue a shutdown signal to a domain" },
+ { "reboot", &main_reboot, "issue a reboot signal to a domain " },
{ "pci-attach", &main_pciattach, "insert a new pass-through pci device" },
{ "pci-detach", &main_pcidetach, "remove a domain's pass-through pci device" },
{ "pci-list", &main_pcilist, "list pass-through pci devices for a domain" },
[-- Attachment #3: Type: text/plain, Size: 138 bytes --]
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel
next prev parent reply other threads:[~2010-05-12 15:57 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-05-07 23:36 [PATCH] new commands "xl reboot" & "xl shutdown" Gihan Munasinghe
2010-05-10 15:11 ` Stefano Stabellini
2010-05-11 6:51 ` Gihan Munasinghe
2010-05-12 15:57 ` Gihan Munasinghe [this message]
2010-05-12 16:34 ` Vincent Hanquez
2010-05-12 17:09 ` Gihan Munasinghe
2010-05-13 7:41 ` Keir Fraser
2010-05-31 19:03 ` Gihan Munasinghe
2010-06-01 6:09 ` Keir Fraser
2010-06-01 22:51 ` Gihan Munasinghe
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4BEACFD8.6080601@flexiant.com \
--to=gmunasinghe@flexiant.com \
--cc=stefano.stabellini@eu.citrix.com \
--cc=xen-devel@lists.xensource.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.