[PATCH] powerpc/perf: Add PROBENOP macro for debug

Madhavan Srinivasan maddy at linux.vnet.ibm.com
Sun Feb 19 06:58:34 AEDT 2017


>From PowerISA v2.07, architecture provides a special NOP
instruction called "Probe-Nop" defined as "and 0,0,0".
This form of "and" is reserved for use exclusively by the
Performance Monitor.

Usage example:

Add PROBENOP() macro to __tlbie() in hash_native_64.c to
verify the number of TLBIE. Power8 provides "PM_TLBIE_FIN"
PMU event (r30058) to count "tlbie finished".

Power8 PMU event "PM_PROBE_NOP_DISP" (r40014) counts the
"ProbeNops dispatched".

With modified kernel booted, output from perf:

# ./perf stat -e r30058,r40014 ls
....
 Performance counter stats for 'ls':

                 7      r30058
                 7      r40014

       0.003296959 seconds time elapsed

Macro comes handy when want to count specific instructions
which may or may not have a PMU event.

Signed-off-by: Madhavan Srinivasan <maddy at linux.vnet.ibm.com>
---
 arch/powerpc/include/asm/ppc-opcode.h | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/arch/powerpc/include/asm/ppc-opcode.h b/arch/powerpc/include/asm/ppc-opcode.h
index c4ced1d01d57..61c62a1a402c 100644
--- a/arch/powerpc/include/asm/ppc-opcode.h
+++ b/arch/powerpc/include/asm/ppc-opcode.h
@@ -462,4 +462,14 @@
 				       ((IH & 0x7) << 21))
 #define PPC_INVALIDATE_ERAT	PPC_SLBIA(7)
 
+/*
+ * From PowerISA v2.07, architecture provides a special NOP instruction
+ * called "Probe-Nop" defined as "and 0,0,0". This form of "and" is
+ * reserved for use exclusively by the Performance Monitor.
+ */
+#define _PROBENOP(x)	stringify_in_c(.long PPC_INST_AND	|	\
+						___PPC_RS(x)	|	\
+						___PPC_RA(x)	|	\
+						___PPC_RB(x))
+#define PROBENOP(x)	asm volatile(_PROBENOP(x))
 #endif /* _ASM_POWERPC_PPC_OPCODE_H */
-- 
2.7.4



More information about the Linuxppc-dev mailing list