[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
On 20/07/2018 03:39, Wei Chen wrote: Hi Julien, Hi Wei, -----Original Message----- From: Julien Grall <julien.grall@xxxxxxx> Sent: 2018年7月19日 21:40 To: Wei Chen <Wei.Chen@xxxxxxx>; minios-devel@xxxxxxxxxxxxxxxxxxxx; simon.kuenzer@xxxxxxxxx Cc: Kaly Xin <Kaly.Xin@xxxxxxx>; nd <nd@xxxxxxx> Subject: 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.I think I don't want the WFI come back. The role of the cpu_halt is used to hang up the system. It's not an idle. You probably read my answer on patch #35. WFI will finish to execute when receiving an interrupt even with interrupts masked. An implementation is also free to implement WFI as a NOP. What I suggested is to write: for (;;) halt();So if you happen to exit halt, then you will call it again and go back to sleep. This is how usually you make your OS to stall forever (We use that on Xen). Cheers, -- Julien Grall _______________________________________________ Minios-devel mailing list Minios-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/minios-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |