|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH ARM v5 02/20] mini-os: fixed shutdown thread
Before, it read "" and started a shutdown immediately. Now, it waits for
a non-empty value and then actually shuts down.
Acked-by: Samuel Thibault <samuel.thibault@xxxxxxxxxxxx>
[talex5@xxxxxxxxx: avoid declaration-after-statement in kernel.c]
Signed-off-by: Thomas Leonard <talex5@xxxxxxxxx>
---
extras/mini-os/kernel.c | 10 +++++++---
extras/mini-os/main.c | 2 +-
2 files changed, 8 insertions(+), 4 deletions(-)
diff --git a/extras/mini-os/kernel.c b/extras/mini-os/kernel.c
index ea409f4..c7410db 100644
--- a/extras/mini-os/kernel.c
+++ b/extras/mini-os/kernel.c
@@ -68,7 +68,9 @@ void setup_xen_features(void)
/* This should be overridden by the application we are linked against. */
__attribute__((weak)) void app_shutdown(unsigned reason)
{
+ struct sched_shutdown sched_shutdown = { .reason = reason };
printk("Shutdown requested: %d\n", reason);
+ HYPERVISOR_sched_op(SCHEDOP_shutdown, &sched_shutdown);
}
static void shutdown_thread(void *p)
@@ -76,12 +78,14 @@ static void shutdown_thread(void *p)
const char *path = "control/shutdown";
const char *token = path;
xenbus_event_queue events = NULL;
- char *shutdown, *err;
+ char *shutdown = NULL, *err;
unsigned int shutdown_reason;
xenbus_watch_path_token(XBT_NIL, path, token, &events);
- while ((err = xenbus_read(XBT_NIL, path, &shutdown)) != NULL)
+ while ((err = xenbus_read(XBT_NIL, path, &shutdown)) != NULL ||
!strcmp(shutdown, ""))
{
free(err);
+ free(shutdown);
+ shutdown = NULL;
xenbus_wait_for_watch(&events);
}
err = xenbus_unwatch_path_token(XBT_NIL, path, token);
@@ -106,7 +110,7 @@ static void shutdown_thread(void *p)
/* This should be overridden by the application we are linked against. */
__attribute__((weak)) int app_main(start_info_t *si)
{
- printk("Dummy main: start_info=%p\n", si);
+ printk("kernel.c: dummy main: start_info=%p\n", si);
return 0;
}
diff --git a/extras/mini-os/main.c b/extras/mini-os/main.c
index 73eb6fb..aec0586 100644
--- a/extras/mini-os/main.c
+++ b/extras/mini-os/main.c
@@ -185,7 +185,7 @@ void _exit(int ret)
int app_main(start_info_t *si)
{
- printk("Dummy main: start_info=%p\n", si);
+ printk("main.c: dummy main: start_info=%p\n", si);
main_thread = create_thread("main", call_main, si);
return 0;
}
--
2.0.0
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |