diff options
| author | Ananth N Mavinakayanahalli <ananth@in.ibm.com> | 2008-03-04 14:28:37 -0800 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2008-03-04 16:35:11 -0800 | 
| commit | 9edddaa200df18e08fe0cf21036e8ae467b1363c (patch) | |
| tree | 26f5319fac24fb6c76b1276b19725caeb5ec24bc | |
| parent | 8182ec49a73729334f5a6c65a607ba7009ebd6d6 (diff) | |
| download | olio-linux-3.10-9edddaa200df18e08fe0cf21036e8ae467b1363c.tar.xz olio-linux-3.10-9edddaa200df18e08fe0cf21036e8ae467b1363c.zip  | |
Kprobes: indicate kretprobe support in Kconfig
Add CONFIG_HAVE_KRETPROBES to the arch/<arch>/Kconfig file for relevant
architectures with kprobes support.  This facilitates easy handling of
in-kernel modules (like samples/kprobes/kretprobe_example.c) that depend on
kretprobes being present in the kernel.
Thanks to Sam Ravnborg for helping make the patch more lean.
Per Mathieu's suggestion, added CONFIG_KRETPROBES and fixed up dependencies.
Signed-off-by: Ananth N Mavinakayanahalli <ananth@in.ibm.com>
Acked-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
Acked-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
| -rw-r--r-- | arch/Kconfig | 7 | ||||
| -rw-r--r-- | arch/arm/Kconfig | 1 | ||||
| -rw-r--r-- | arch/ia64/Kconfig | 1 | ||||
| -rw-r--r-- | arch/powerpc/Kconfig | 1 | ||||
| -rw-r--r-- | arch/s390/Kconfig | 1 | ||||
| -rw-r--r-- | arch/sparc64/Kconfig | 1 | ||||
| -rw-r--r-- | arch/x86/Kconfig | 1 | ||||
| -rw-r--r-- | include/asm-arm/kprobes.h | 1 | ||||
| -rw-r--r-- | include/asm-ia64/kprobes.h | 1 | ||||
| -rw-r--r-- | include/asm-powerpc/kprobes.h | 1 | ||||
| -rw-r--r-- | include/asm-s390/kprobes.h | 1 | ||||
| -rw-r--r-- | include/asm-sparc64/kprobes.h | 2 | ||||
| -rw-r--r-- | include/asm-x86/kprobes.h | 1 | ||||
| -rw-r--r-- | include/linux/kprobes.h | 6 | ||||
| -rw-r--r-- | kernel/kprobes.c | 9 | 
15 files changed, 19 insertions, 16 deletions
diff --git a/arch/Kconfig b/arch/Kconfig index 3d72dc3fc8f..694c9af520b 100644 --- a/arch/Kconfig +++ b/arch/Kconfig @@ -27,5 +27,12 @@ config KPROBES  	  for kernel debugging, non-intrusive instrumentation and testing.  	  If in doubt, say "N". +config KRETPROBES +	def_bool y +	depends on KPROBES && HAVE_KRETPROBES +  config HAVE_KPROBES  	def_bool n + +config HAVE_KRETPROBES +	def_bool n diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 16b82e1272b..955fc53c1c0 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -12,6 +12,7 @@ config ARM  	select SYS_SUPPORTS_APM_EMULATION  	select HAVE_OPROFILE  	select HAVE_KPROBES if (!XIP_KERNEL) +	select HAVE_KRETPROBES if (HAVE_KPROBES)  	help  	  The ARM series is a line of low-power-consumption RISC chip designs  	  licensed by ARM Ltd and targeted at embedded applications and diff --git a/arch/ia64/Kconfig b/arch/ia64/Kconfig index dff9edfc746..56762d3c2a6 100644 --- a/arch/ia64/Kconfig +++ b/arch/ia64/Kconfig @@ -18,6 +18,7 @@ config IA64  	select HAVE_IDE  	select HAVE_OPROFILE  	select HAVE_KPROBES +	select HAVE_KRETPROBES  	default y  	help  	  The Itanium Processor Family is Intel's 64-bit successor to diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig index 5b8d8382b76..1189d8d6170 100644 --- a/arch/powerpc/Kconfig +++ b/arch/powerpc/Kconfig @@ -90,6 +90,7 @@ config PPC  	select HAVE_IDE  	select HAVE_OPROFILE  	select HAVE_KPROBES +	select HAVE_KRETPROBES  config EARLY_PRINTK  	bool diff --git a/arch/s390/Kconfig b/arch/s390/Kconfig index b21444b681b..9892827b617 100644 --- a/arch/s390/Kconfig +++ b/arch/s390/Kconfig @@ -61,6 +61,7 @@ config S390  	def_bool y  	select HAVE_OPROFILE  	select HAVE_KPROBES +	select HAVE_KRETPROBES  source "init/Kconfig" diff --git a/arch/sparc64/Kconfig b/arch/sparc64/Kconfig index 3af378ddb6a..463d1be32c9 100644 --- a/arch/sparc64/Kconfig +++ b/arch/sparc64/Kconfig @@ -10,6 +10,7 @@ config SPARC  	default y  	select HAVE_OPROFILE  	select HAVE_KPROBES +	select HAVE_KRETPROBES  config SPARC64  	bool diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index 53800b80a20..f41c9538ca3 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig @@ -21,6 +21,7 @@ config X86  	select HAVE_IDE  	select HAVE_OPROFILE  	select HAVE_KPROBES +	select HAVE_KRETPROBES  	select HAVE_KVM if ((X86_32 && !X86_VOYAGER && !X86_VISWS && !X86_NUMAQ) || X86_64) diff --git a/include/asm-arm/kprobes.h b/include/asm-arm/kprobes.h index 4e7bd32288a..c042194d3ab 100644 --- a/include/asm-arm/kprobes.h +++ b/include/asm-arm/kprobes.h @@ -20,7 +20,6 @@  #include <linux/ptrace.h>  #include <linux/percpu.h> -#define ARCH_SUPPORTS_KRETPROBES  #define __ARCH_WANT_KPROBES_INSN_SLOT  #define MAX_INSN_SIZE			2  #define MAX_STACK_SIZE			64	/* 32 would probably be OK */ diff --git a/include/asm-ia64/kprobes.h b/include/asm-ia64/kprobes.h index a93ce9ef07f..adbaba14eb0 100644 --- a/include/asm-ia64/kprobes.h +++ b/include/asm-ia64/kprobes.h @@ -82,7 +82,6 @@ struct kprobe_ctlblk {  	struct prev_kprobe prev_kprobe[ARCH_PREV_KPROBE_SZ];  }; -#define ARCH_SUPPORTS_KRETPROBES  #define kretprobe_blacklist_size 0  #define SLOT0_OPCODE_SHIFT	(37) diff --git a/include/asm-powerpc/kprobes.h b/include/asm-powerpc/kprobes.h index afabad230db..d0e7701fa1f 100644 --- a/include/asm-powerpc/kprobes.h +++ b/include/asm-powerpc/kprobes.h @@ -80,7 +80,6 @@ typedef unsigned int kprobe_opcode_t;  #define is_trap(instr)	(IS_TW(instr) || IS_TWI(instr))  #endif -#define ARCH_SUPPORTS_KRETPROBES  #define flush_insn_slot(p)	do { } while (0)  #define kretprobe_blacklist_size 0 diff --git a/include/asm-s390/kprobes.h b/include/asm-s390/kprobes.h index 948db3d0d05..330f68caffe 100644 --- a/include/asm-s390/kprobes.h +++ b/include/asm-s390/kprobes.h @@ -46,7 +46,6 @@ typedef u16 kprobe_opcode_t;  	? (MAX_STACK_SIZE) \  	: (((unsigned long)current_thread_info()) + THREAD_SIZE - (ADDR))) -#define ARCH_SUPPORTS_KRETPROBES  #define kretprobe_blacklist_size 0  #define KPROBE_SWAP_INST	0x10 diff --git a/include/asm-sparc64/kprobes.h b/include/asm-sparc64/kprobes.h index 7237dd87663..5879d71afda 100644 --- a/include/asm-sparc64/kprobes.h +++ b/include/asm-sparc64/kprobes.h @@ -14,8 +14,6 @@ typedef u32 kprobe_opcode_t;  #define arch_remove_kprobe(p)	do {} while (0) -#define ARCH_SUPPORTS_KRETPROBES -  #define flush_insn_slot(p)		\  do { 	flushi(&(p)->ainsn.insn[0]);	\  	flushi(&(p)->ainsn.insn[1]);	\ diff --git a/include/asm-x86/kprobes.h b/include/asm-x86/kprobes.h index 143476a3cb5..61ad7b5d142 100644 --- a/include/asm-x86/kprobes.h +++ b/include/asm-x86/kprobes.h @@ -42,7 +42,6 @@ typedef u8 kprobe_opcode_t;  	: (((unsigned long)current_thread_info()) + THREAD_SIZE \  	   - (unsigned long)(ADDR))) -#define ARCH_SUPPORTS_KRETPROBES  #define flush_insn_slot(p)	do { } while (0)  extern const int kretprobe_blacklist_size; diff --git a/include/linux/kprobes.h b/include/linux/kprobes.h index 4a6ce82ba03..0f28486f636 100644 --- a/include/linux/kprobes.h +++ b/include/linux/kprobes.h @@ -125,11 +125,11 @@ struct jprobe {  DECLARE_PER_CPU(struct kprobe *, current_kprobe);  DECLARE_PER_CPU(struct kprobe_ctlblk, kprobe_ctlblk); -#ifdef ARCH_SUPPORTS_KRETPROBES +#ifdef CONFIG_KRETPROBES  extern void arch_prepare_kretprobe(struct kretprobe_instance *ri,  				   struct pt_regs *regs);  extern int arch_trampoline_kprobe(struct kprobe *p); -#else /* ARCH_SUPPORTS_KRETPROBES */ +#else /* CONFIG_KRETPROBES */  static inline void arch_prepare_kretprobe(struct kretprobe *rp,  					struct pt_regs *regs)  { @@ -138,7 +138,7 @@ static inline int arch_trampoline_kprobe(struct kprobe *p)  {  	return 0;  } -#endif /* ARCH_SUPPORTS_KRETPROBES */ +#endif /* CONFIG_KRETPROBES */  /*   * Function-return probe -   * Note: diff --git a/kernel/kprobes.c b/kernel/kprobes.c index 7a86e643233..e6a61dcbc57 100644 --- a/kernel/kprobes.c +++ b/kernel/kprobes.c @@ -678,8 +678,7 @@ void __kprobes unregister_jprobe(struct jprobe *jp)  	unregister_kprobe(&jp->kp);  } -#ifdef ARCH_SUPPORTS_KRETPROBES - +#ifdef CONFIG_KRETPROBES  /*   * This kprobe pre_handler is registered with every kretprobe. When probe   * hits it will set up the return probe. @@ -769,8 +768,7 @@ int __kprobes register_kretprobe(struct kretprobe *rp)  	return ret;  } -#else /* ARCH_SUPPORTS_KRETPROBES */ - +#else /* CONFIG_KRETPROBES */  int __kprobes register_kretprobe(struct kretprobe *rp)  {  	return -ENOSYS; @@ -781,8 +779,7 @@ static int __kprobes pre_handler_kretprobe(struct kprobe *p,  {  	return 0;  } - -#endif /* ARCH_SUPPORTS_KRETPROBES */ +#endif /* CONFIG_KRETPROBES */  void __kprobes unregister_kretprobe(struct kretprobe *rp)  {  |