[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Minios-devel] [PATCH v3 2/2] Save/Restore Support: Add fini_shutdown call to app exit flow.
Instead of calling kernel_shutdown() in the exit flow, a call to fini_shutdown() is added to the existing exit flow. kernel_shutdown() is removed since it is not used in any part of mini-OS. Signed-off-by: Bruno Alvisio <bruno.alvisio@xxxxxxxxx> --- Changed since v1: - Decided to leave original exit flow in main.c and add the call to fini_shutdown there. - Removed kernel_shutdown function entirely. --- include/shutdown.h | 3 +-- main.c | 4 ++++ shutdown.c | 51 +++++++++------------------------------------------ 3 files changed, 14 insertions(+), 44 deletions(-) diff --git a/include/shutdown.h b/include/shutdown.h index a5ec019..88993cb 100644 --- a/include/shutdown.h +++ b/include/shutdown.h @@ -4,8 +4,7 @@ #include <mini-os/hypervisor.h> void init_shutdown(start_info_t *si); - -void kernel_shutdown(int reason) __attribute__((noreturn)); +void fini_shutdown(void); void kernel_suspend(void); #endif diff --git a/main.c b/main.c index 4e42f53..a93bc9d 100644 --- a/main.c +++ b/main.c @@ -17,6 +17,7 @@ #include <unistd.h> #include <xenbus.h> #include <events.h> +#include <shutdown.h> #include <mini-os/lib.h> extern int main(int argc, char *argv[], char *envp[]); @@ -177,6 +178,9 @@ void _exit(int ret) #if defined(HAVE_LWIP) && defined(CONFIG_NETFRONT) stop_networking(); #endif +#ifdef CONFIG_XENBUS + fini_shutdown(); +#endif stop_kernel(); if (!ret) { /* No problem, just shutdown. */ diff --git a/shutdown.c b/shutdown.c index 510f6e1..c7c92cb 100644 --- a/shutdown.c +++ b/shutdown.c @@ -111,19 +111,6 @@ static void shutdown_thread(void *p) } } -static void fini_shutdown(void) -{ - char *err; - - end_shutdown_thread = 1; - xenbus_release_wait_for_watch(&events); - err = xenbus_unwatch_path_token(XBT_NIL, path, token); - if (err) { - free(err); - do_exit(); - } -} - void init_shutdown(start_info_t *si) { start_info_ptr = si; @@ -131,40 +118,20 @@ void init_shutdown(start_info_t *si) end_shutdown_thread = 0; create_thread("shutdown", shutdown_thread, NULL); } -#endif -void kernel_shutdown(int reason) +void fini_shutdown(void) { - char* reason_str = NULL; - - switch(reason) { - case SHUTDOWN_poweroff: - reason_str = "poweroff"; - break; - case SHUTDOWN_reboot: - reason_str = "reboot"; - break; - case SHUTDOWN_crash: - reason_str = "crash"; - break; - default: - do_exit(); - break; - } - - printk("MiniOS will shutdown (reason = %s) ...\n", reason_str); - -#ifdef CONFIG_XENBUS - fini_shutdown(); -#endif - - stop_kernel(); + char *err; - for ( ;; ) { - struct sched_shutdown sched_shutdown = { .reason = reason }; - HYPERVISOR_sched_op(SCHEDOP_shutdown, &sched_shutdown); + end_shutdown_thread = 1; + xenbus_release_wait_for_watch(&events); + err = xenbus_unwatch_path_token(XBT_NIL, path, token); + if (err) { + free(err); + do_exit(); } } +#endif void kernel_suspend(void) { -- 2.3.2 (Apple Git-55) _______________________________________________ Minios-devel mailing list Minios-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/minios-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |