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

Re: [Minios-devel] [UNIKRAFT PATCHv4 38/43] plat/kvm: Implement shutdown for Arm64



Hi Wei,

On 06/07/18 10:03, Wei Chen wrote:
QEMU/KVM provide a PSCI interface for virtual machine on
Arm64 platform. So we use this interface to implement
platform system off function.

Signed-off-by: Wei Chen <Wei.Chen@xxxxxxx>
---
  plat/kvm/shutdown.c | 11 +++++++++--
  1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/plat/kvm/shutdown.c b/plat/kvm/shutdown.c
index a513df9..0f0a01f 100644
--- a/plat/kvm/shutdown.c
+++ b/plat/kvm/shutdown.c
@@ -22,7 +22,8 @@
   */
#include <errno.h>
-#include <x86/cpu.h>
+#include <cpu.h>
+#include <irq.h>
  #include <uk/print.h>
  #include <uk/plat/bootstrap.h>
@@ -38,7 +39,11 @@ void ukplat_terminate(enum ukplat_gstate request __unused)
         * be 83 ('S', 41 << 1 | 1).
         */
        uk_printk("Unikraft halted\n");
+#if defined(__X86_64__)
        outw(0x501, 41);
+#elif defined(__ARM_64__)
+       system_off();
+#endif
/*
         * If we got here, there is no way to initiate "shutdown" on virtio
@@ -49,7 +54,9 @@ void ukplat_terminate(enum ukplat_gstate request __unused)
static void cpu_halt(void)
  {
-       __asm__ __volatile__("cli; hlt");
+       local_irq_disable();
+       halt();

I think you want to move halt() in the for loop for Arm because WFI will come back when an interrupt is received. This means you will go into a busy loop wasting power.

+
        for (;;)
                ;
  }


Cheers,

--
Julien Grall

_______________________________________________
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®.