Commit 958bc332 authored by Nicholas Piggin's avatar Nicholas Piggin Committed by Ben Hutchings

powerpc/kernel: Use kprobe blacklist for asm functions

commit 6f698df1 upstream.

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>
[bwh: Backported to 3.16: adjust context]
Signed-off-by: default avatarBen Hutchings <ben@decadent.org.uk>
parent 29a77518
...@@ -217,13 +217,6 @@ name: \ ...@@ -217,13 +217,6 @@ name: \
addi r2,r2,(.TOC.-0b)@l; \ addi r2,r2,(.TOC.-0b)@l; \
.localentry name,.-name .localentry name,.-name
#define _KPROBE(name) \
.section ".kprobes.text","a"; \
.align 2 ; \
.type name,@function; \
.globl name; \
name:
#define DOTSYM(a) a #define DOTSYM(a) a
#else #else
...@@ -247,20 +240,6 @@ GLUE(.,name): ...@@ -247,20 +240,6 @@ GLUE(.,name):
#define _GLOBAL_TOC(name) _GLOBAL(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) #define DOTSYM(a) GLUE(.,a)
#endif #endif
...@@ -279,13 +258,22 @@ GLUE(.,name): ...@@ -279,13 +258,22 @@ GLUE(.,name):
#define _GLOBAL_TOC(name) _GLOBAL(name) #define _GLOBAL_TOC(name) _GLOBAL(name)
#define _KPROBE(n) \
.section ".kprobes.text","a"; \
.globl n; \
n:
#endif #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
/* /*
* LOAD_REG_IMMEDIATE(rn, expr) * LOAD_REG_IMMEDIATE(rn, expr)
* Loads the value of the constant expression 'expr' into register 'rn' * Loads the value of the constant expression 'expr' into register 'rn'
......
...@@ -345,7 +345,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_UNIFIED_ID_CACHE) ...@@ -345,7 +345,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_UNIFIED_ID_CACHE)
* *
* flush_icache_range(unsigned long start, unsigned long stop) * flush_icache_range(unsigned long start, unsigned long stop)
*/ */
_KPROBE(flush_icache_range) _GLOBAL(flush_icache_range)
BEGIN_FTR_SECTION BEGIN_FTR_SECTION
PURGE_PREFETCHED_INS PURGE_PREFETCHED_INS
blr /* for 601, do nothing */ blr /* for 601, do nothing */
...@@ -376,6 +376,8 @@ END_FTR_SECTION_IFSET(CPU_FTR_COHERENT_ICACHE) ...@@ -376,6 +376,8 @@ END_FTR_SECTION_IFSET(CPU_FTR_COHERENT_ICACHE)
sync /* additional sync needed on g4 */ sync /* additional sync needed on g4 */
isync isync
blr blr
_ASM_NOKPROBE_SYMBOL(flush_icache_range)
/* /*
* Write any modified data cache blocks out to memory. * Write any modified data cache blocks out to memory.
* Does not invalidate the corresponding cache lines (especially for * Does not invalidate the corresponding cache lines (especially for
......
...@@ -65,7 +65,7 @@ PPC64_CACHES: ...@@ -65,7 +65,7 @@ PPC64_CACHES:
* flush all bytes from start through stop-1 inclusive * flush all bytes from start through stop-1 inclusive
*/ */
_KPROBE(flush_icache_range) _GLOBAL(flush_icache_range)
BEGIN_FTR_SECTION BEGIN_FTR_SECTION
PURGE_PREFETCHED_INS PURGE_PREFETCHED_INS
blr blr
...@@ -108,7 +108,8 @@ END_FTR_SECTION_IFSET(CPU_FTR_COHERENT_ICACHE) ...@@ -108,7 +108,8 @@ END_FTR_SECTION_IFSET(CPU_FTR_COHERENT_ICACHE)
bdnz 2b bdnz 2b
isync isync
blr blr
.previous .text _ASM_NOKPROBE_SYMBOL(flush_icache_range)
/* /*
* Like above, but only do the D-cache. * Like above, but only do the D-cache.
* *
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment