On 12/02/2016 09:42 AM, Jan Kiszka wrote:
> This is a mandatory service with PSCI v0.2+, and if the root cell was
> using it prior to enabling Jailhouse, just returning an error, like we
> do so far, will send the CPUs into a busy loop.
> 
> Implement the minimum of this service by sending the CPU into a wfi, but
> only if there are no interrupt waiting to be injected. We better check
> for physical interrupts after the wfi to reduce world switches and,
> thus, event delivery latencies.
> 
> CC: Ralf Ramsauer <[email protected]>
> CC: Mark Rutland <[email protected]>
> Signed-off-by: Jan Kiszka <[email protected]>
Tested-by: Ralf Ramsauer <[email protected]>
> ---
>  hypervisor/arch/arm-common/include/asm/psci.h | 2 ++
>  hypervisor/arch/arm-common/psci.c             | 8 ++++++++
>  2 files changed, 10 insertions(+)
> 
> diff --git a/hypervisor/arch/arm-common/include/asm/psci.h 
> b/hypervisor/arch/arm-common/include/asm/psci.h
> index 8feeda4..09712c6 100644
> --- a/hypervisor/arch/arm-common/include/asm/psci.h
> +++ b/hypervisor/arch/arm-common/include/asm/psci.h
> @@ -14,6 +14,8 @@
>  #define _JAILHOUSE_ASM_PSCI_H
>  
>  #define PSCI_VERSION                 0x84000000
> +#define PSCI_CPU_SUSPEND_32          0x84000001
> +#define PSCI_CPU_SUSPEND_64          0xc4000001
>  #define PSCI_CPU_OFF                 0x84000002
>  #define PSCI_CPU_ON_32                       0x84000003
>  #define PSCI_CPU_ON_64                       0xc4000003
> diff --git a/hypervisor/arch/arm-common/psci.c 
> b/hypervisor/arch/arm-common/psci.c
> index ca83119..8e3a301 100644
> --- a/hypervisor/arch/arm-common/psci.c
> +++ b/hypervisor/arch/arm-common/psci.c
> @@ -79,6 +79,14 @@ long psci_dispatch(struct trap_context *ctx)
>               /* Major[31:16], minor[15:0] */
>               return 2;
>  
> +     case PSCI_CPU_SUSPEND_32:
> +     case PSCI_CPU_SUSPEND_64:
> +             if (!irqchip_has_pending_irqs()) {
> +                     asm volatile("wfi" : : : "memory");
> +                     irqchip_handle_irq(cpu_data);
> +             }
> +             return 0;
> +
>       case PSCI_CPU_OFF:
>       case PSCI_CPU_OFF_V0_1_UBOOT:
>               arm_cpu_park();
> 

-- 
Ralf Ramsauer
PGP: 0x8F10049B

-- 
You received this message because you are subscribed to the Google Groups 
"Jailhouse" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to