[REFACTOR] create and use recycle_urp_inst()
authorVyacheslav Cherkashin <v.cherkashin@samsung.com>
Thu, 28 Mar 2013 11:38:57 +0000 (15:38 +0400)
committerVyacheslav Cherkashin <v.cherkashin@samsung.com>
Thu, 28 Mar 2013 11:39:18 +0000 (15:39 +0400)
uprobe/arch/asm-arm/swap_uprobes.c
uprobe/swap_uprobes.c
uprobe/swap_uprobes.h

index dea907b..c35e7d0 100644 (file)
@@ -672,7 +672,7 @@ int trampoline_uprobe_handler(struct kprobe *p, struct pt_regs *regs)
                }
 
                orig_ret_address = (unsigned long)ri->ret_addr;
-               recycle_rp_inst(ri);
+               recycle_urp_inst(ri);
 
                if (orig_ret_address != trampoline_address) {
                        /*
index 56cb7b9..6e7bc4b 100644 (file)
@@ -413,6 +413,19 @@ static void add_urp_inst(struct kretprobe_instance *ri)
 }
 
 /* Called with uretprobe_lock held */
+void recycle_urp_inst(struct kretprobe_instance *ri)
+{
+       if (ri->rp) {
+               hlist_del(&ri->hlist);
+               /* remove rp inst off the used list */
+               hlist_del(&ri->uflist);
+               /* put rp inst back onto the free list */
+               INIT_HLIST_NODE(&ri->uflist);
+               hlist_add_head(&ri->uflist, &ri->rp->free_instances);
+       }
+}
+
+/* Called with uretprobe_lock held */
 static struct kretprobe_instance *get_used_urp_inst(struct kretprobe *rp)
 {
        struct hlist_node *node;
@@ -841,7 +854,7 @@ void dbi_unregister_uretprobe(struct task_struct *task, struct kretprobe *rp, in
                        /*panic*/printk("%s (%d/%d): cannot disarm urp instance (%08lx)\n",
                                        ri->task->comm, ri->task->tgid, ri->task->pid,
                                        (unsigned long)rp->kp.addr);
-               recycle_rp_inst(ri);
+               recycle_urp_inst(ri);
        }
 
        if (hlist_empty(&rp->used_instances) || not_rp2) {
index 0385c1f..5b6d5d2 100644 (file)
@@ -47,5 +47,6 @@ void disarm_uprobe(struct kprobe *p, struct task_struct *task);
 
 extern spinlock_t uretprobe_lock;
 struct hlist_head *uretprobe_inst_table_head(void *hash_key);
+void recycle_urp_inst(struct kretprobe_instance *ri);
 
 #endif /*  _DBI_UPROBES_H */