Commit 0498b63504f818e5ab39c818cd6f7b41319a1187
Committed by
Linus Torvalds
1 parent
e597c2984c
Exists in
master
and in
7 other branches
[PATCH] kprobes: fix build breakage
The following patch (against 2.6.15-rc5-mm3) fixes a kprobes build break due to changes introduced in the kprobe locking in 2.6.15-rc5-mm3. In addition, the patch reverts back the open-coding of kprobe_mutex. Signed-off-by: Ananth N Mavinakayanahalli <ananth@in.ibm.com> Acked-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 9 changed files with 16 additions and 13 deletions Side-by-side Diff
arch/powerpc/kernel/kprobes.c
... | ... | @@ -80,11 +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, struct semaphore *s) | |
83 | +void __kprobes arch_remove_kprobe(struct kprobe *p) | |
84 | 84 | { |
85 | - down(s); | |
85 | + down(&kprobe_mutex); | |
86 | 86 | free_insn_slot(p->ainsn.insn); |
87 | - up(s); | |
87 | + up(&kprobe_mutex); | |
88 | 88 | } |
89 | 89 | |
90 | 90 | static inline void prepare_singlestep(struct kprobe *p, struct pt_regs *regs) |
arch/x86_64/kernel/kprobes.c
... | ... | @@ -220,11 +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, struct semaphore *s) | |
223 | +void __kprobes arch_remove_kprobe(struct kprobe *p) | |
224 | 224 | { |
225 | - down(s); | |
225 | + down(&kprobe_mutex); | |
226 | 226 | free_insn_slot(p->ainsn.insn); |
227 | - up(s); | |
227 | + up(&kprobe_mutex); | |
228 | 228 | } |
229 | 229 | |
230 | 230 | static inline void save_previous_kprobe(struct kprobe_ctlblk *kcb) |
include/asm-i386/kprobes.h
include/asm-ia64/kprobes.h
... | ... | @@ -89,7 +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 | +#define arch_remove_kprobe(p) do {} while (0) | |
93 | 93 | |
94 | 94 | typedef struct kprobe_opcode { |
95 | 95 | bundle_t bundle; |
include/asm-powerpc/kprobes.h
... | ... | @@ -33,6 +33,7 @@ |
33 | 33 | #define __ARCH_WANT_KPROBES_INSN_SLOT |
34 | 34 | |
35 | 35 | struct pt_regs; |
36 | +struct kprobe; | |
36 | 37 | |
37 | 38 | typedef unsigned int kprobe_opcode_t; |
38 | 39 | #define BREAKPOINT_INSTRUCTION 0x7fe00008 /* trap */ |
... | ... | @@ -50,7 +51,7 @@ |
50 | 51 | |
51 | 52 | #define ARCH_SUPPORTS_KRETPROBES |
52 | 53 | void kretprobe_trampoline(void); |
53 | -extern void arch_remove_kprobe(struct kprobe *p, struct semaphore *s); | |
54 | +extern void arch_remove_kprobe(struct kprobe *p); | |
54 | 55 | |
55 | 56 | /* Architecture specific copy of original instruction */ |
56 | 57 | struct arch_specific_insn { |
include/asm-sparc64/kprobes.h
... | ... | @@ -12,7 +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 | +#define arch_remove_kprobe(p) do {} while (0) | |
16 | 16 | |
17 | 17 | /* Architecture specific copy of original instruction*/ |
18 | 18 | struct arch_specific_insn { |
include/asm-x86_64/kprobes.h
... | ... | @@ -30,6 +30,7 @@ |
30 | 30 | #define __ARCH_WANT_KPROBES_INSN_SLOT |
31 | 31 | |
32 | 32 | struct pt_regs; |
33 | +struct kprobe; | |
33 | 34 | |
34 | 35 | typedef u8 kprobe_opcode_t; |
35 | 36 | #define BREAKPOINT_INSTRUCTION 0xcc |
... | ... | @@ -44,6 +45,7 @@ |
44 | 45 | #define ARCH_SUPPORTS_KRETPROBES |
45 | 46 | |
46 | 47 | void kretprobe_trampoline(void); |
48 | +extern void arch_remove_kprobe(struct kprobe *p); | |
47 | 49 | |
48 | 50 | /* Architecture specific copy of original instruction*/ |
49 | 51 | struct arch_specific_insn { |
... | ... | @@ -78,7 +80,6 @@ |
78 | 80 | local_irq_enable(); |
79 | 81 | } |
80 | 82 | |
81 | -extern void arch_remove_kprobe(struct kprobe *p, struct semaphore *s); | |
82 | 83 | extern int post_kprobe_handler(struct pt_regs *regs); |
83 | 84 | extern int kprobe_fault_handler(struct pt_regs *regs, int trapnr); |
84 | 85 | extern int kprobe_handler(struct pt_regs *regs); |
include/linux/kprobes.h
... | ... | @@ -149,6 +149,7 @@ |
149 | 149 | }; |
150 | 150 | |
151 | 151 | extern spinlock_t kretprobe_lock; |
152 | +extern struct semaphore kprobe_mutex; | |
152 | 153 | extern int arch_prepare_kprobe(struct kprobe *p); |
153 | 154 | extern void arch_arm_kprobe(struct kprobe *p); |
154 | 155 | extern void arch_disarm_kprobe(struct kprobe *p); |
kernel/kprobes.c
... | ... | @@ -48,7 +48,7 @@ |
48 | 48 | static struct hlist_head kprobe_table[KPROBE_TABLE_SIZE]; |
49 | 49 | static struct hlist_head kretprobe_inst_table[KPROBE_TABLE_SIZE]; |
50 | 50 | |
51 | -static DECLARE_MUTEX(kprobe_mutex); /* Protects kprobe_table */ | |
51 | +DECLARE_MUTEX(kprobe_mutex); /* Protects kprobe_table */ | |
52 | 52 | DEFINE_SPINLOCK(kretprobe_lock); /* Protects kretprobe_inst_table */ |
53 | 53 | static DEFINE_PER_CPU(struct kprobe *, kprobe_instance) = NULL; |
54 | 54 | |
... | ... | @@ -532,7 +532,7 @@ |
532 | 532 | list_del_rcu(&p->list); |
533 | 533 | kfree(old_p); |
534 | 534 | } |
535 | - arch_remove_kprobe(p, &kprobe_mutex); | |
535 | + arch_remove_kprobe(p); | |
536 | 536 | } |
537 | 537 | } |
538 | 538 |