Commit 0aa55e4d authored by Hien Nguyen's avatar Hien Nguyen Committed by Linus Torvalds

[PATCH] kprobes: moves lock-unlock to non-arch kprobe_flush_task

This patch moves the lock/unlock of the arch specific kprobe_flush_task()
to the non-arch specific kprobe_flusk_task().
Signed-off-by: default avatarHien Nguyen <hien@us.ibm.com>
Acked-by: default avatarPrasanna S Panchamukhi <prasanna@in.ibm.com>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 7e1048b1
...@@ -138,17 +138,14 @@ void arch_prepare_kretprobe(struct kretprobe *rp, struct pt_regs *regs) ...@@ -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; struct kretprobe_instance *ri;
spin_lock_irqsave(kp_lock, flags);
while ((ri = get_rp_inst_tsk(tk)) != NULL) { while ((ri = get_rp_inst_tsk(tk)) != NULL) {
*((unsigned long *)(ri->stack_addr)) = *((unsigned long *)(ri->stack_addr)) =
(unsigned long) ri->ret_addr; (unsigned long) ri->ret_addr;
recycle_rp_inst(ri); recycle_rp_inst(ri);
} }
spin_unlock_irqrestore(kp_lock, flags);
} }
/* /*
......
...@@ -33,7 +33,6 @@ ...@@ -33,7 +33,6 @@
#include <linux/list.h> #include <linux/list.h>
#include <linux/notifier.h> #include <linux/notifier.h>
#include <linux/smp.h> #include <linux/smp.h>
#include <linux/spinlock.h>
#include <asm/kprobes.h> #include <asm/kprobes.h>
...@@ -101,7 +100,7 @@ extern void trampoline_post_handler(struct kprobe *p, struct pt_regs *regs, ...@@ -101,7 +100,7 @@ extern void trampoline_post_handler(struct kprobe *p, struct pt_regs *regs,
unsigned long flags); unsigned long flags);
extern struct task_struct *arch_get_kprobe_task(void *ptr); 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_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 */ #else /* ARCH_SUPPORTS_KRETPROBES */
static inline void kretprobe_trampoline(void) static inline void kretprobe_trampoline(void)
{ {
......
...@@ -229,7 +229,10 @@ struct kretprobe_instance *get_rp_inst_tsk(struct task_struct *tk) ...@@ -229,7 +229,10 @@ struct kretprobe_instance *get_rp_inst_tsk(struct task_struct *tk)
*/ */
void kprobe_flush_task(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);
} }
/* /*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment