[FIX] Kprobe: replace kretprobe_lock spinlocks 06/15906/1 dev/aarch64
authorAlexander Aksenov <a.aksenov@samsung.com>
Wed, 29 Jan 2014 13:18:59 +0000 (17:18 +0400)
committerAlexander Aksenov <a.aksenov@samsung.com>
Wed, 29 Jan 2014 13:18:59 +0000 (17:18 +0400)
Now all calls of dbi_unregister_kretprobe_top are inside

Change-Id: I5b62df36ae5318f9cc8484d3c724fff94989c8ed
Signed-off-by: Alexander Aksenov <a.aksenov@samsung.com>
kprobe/dbi_kprobes.c

index cc7bd3b..7a9febf 100644 (file)
@@ -824,15 +824,11 @@ static int dbi_disarm_krp_inst(struct kretprobe_instance *ri);
 
 static void dbi_unregister_kretprobe_top(struct kretprobe *rp)
 {
-       unsigned long flags;
        struct kretprobe_instance *ri;
        DECLARE_NODE_PTR_FOR_HLIST(node);
 
        dbi_unregister_kprobe(&rp->kp);
 
-       /* No race here */
-       spin_lock_irqsave(&kretprobe_lock, flags);
-
        swap_hlist_for_each_entry(ri, node, &rp->used_instances, uflist) {
                if (!dbi_disarm_krp_inst(ri)) {
                        printk("%s (%d/%d): cannot disarm krp instance (%08lx)\n",
@@ -840,8 +836,6 @@ static void dbi_unregister_kretprobe_top(struct kretprobe *rp)
                                        (unsigned long)rp->kp.addr);
                }
        }
-
-       spin_unlock_irqrestore(&kretprobe_lock, flags);
 }
 
 static void dbi_unregister_kretprobe_bottom(struct kretprobe *rp)
@@ -865,10 +859,15 @@ static void dbi_unregister_kretprobe_bottom(struct kretprobe *rp)
 void dbi_unregister_kretprobes(struct kretprobe **rpp, size_t size)
 {
        size_t i;
+       unsigned long flags;
+
+       spin_lock_irqsave(&kretprobe_lock, flags);
 
        for (i = 0; i < size; i++)
                dbi_unregister_kretprobe_top(rpp[i]);
 
+       spin_unlock_irqrestore(&kretprobe_lock, flags);
+
        if (!in_atomic())
                synchronize_sched();