From: Hien Nguyen <hien@us.ibm.com>

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>
---

 arch/i386/kernel/kprobes.c |    5 +----
 include/linux/kprobes.h    |    3 +--
 kernel/kprobes.c           |    5 ++++-
 3 files changed, 6 insertions(+), 7 deletions(-)

diff -puN arch/i386/kernel/kprobes.c~kprobes-moves-lock-unlock-to-non-arch-kprobe_flush_task arch/i386/kernel/kprobes.c
--- 25/arch/i386/kernel/kprobes.c~kprobes-moves-lock-unlock-to-non-arch-kprobe_flush_task	2005-06-18 02:49:04.000000000 -0700
+++ 25-akpm/arch/i386/kernel/kprobes.c	2005-06-18 02:49:04.000000000 -0700
@@ -138,17 +138,14 @@ void arch_prepare_kretprobe(struct kretp
 	}
 }
 
-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);
 }
 
 /*
diff -puN include/linux/kprobes.h~kprobes-moves-lock-unlock-to-non-arch-kprobe_flush_task include/linux/kprobes.h
--- 25/include/linux/kprobes.h~kprobes-moves-lock-unlock-to-non-arch-kprobe_flush_task	2005-06-18 02:49:04.000000000 -0700
+++ 25-akpm/include/linux/kprobes.h	2005-06-18 02:49:04.000000000 -0700
@@ -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(stru
 							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)
 {
diff -puN kernel/kprobes.c~kprobes-moves-lock-unlock-to-non-arch-kprobe_flush_task kernel/kprobes.c
--- 25/kernel/kprobes.c~kprobes-moves-lock-unlock-to-non-arch-kprobe_flush_task	2005-06-18 02:49:04.000000000 -0700
+++ 25-akpm/kernel/kprobes.c	2005-06-18 02:49:04.000000000 -0700
@@ -229,7 +229,10 @@ struct kretprobe_instance *get_rp_inst_t
  */
 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);
 }
 
 /*
_