Commit 0498b63504f818e5ab39c818cd6f7b41319a1187

Authored by Ananth N Mavinakayanahalli
Committed by Linus Torvalds
1 parent e597c2984c

[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
... ... @@ -40,7 +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 +#define arch_remove_kprobe(p) do {} while (0)
44 44  
45 45 void kretprobe_trampoline(void);
46 46  
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);
... ... @@ -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