Пример #1
0
/**
 * 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);
}
Пример #2
0
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);
}