|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Minios-devel] [PATCH v3 2/2] Save/Restore Support: Add fini_shutdown call to app exit flow.
On 27/03/18 17:54, Bruno Alvisio wrote:
> 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.
You didn't answer my question whether all stubdoms are still building.
There might be some external user of kernel_shutdown(). You should do
a test-build of Xen with your modified Mini-OS and check that the
following directories under stubdom/ are being created in your build:
mini-os-x86_32-grub
mini-os-x86_64-grub
mini-os-x86_64-ioemu
mini-os-x86_64-vtpm
mini-os-x86_64-vtpmmgr
mini-os-x86_64-xenstore
In case you can confirm those are building fine, you can add my:
Reviewed-by: Juergen Gross <jgross@xxxxxxxx>
Juergen
>
> 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)
> {
>
_______________________________________________
Minios-devel mailing list
Minios-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/minios-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |