Commit e597c2984c64609c6e1e1ac803f00f7550705860

Authored by Anil S Keshavamurthy
Committed by Linus Torvalds
1 parent f709b12234

[PATCH] kprobes: arch_remove_kprobe

Currently arch_remove_kprobes() is only implemented/required for x86_64 and
powerpc.  All other architecture like IA64, i386 and sparc64 implementes a
dummy function which is being called from arch independent kprobes.c file.

This patch removes the dummy functions and replaces it with
#define arch_remove_kprobe(p, s)	do { } while(0)

Signed-off-by: Anil S Keshavamurthy <anil.s.keshavamurthy@intel.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>

Showing 12 changed files with 12 additions and 18 deletions Side-by-side Diff

arch/i386/kernel/kprobes.c
... ... @@ -77,10 +77,6 @@
77 77 (unsigned long) p->addr + sizeof(kprobe_opcode_t));
78 78 }
79 79  
80   -void __kprobes arch_remove_kprobe(struct kprobe *p)
81   -{
82   -}
83   -
84 80 static inline void save_previous_kprobe(struct kprobe_ctlblk *kcb)
85 81 {
86 82 kcb->prev_kprobe.kp = kprobe_running();
arch/ia64/kernel/kprobes.c
... ... @@ -467,10 +467,6 @@
467 467 flush_icache_range(arm_addr, arm_addr + sizeof(bundle_t));
468 468 }
469 469  
470   -void __kprobes arch_remove_kprobe(struct kprobe *p)
471   -{
472   -}
473   -
474 470 /*
475 471 * We are resuming execution after a single step fault, so the pt_regs
476 472 * structure reflects the register state after we executed the instruction
arch/powerpc/kernel/kprobes.c
... ... @@ -80,9 +80,11 @@
80 80 (unsigned long) p->addr + sizeof(kprobe_opcode_t));
81 81 }
82 82  
83   -void __kprobes arch_remove_kprobe(struct kprobe *p)
  83 +void __kprobes arch_remove_kprobe(struct kprobe *p, struct semaphore *s)
84 84 {
  85 + down(s);
85 86 free_insn_slot(p->ainsn.insn);
  87 + up(s);
86 88 }
87 89  
88 90 static inline void prepare_singlestep(struct kprobe *p, struct pt_regs *regs)
arch/sparc64/kernel/kprobes.c
... ... @@ -61,10 +61,6 @@
61 61 flushi(p->addr);
62 62 }
63 63  
64   -void __kprobes arch_remove_kprobe(struct kprobe *p)
65   -{
66   -}
67   -
68 64 static inline void save_previous_kprobe(struct kprobe_ctlblk *kcb)
69 65 {
70 66 kcb->prev_kprobe.kp = kprobe_running();
arch/x86_64/kernel/kprobes.c
... ... @@ -220,9 +220,11 @@
220 220 (unsigned long) p->addr + sizeof(kprobe_opcode_t));
221 221 }
222 222  
223   -void __kprobes arch_remove_kprobe(struct kprobe *p)
  223 +void __kprobes arch_remove_kprobe(struct kprobe *p, struct semaphore *s)
224 224 {
  225 + down(s);
225 226 free_insn_slot(p->ainsn.insn);
  227 + up(s);
226 228 }
227 229  
228 230 static inline void save_previous_kprobe(struct kprobe_ctlblk *kcb)
include/asm-i386/kprobes.h
... ... @@ -40,6 +40,7 @@
40 40  
41 41 #define JPROBE_ENTRY(pentry) (kprobe_opcode_t *)pentry
42 42 #define ARCH_SUPPORTS_KRETPROBES
  43 +#define arch_remove_kprobe(p, s) do { } while(0)
43 44  
44 45 void kretprobe_trampoline(void);
45 46  
include/asm-ia64/kprobes.h
... ... @@ -89,6 +89,7 @@
89 89 #define IP_RELATIVE_PREDICT_OPCODE (7)
90 90 #define LONG_BRANCH_OPCODE (0xC)
91 91 #define LONG_CALL_OPCODE (0xD)
  92 +#define arch_remove_kprobe(p, s) do { } while(0)
92 93  
93 94 typedef struct kprobe_opcode {
94 95 bundle_t bundle;
include/asm-powerpc/kprobes.h
... ... @@ -50,6 +50,7 @@
50 50  
51 51 #define ARCH_SUPPORTS_KRETPROBES
52 52 void kretprobe_trampoline(void);
  53 +extern void arch_remove_kprobe(struct kprobe *p, struct semaphore *s);
53 54  
54 55 /* Architecture specific copy of original instruction */
55 56 struct arch_specific_insn {
include/asm-sparc64/kprobes.h
... ... @@ -12,6 +12,7 @@
12 12 #define MAX_INSN_SIZE 2
13 13  
14 14 #define JPROBE_ENTRY(pentry) (kprobe_opcode_t *)pentry
  15 +#define arch_remove_kprobe(p, s) do { } while(0)
15 16  
16 17 /* Architecture specific copy of original instruction*/
17 18 struct arch_specific_insn {
include/asm-x86_64/kprobes.h
... ... @@ -78,6 +78,7 @@
78 78 local_irq_enable();
79 79 }
80 80  
  81 +extern void arch_remove_kprobe(struct kprobe *p, struct semaphore *s);
81 82 extern int post_kprobe_handler(struct pt_regs *regs);
82 83 extern int kprobe_fault_handler(struct pt_regs *regs, int trapnr);
83 84 extern int kprobe_handler(struct pt_regs *regs);
include/linux/kprobes.h
... ... @@ -152,7 +152,6 @@
152 152 extern int arch_prepare_kprobe(struct kprobe *p);
153 153 extern void arch_arm_kprobe(struct kprobe *p);
154 154 extern void arch_disarm_kprobe(struct kprobe *p);
155   -extern void arch_remove_kprobe(struct kprobe *p);
156 155 extern int arch_init_kprobes(void);
157 156 extern void show_registers(struct pt_regs *regs);
158 157 extern kprobe_opcode_t *get_insn_slot(void);
... ... @@ -532,9 +532,7 @@
532 532 list_del_rcu(&p->list);
533 533 kfree(old_p);
534 534 }
535   - down(&kprobe_mutex);
536   - arch_remove_kprobe(p);
537   - up(&kprobe_mutex);
  535 + arch_remove_kprobe(p, &kprobe_mutex);
538 536 }
539 537 }
540 538