Subject: Re: percpu storage allocator
To: YAMAMOTO Takashi <yamt@mwd.biglobe.ne.jp>
From: Andrew Doran <ad@netbsd.org>
List: tech-kern
Date: 12/18/2007 16:01:33
On Mon, Nov 12, 2007 at 09:38:02PM +0000, Andrew Doran wrote:

> I think you could get away with not taking the rwlock in the cross call
> thread by deferring the lock to percpu_cpu_enlarge():
> 
> 	if (pcc.pcc_data != NULL) {
> 		rw_enter(&percpu_swap_lock, RW_WRITER);
> 		/* Ensures old value of pcc_data is no longer used. */
> 		rw_exit(&percpu_swap_lock);
> 		kmem_free(pcc.pcc_data, pcc.pcc_size);
> 	}
> 
> Threads traversing will see either old or new values, but in either case the
> pointer dereference will be safe. It may not be worth it; if so we should
> probably document that threads doing a traversal should be careful not to
> delay the xcall thread.

It occurred to me that won't work if setting an initial value for a new object.

Thanks,
Andrew