For review, the following patch adds an ''xm hibernate'' (and ''xm shutdown -i'' (-h and -H were already taken)) option to xm, which will do the same as shutdown but instead ultimately write ''hibernate'' to control/shutdown instead of ''shutdown''. I added it because I want to test the hibernate ability of the GPLPV drivers and this was just as easy as writing a script to manually write ''hibernate'' to control/shutdown. Much easier to add in a loop script now (eg ''xm hibernate -w <domain> && xm create <domain> && sleep 300'' on repeat). I don''t think it hurts anything, but on the other hand, outside of my testing and few specific scenarios I''m not sure exactly how useful it is, given that xen already has the ''save'' and ''restore'' ability. Let me know if could be useful to someone and I''ll submit properly (eg as an attachment with a signed off by etc). James # hg diff diff -r 13fe7f07df15 tools/python/xen/xend/XendConstants.py --- a/tools/python/xen/xend/XendConstants.py Thu Aug 06 13:27:53 2009 +0100 +++ b/tools/python/xen/xend/XendConstants.py Sat Aug 08 21:23:53 2009 +1000 @@ -21,18 +21,20 @@ # Shutdown codes and reasons. # -DOMAIN_POWEROFF = 0 -DOMAIN_REBOOT = 1 -DOMAIN_SUSPEND = 2 -DOMAIN_CRASH = 3 -DOMAIN_HALT = 4 +DOMAIN_POWEROFF = 0 +DOMAIN_REBOOT = 1 +DOMAIN_SUSPEND = 2 +DOMAIN_CRASH = 3 +DOMAIN_HALT = 4 +DOMAIN_HIBERNATE = 5 DOMAIN_SHUTDOWN_REASONS = { - DOMAIN_POWEROFF: "poweroff", - DOMAIN_REBOOT : "reboot", - DOMAIN_SUSPEND : "suspend", - DOMAIN_CRASH : "crash", - DOMAIN_HALT : "halt" + DOMAIN_POWEROFF : "poweroff", + DOMAIN_REBOOT : "reboot", + DOMAIN_SUSPEND : "suspend", + DOMAIN_CRASH : "crash", + DOMAIN_HALT : "halt", + DOMAIN_HIBERNATE : "hibernate" } REVERSE_DOMAIN_SHUTDOWN_REASONS = \ dict([(y, x) for x, y in DOMAIN_SHUTDOWN_REASONS.items()]) diff -r 13fe7f07df15 tools/python/xen/xm/main.py --- a/tools/python/xen/xm/main.py Thu Aug 06 13:27:53 2009 +0100 +++ b/tools/python/xen/xm/main.py Sat Aug 08 21:23:53 2009 +1000 @@ -121,6 +121,7 @@ ''save'' : (''[-c] <Domain> <CheckpointFile>'', ''Save a domain state to restore later.''), ''shutdown'' : (''<Domain> [-waRH]'', ''Shutdown a domain.''), + ''hibernate'' : (''<Domain> [-wa]'', ''Hibernate a domain.''), ''top'' : ('''', ''Monitor a host and the domains in real time.''), ''unpause'' : (''<Domain>'', ''Unpause a paused domain.''), ''uptime'' : (''[-s] [Domain, ...]'', @@ -334,6 +335,7 @@ "resume", "save", "shutdown", + "hibernate", "start", "suspend", "sysrq", @@ -1289,6 +1291,11 @@ arg_check(args, "shutdown", 1, 4) from xen.xm import shutdown shutdown.main(["shutdown"] + args) + +def xm_hibernate(args): + arg_check(args, "hibernate", 1, 3) + from xen.xm import shutdown + shutdown.main(["shutdown", "-i"] + args) def xm_reset(args): arg_check(args, "reset", 1) @@ -2850,6 +2857,7 @@ "resume": xm_resume, "save": xm_save, "shutdown": xm_shutdown, + "hibernate": xm_hibernate, "start": xm_start, "sysrq": xm_sysrq, "trigger": xm_trigger, diff -r 13fe7f07df15 tools/python/xen/xm/shutdown.py --- a/tools/python/xen/xm/shutdown.py Thu Aug 06 13:27:53 2009 +0100 +++ b/tools/python/xen/xm/shutdown.py Sat Aug 08 21:23:53 2009 +1000 @@ -50,6 +50,10 @@ gopts.opt(''reboot'', short=''R'', fn=set_true, default=0, use=''Shutdown and reboot.'') + +gopts.opt(''hibernate'', short=''i'', + fn=set_true, default=0, + use=''Hibernate.'') def wait_reboot(opts, doms, rcs): if serverType == SERVER_XEN_API: @@ -127,6 +131,8 @@ return ''halt'' elif opts.vals.reboot: return ''reboot'' + elif opts.vals.hibernate: + return ''hibernate'' else: return ''poweroff'' _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel