]> err.no Git - linux-2.6/blobdiff - arch/powerpc/kernel/kprobes.c
[PATCH] kprobes: arch_remove_kprobe
[linux-2.6] / arch / powerpc / kernel / kprobes.c
index 331e169e8629e1c98e81843622dac6beec2ef840..93444e32fccd3ad93b049cc04163ac2cc58926d4 100644 (file)
@@ -35,7 +35,6 @@
 #include <asm/kdebug.h>
 #include <asm/sstep.h>
 
-static DECLARE_MUTEX(kprobe_mutex);
 DEFINE_PER_CPU(struct kprobe *, current_kprobe) = NULL;
 DEFINE_PER_CPU(struct kprobe_ctlblk, kprobe_ctlblk);
 
@@ -54,9 +53,7 @@ int __kprobes arch_prepare_kprobe(struct kprobe *p)
 
        /* insn must be on a special executable page on ppc64 */
        if (!ret) {
-               down(&kprobe_mutex);
                p->ainsn.insn = get_insn_slot();
-               up(&kprobe_mutex);
                if (!p->ainsn.insn)
                        ret = -ENOMEM;
        }
@@ -83,9 +80,11 @@ void __kprobes arch_disarm_kprobe(struct kprobe *p)
                           (unsigned long) p->addr + sizeof(kprobe_opcode_t));
 }
 
-void __kprobes arch_remove_kprobe(struct kprobe *p)
+void __kprobes arch_remove_kprobe(struct kprobe *p, struct semaphore *s)
 {
+       down(s);
        free_insn_slot(p->ainsn.insn);
+       up(s);
 }
 
 static inline void prepare_singlestep(struct kprobe *p, struct pt_regs *regs)