[PATCH] kprobes: moves lock-unlock to non-arch kprobe_flush_task
authorHien Nguyen <hien@us.ibm.com>
Thu, 23 Jun 2005 07:09:26 +0000 (00:09 -0700)
committerLinus Torvalds <torvalds@ppc970.osdl.org>
Thu, 23 Jun 2005 16:45:21 +0000 (09:45 -0700)
This patch moves the lock/unlock of the arch specific kprobe_flush_task()
to the non-arch specific kprobe_flusk_task().

Signed-off-by: Hien Nguyen <hien@us.ibm.com>
Acked-by: Prasanna S Panchamukhi <prasanna@in.ibm.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
arch/i386/kernel/kprobes.c
include/linux/kprobes.h
kernel/kprobes.c

index 2314d8d306fd09da6ad6f07610ba155f8d5f6062..b8e2bae0ab4fe6a5db02ccc80f6dec01edadb0a9 100644 (file)
@@ -138,17 +138,14 @@ void arch_prepare_kretprobe(struct kretprobe *rp, struct pt_regs *regs)
        }
 }
 
-void arch_kprobe_flush_task(struct task_struct *tk, spinlock_t *kp_lock)
+void arch_kprobe_flush_task(struct task_struct *tk)
 {
-       unsigned long flags = 0;
        struct kretprobe_instance *ri;
-       spin_lock_irqsave(kp_lock, flags);
        while ((ri = get_rp_inst_tsk(tk)) != NULL) {
                *((unsigned long *)(ri->stack_addr)) =
                                        (unsigned long) ri->ret_addr;
                recycle_rp_inst(ri);
        }
-       spin_unlock_irqrestore(kp_lock, flags);
 }
 
 /*
index 0f90466fb8b090dc89d04a3c3117838f800078cf..461391decc46618bfc7bfe7c580920620873f98c 100644 (file)
@@ -33,7 +33,6 @@
 #include <linux/list.h>
 #include <linux/notifier.h>
 #include <linux/smp.h>
-#include <linux/spinlock.h>
 
 #include <asm/kprobes.h>
 
@@ -101,7 +100,7 @@ extern void trampoline_post_handler(struct kprobe *p, struct pt_regs *regs,
                                                        unsigned long flags);
 extern struct task_struct *arch_get_kprobe_task(void *ptr);
 extern void arch_prepare_kretprobe(struct kretprobe *rp, struct pt_regs *regs);
-extern void arch_kprobe_flush_task(struct task_struct *tk, spinlock_t *kp_lock);
+extern void arch_kprobe_flush_task(struct task_struct *tk);
 #else /* ARCH_SUPPORTS_KRETPROBES */
 static inline void kretprobe_trampoline(void)
 {
index e8e0ae8a6e141ce6230f5f20dc6e2778d5b6c39f..dd42e717dd353202baa4948c4bb5dd46e08c3522 100644 (file)
@@ -229,7 +229,10 @@ struct kretprobe_instance *get_rp_inst_tsk(struct task_struct *tk)
  */
 void kprobe_flush_task(struct task_struct *tk)
 {
-       arch_kprobe_flush_task(tk, &kprobe_lock);
+       unsigned long flags = 0;
+       spin_lock_irqsave(&kprobe_lock, flags);
+       arch_kprobe_flush_task(tk);
+       spin_unlock_irqrestore(&kprobe_lock, flags);
 }
 
 /*