Here is the code to do the actual relocation. I believe there is a race in this version of the code. If the relocation code sleeps while allocating memory and the rcu code frees the old page tables before the tlbflush, then if another cpu is running the process in user space, the page tables could be corrupted. Not really a big deal, but it needs to be fixed. Probably by not scheduling the rcu free until after all the page tables have been relocated. Ross