[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Minios-devel] [PATCH v2 2/2] Save/Restore Support: Add fini_shutdown call to app exit flow.



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

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.