|
[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
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |