From: Thomas Leonard Subject: [PATCH ARM v3 2/7] mini-os: fixed shutdown thread Date: Wed, 11 Jun 2014 11:30:13 +0100 Message-ID: <1402482618-15269-3-git-send-email-talex5@gmail.com> References: <1402482618-15269-1-git-send-email-talex5@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Received: from mail6.bemta14.messagelabs.com ([193.109.254.103]) by lists.xen.org with esmtp (Exim 4.72) (envelope-from ) id 1Wufnk-0002Ym-Kk for xen-devel@lists.xenproject.org; Wed, 11 Jun 2014 10:30:40 +0000 Received: by mail-wi0-f171.google.com with SMTP id n15so4768408wiw.10 for ; Wed, 11 Jun 2014 03:30:38 -0700 (PDT) In-Reply-To: <1402482618-15269-1-git-send-email-talex5@gmail.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: xen-devel@lists.xenproject.org Cc: Thomas Leonard , Dave.Scott@eu.citrix.com, anil@recoil.org, stefano.stabellini@eu.citrix.com, samuel.thibault@ens-lyon.org List-Id: xen-devel@lists.xenproject.org Before, it read "" and started a shutdown immediately. Now, it waits for a non-empty value and then actually shuts down. Signed-off-by: Thomas Leonard Acked-by: Samuel Thibault --- 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..27e3c56 100644 --- a/extras/mini-os/kernel.c +++ b/extras/mini-os/kernel.c @@ -69,6 +69,8 @@ void setup_xen_features(void) __attribute__((weak)) void app_shutdown(unsigned reason) { printk("Shutdown requested: %d\n", reason); + struct sched_shutdown sched_shutdown = { .reason = 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