public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* Scheduler questions
@ 2004-06-04 15:10 Zoltan Menyhart
  2004-06-16  9:36 ` VM validation question Zoltan Menyhart
  2004-06-16  9:54 ` Scheduler questions William Lee Irwin III
  0 siblings, 2 replies; 4+ messages in thread
From: Zoltan Menyhart @ 2004-06-04 15:10 UTC (permalink / raw)
  To: linux-kernel

I'd like to understand which task structure elements are protected by
which locks (as far as scheduling is concerned). Is there somewhere a
paper summarizing the mutual exclusion rules ?

Let's take some code e.g. from the 2.6.5 kernel:

set_cpus_allowed(task_t *p, cpumask_t new_mask):

	rq = task_rq_lock(p, &flags)
	__set_cpus_allowed(p, new_mask, &req):

		p->cpus_allowed = new_mask
		/*
		 * If the task is not on a runqueue (and not running), then
		 * it is sufficient to simply update the task's cpu field.
		 */
		if (!p->array && !task_running(rq, p))
			set_task_cpu(p, any_online_cpu(p->cpus_allowed))
		/* ... */

	task_rq_unlock(rq, &flags)

Apparently, the "p->cpus_allowed" and the "p->thread_info->cpu" fields
are protected by the "(&per_cpu(runqueues, (p->thread_info->cpu)))->lock".

Which are the other task structure elements protected by the same lock ?

Let's take an example:

- I've got a sleeping task that ran on the CPU #3 previously
- I want to set its CPU mask equal to {1, 2}
- I take the lock of the run queue #3
- I do set the CPU mask of the task
- It's not running (BTW when can happen that "p->array" is NULL and the
  task is still running ?)
- I do set the task's CPU e.g. equal to 2. As a consequence, the task
  falls out of the protection provided by the lock of the run queue #3.
- Someone else deciding to play with the same task, s/he takes the
  lock of the run queue #2 !!!
- Me, I have not arrived yet to the unlock. There are stuffs to do before.
- Both of us think to have the exclusive access right to the task...

Can someone explain me, please, why I have to take a run queue lock
to protect a not running task, and why we do not use "proc_lock"
instead ?

Thanks,

Zoltán Menyhárt

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2004-06-16  9:57 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-06-04 15:10 Scheduler questions Zoltan Menyhart
2004-06-16  9:36 ` VM validation question Zoltan Menyhart
2004-06-16  9:57   ` William Lee Irwin III
2004-06-16  9:54 ` Scheduler questions William Lee Irwin III

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox