/** * update_prio_tracer - * @prio: equivalent to prio of task structure. */ void update_prio_tracer(pid_t tid, int prio, int policy, int kernel) { struct prio_tracer *pt; struct prio_set *ps, *ps_latest; unsigned long flags; if (!pts_enable) return; pt = query_prio_tracer(tid); if (!pt) return; spin_lock_irqsave(&pts_lock, flags); ps = select_set(pt, 1, kernel); ps->prio = prio; ps->policy = policy; ps_latest = select_set(pt, 0, kernel); if (ps_latest->prio != prio || ps_latest->policy != policy) kernel ? pt->change_ker++ : pt->change_usr++; kernel ? pt->count_ker++ : pt->count_usr++; /* binder priority inherit */ if (kernel == 2) pt->prio_binder = prio; spin_unlock_irqrestore(&pts_lock, flags); }
void delete_prio_tracer(pid_t tid) { struct prio_tracer *pt = query_prio_tracer(tid); unsigned long flags; if (!pt) return; debugfs_remove(pt->debugfs_entry); spin_lock_irqsave(&pts_lock, flags); rb_erase(&pt->rb_node, &priority_tracers); spin_unlock_irqrestore(&pts_lock, flags); }
void delete_prio_tracer(pid_t tid) { struct prio_tracer *pt; struct dentry *d; unsigned long flags; spin_lock_irqsave(&pts_lock, flags); pt = query_prio_tracer(tid); if (!pt) { spin_unlock_irqrestore(&pts_lock, flags); return; } d = pt->debugfs_entry; spin_unlock_irqrestore(&pts_lock, flags); /* debugfs involves mutex... */ debugfs_remove(d); spin_lock_irqsave(&pts_lock, flags); rb_erase(&pt->rb_node, &priority_tracers); kfree(pt); spin_unlock_irqrestore(&pts_lock, flags); }