Re: [PATCH 1/3] sched: add sched_task_call()

Peter Zijlstra
2015-02-16T20:44:43Z

On Mon, Feb 16, 2015 at 12:52:34PM -0600, Josh Poimboeuf wrote:
> +++ b/kernel/sched/core.c
> @@ -1338,6 +1338,23 @@ void kick_process(struct task_struct *p)
> EXPORT_SYMBOL_GPL(kick_process);
> #endif /* CONFIG_SMP */
>
> +/***
> + * sched_task_call - call a function with a task's state locked
> + *
> + * The task is guaranteed to remain either active or inactive during the
> + * function call.
> + */
> +void sched_task_call(sched_task_call_func_t func, struct task_struct *p,
> + void *data)
> +{
> + unsigned long flags;
> + struct rq *rq;
> +
> + rq = task_rq_lock(p, &flags);
> + func(p, data);
> + task_rq_unlock(rq, p, &flags);
> +}

Yeah, I think not. We're so not going to allow running random code under
rq->lock and p->pi_lock.