git.kernel.org

sparc64: Add a new hypercall CPU_POKE - kernel/git/torvalds/linux.git - Linux kernel source tree

  • ️Fri Jul 21 2017
authorVijay Kumar <vijay.ac.kumar@oracle.com>2017-07-21 10:23:56 -0600
committerDavid S. Miller <davem@davemloft.net>2017-08-09 22:15:10 -0700
commit28d43de741cc67a9d8748de7dcb6c5f54cfa669c (patch)
tree5a45e75d3d4b7a392a6b68d9ae69c27dd9071159
parent99274b818a5dc7c3226866970a0cec0d40ed5f0f (diff)
downloadlinux-28d43de741cc67a9d8748de7dcb6c5f54cfa669c.tar.gz

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 <rob.gardner@oracle.com> Signed-off-by: Vijay Kumar <vijay.ac.kumar@oracle.com> Reviewed-by: Anthony Yznaga <anthony.yznaga@oracle.com> Signed-off-by: David S. Miller <davem@davemloft.net>

-rw-r--r--arch/sparc/include/asm/hypervisor.h18
-rw-r--r--arch/sparc/kernel/hvcalls.S11

2 files changed, 29 insertions, 0 deletions

diff --git a/arch/sparc/include/asm/hypervisor.h b/arch/sparc/include/asm/hypervisor.h
index 73cb8978df58c9..3dc9215d0357e0 100644
--- a/arch/sparc/include/asm/hypervisor.h
+++ b/arch/sparc/include/asm/hypervisor.h

@@ -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

diff --git a/arch/sparc/kernel/hvcalls.S b/arch/sparc/kernel/hvcalls.S
index 4116ee5c779132..e57007ff7f8f94 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