From: Vijay Kumar Date: Fri, 5 May 2017 19:35:05 +0000 (-0400) Subject: sparc64: Add a new hypercall CPU_POKE X-Git-Tag: v4.1.12-106.0.20170720_1900~23 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=9e45518c0a8dc8209d8764149b0d6b876dc6c23d;p=users%2Fjedix%2Flinux-maple.git sparc64: Add a new hypercall CPU_POKE This adds a new hypercall CPU_POKE for quickly waking up an idle CPU. CPU POKE should only be sent to valid non-local CPUs. Signed-off-by: Rob Gardner Signed-off-by: Vijay Kumar Orabug: 25575672 Signed-off-by: Allen Pais Reviewed-by: Anthony Yznaga --- diff --git a/arch/sparc/include/asm/hypervisor.h b/arch/sparc/include/asm/hypervisor.h index 9e23c56eebde..f53479e9995f 100644 --- a/arch/sparc/include/asm/hypervisor.h +++ b/arch/sparc/include/asm/hypervisor.h @@ -306,6 +306,24 @@ unsigned long sun4v_cpu_stop(unsigned long cpuid); unsigned long sun4v_cpu_yield(void); #endif +/* cpu_poke() + * TRAP: HV_FAST_TRAP + * FUNCTION: HV_FAST_CPU_POKE + * RET0: status + * ERRORS: ENOCPU cpuid refers to a CPU that does not exist + * EINVAL cpuid is current CPU + * + * Poke CPU cpuid. If the target CPU is currently suspended having + * invoked the cpu-yield service, that vCPU will be resumed. + * Poke interrupts may only be sent to valid, non-local CPUs. + * It is not legal to poke the current vCPU. + */ +#define HV_FAST_CPU_POKE 0x13 + +#ifndef __ASSEMBLY__ +unsigned long sun4v_cpu_poke(unsigned long cpuid); +#endif + /* cpu_qconf() * TRAP: HV_FAST_TRAP * FUNCTION: HV_FAST_CPU_QCONF diff --git a/arch/sparc/kernel/hvcalls.S b/arch/sparc/kernel/hvcalls.S index 8061686c69df..027fdb7b98a3 100644 --- a/arch/sparc/kernel/hvcalls.S +++ b/arch/sparc/kernel/hvcalls.S @@ -106,6 +106,17 @@ ENTRY(sun4v_cpu_yield) nop ENDPROC(sun4v_cpu_yield) + /* %o0: cpuid + * + * returns %o0: status + */ +ENTRY(sun4v_cpu_poke) + mov HV_FAST_CPU_POKE, %o5 + ta HV_FAST_TRAP + retl + nop +ENDPROC(sun4v_cpu_poke) + /* %o0: type * %o1: queue paddr * %o2: num queue entries