Commit 28d43de7 authored by Vijay Kumar's avatar Vijay Kumar Committed by David S. Miller
Browse files

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: default avatarRob Gardner <rob.gardner@oracle.com>
Signed-off-by: default avatarVijay Kumar <vijay.ac.kumar@oracle.com>
Reviewed-by: default avatarAnthony Yznaga <anthony.yznaga@oracle.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 99274b81
Loading
Loading
Loading
Loading
+18 −0
Original line number Diff line number Diff line
@@ -298,6 +298,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
+11 −0
Original line number Diff line number Diff line
@@ -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