Merge commit '35488dedf8d' into kernel
authorVyacheslav Cherkashin <v.cherkashin@samsung.com>
Tue, 20 Aug 2013 09:50:48 +0000 (13:50 +0400)
committerVyacheslav Cherkashin <v.cherkashin@samsung.com>
Tue, 20 Aug 2013 09:50:48 +0000 (13:50 +0400)
Conflicts:
src/modules/driver/probes_manager.c
src/modules/driver/probes_manager.h
src/modules/driver/us_proc_inst.c
src/modules/kprobe/dbi_kprobes.c

1  2 
kprobe/dbi_kprobes.c

@@@ -817,30 -761,42 +817,48 @@@ int dbi_register_kretprobe(struct kretp
  
  static int dbi_disarm_krp_inst(struct kretprobe_instance *ri);
  
- void dbi_unregister_kretprobe(struct kretprobe *rp)
 -void dbi_unregister_kretprobe_top(struct kretprobe *rp)
++static void dbi_unregister_kretprobe_top(struct kretprobe *rp)
  {
        unsigned long flags;
        struct kretprobe_instance *ri;
+       struct hlist_node *node;
  
 -      dbi_unregister_kprobe (&rp->kp, NULL);
 +      dbi_unregister_kprobe(&rp->kp);
  
        /* No race here */
 -      spin_lock_irqsave (&kretprobe_lock, flags);
 +      spin_lock_irqsave(&kretprobe_lock, flags);
  
-       while ((ri = get_used_rp_inst (rp)) != NULL) {
+       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",
                                        ri->task->comm, ri->task->tgid, ri->task->pid,
                                        (unsigned long)rp->kp.addr);
                }
-               recycle_rp_inst(ri);
        }
 -void dbi_unregister_kretprobe_bottom(struct kretprobe *rp)
+       spin_unlock_irqrestore(&kretprobe_lock, flags);
+ }
++static void dbi_unregister_kretprobe_bottom(struct kretprobe *rp)
+ {
+       unsigned long flags;
+       struct kretprobe_instance *ri;
+       struct hlist_node *node;
  
 -      while ((ri = get_used_rp_inst (rp)) != NULL) {
+       spin_lock_irqsave(&kretprobe_lock, flags);
 -      spin_unlock_irqrestore (&kretprobe_lock, flags);
 -      free_rp_inst (rp);
++      while ((ri = get_used_rp_inst(rp)) != NULL) {
+               recycle_rp_inst(ri);
+       }
 +      spin_unlock_irqrestore(&kretprobe_lock, flags);
 +      free_rp_inst(rp);
  }
  
 -struct kretprobe * clone_kretprobe (struct kretprobe *rp)
++void dbi_unregister_kretprobe(struct kretprobe *rp)
++{
++      dbi_unregister_kretprobe_top(rp);
++      dbi_unregister_kretprobe_bottom(rp);
++}
++
 +struct kretprobe *clone_kretprobe(struct kretprobe *rp)
  {
        struct kprobe *old_p;
        struct kretprobe *clone = NULL;