Re: 2.3 Pagedir allocation/free and update races

David S. Miller (davem@redhat.com)
Tue, 14 Dec 1999 15:08:02 -0800


From: kanoj@google.engr.sgi.com (Kanoj Sarcar)
Date: Tue, 14 Dec 1999 15:00:19 -0800 (PST)

Yes, I am sorry for the misleading logic in my note. Per-cpu caches are
safe (I wonder why it was taken out for i386). For architectures that
have to do set_pgdir() though, the pgdir update code might be racy,
unless the arch code has locks to protect the page directory scanning.

Btw, Linus indicated to me he ran into problems with the patch, and
will be pulling it out in the next pre-release. I will take a closer look
at the code.

Just handle the set_pgdir() stuff like this:

pgcache_update_flag = 0;
smp_call_func(ALL_CPUS, update_pgcaches_and_wait_on_flag);
update_local_pgcache();
pgcache_update_flag = 1;
for_each_task(tsk)
update_pgdir(tsk);

That should give the correct synchronization with zero cost
for the fast normal paths which can rely solely on the cpu
localness of the data structure.

Later,
David S. Miller
davem@redhat.com

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/