Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6f698df1 authored by Nicholas Piggin's avatar Nicholas Piggin Committed by Michael Ellerman
Browse files

powerpc/kernel: Use kprobe blacklist for asm functions



Rather than forcing the whole function into the ".kprobes.text" section,
just add the symbol's address to the kprobe blacklist.

This also lets us drop the three versions of the_KPROBE macro, in
exchange for just one version of _ASM_NOKPROBE_SYMBOL - which is a good
cleanup.

Signed-off-by: default avatarNicholas Piggin <npiggin@gmail.com>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
parent 03465f89
Loading
Loading
Loading
Loading
+14 −26
Original line number Diff line number Diff line
@@ -217,13 +217,6 @@ name: \
	addi r2,r2,(.TOC.-0b)@l; \
	.localentry name,.-name

#define _KPROBE(name) \
	.section ".kprobes.text","a"; \
	.align 2 ; \
	.type name,@function; \
	.globl name; \
name:

#define DOTSYM(a)	a

#else
@@ -247,20 +240,6 @@ GLUE(.,name):

#define _GLOBAL_TOC(name) _GLOBAL(name)

#define _KPROBE(name) \
	.section ".kprobes.text","a"; \
	.align 2 ; \
	.globl name; \
	.globl GLUE(.,name); \
	.section ".opd","aw"; \
name: \
	.quad GLUE(.,name); \
	.quad .TOC.@tocbase; \
	.quad 0; \
	.previous; \
	.type GLUE(.,name),@function; \
GLUE(.,name):

#define DOTSYM(a)	GLUE(.,a)

#endif
@@ -279,13 +258,22 @@ GLUE(.,name):

#define _GLOBAL_TOC(name) _GLOBAL(name)

#define _KPROBE(n)	\
	.section ".kprobes.text","a";	\
	.globl	n;	\
n:

#endif

/*
 * __kprobes (the C annotation) puts the symbol into the .kprobes.text
 * section, which gets emitted at the end of regular text.
 *
 * _ASM_NOKPROBE_SYMBOL and NOKPROBE_SYMBOL just adds the symbol to
 * a blacklist. The former is for core kprobe functions/data, the
 * latter is for those that incdentially must be excluded from probing
 * and allows them to be linked at more optimal location within text.
 */
#define _ASM_NOKPROBE_SYMBOL(entry)			\
	.pushsection "_kprobe_blacklist","aw";		\
	PPC_LONG (entry) ;				\
	.popsection

#define FUNC_START(name)	_GLOBAL(name)
#define FUNC_END(name)

+3 −1
Original line number Diff line number Diff line
@@ -328,7 +328,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_UNIFIED_ID_CACHE)
 *
 * flush_icache_range(unsigned long start, unsigned long stop)
 */
_KPROBE(flush_icache_range)
_GLOBAL(flush_icache_range)
BEGIN_FTR_SECTION
	PURGE_PREFETCHED_INS
	blr				/* for 601, do nothing */
@@ -358,6 +358,8 @@ END_FTR_SECTION_IFSET(CPU_FTR_COHERENT_ICACHE)
	sync				/* additional sync needed on g4 */
	isync
	blr
_ASM_NOKPROBE_SYMBOL(flush_icache_range)

/*
 * Flush a particular page from the data cache to RAM.
 * Note: this is necessary because the instruction cache does *not*
+3 −2
Original line number Diff line number Diff line
@@ -66,7 +66,7 @@ PPC64_CACHES:
 *   flush all bytes from start through stop-1 inclusive
 */

_KPROBE(flush_icache_range)
_GLOBAL(flush_icache_range)
BEGIN_FTR_SECTION
	PURGE_PREFETCHED_INS
	blr
@@ -109,7 +109,8 @@ END_FTR_SECTION_IFSET(CPU_FTR_COHERENT_ICACHE)
	bdnz	2b
	isync
	blr
	.previous .text
_ASM_NOKPROBE_SYMBOL(flush_icache_range)

/*
 * Like above, but only do the D-cache.
 *