[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20110605191233.GA20462@redhat.com>
Date: Sun, 5 Jun 2011 21:12:33 +0200
From: Oleg Nesterov <oleg@...hat.com>
To: Peter Zijlstra <peterz@...radead.org>
Cc: Sergey Senozhatsky <sergey.senozhatsky@...il.com>,
Ingo Molnar <mingo@...e.hu>,
Andrew Morton <akpm@...ux-foundation.org>,
linux-kernel@...r.kernel.org
Subject: Re: [PATCH] sched: RCU-protect __set_task_cpu() in set_task_cpu()
On 06/03, Peter Zijlstra wrote:
>
> @@ -2200,6 +2201,16 @@ void set_task_cpu(struct task_struct *p,
> !(task_thread_info(p)->preempt_count & PREEMPT_ACTIVE));
>
> #ifdef CONFIG_LOCKDEP
> + /*
> + * The caller should hold either p->pi_lock or rq->lock, when changing
> + * a task's CPU.
Is it literally true? IIRC, we need ->pi_lock if the task is not active,
and rq->lock if p->on_rq = 1. And that is why we do not clear p->on_rq
between deactivate_task() + activate_task(), correct?
> + *
> + * sched_move_task() holds both and thus holding either pins the cgroup,
> + * see set_task_rq().
> + *
> + * Furthermore, all task_rq users should acquire both locks, see
> + * task_rq_lock().
> + */
> WARN_ON_ONCE(debug_locks && !(lockdep_is_held(&p->pi_lock) ||
> lockdep_is_held(&task_rq(p)->lock)));
IOW, perhaps this should be
WARN_ON_ONCE(debug_locks && !lockdep_is_held(p->on_rq ?
&task_rq(p)->lock : &p->pi_lock))
?
Not that I really suggest to change this WARN_ON(), I am just trying
to recall the new rules.
Oleg.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists