> Date: Tue, 21 Dec 2021 18:19:56 -0800 > From: Jason Thorpe <thor...@me.com> > > An #ifdef that Taylor added in the new DRM code was bugging me, > because a similar situation already existed in the NetBSD kernel, > whereby the type stability of a object's backing memory (the iam > existentium case being LWPs) was required for a passively-serialized > weak reference to work. The LWP pool cache had a hack to handle it, > and the hack was propagated to the new DRM code under an ``#ifdef > __NetBSD_''. > > I initially fixed this by adding a ``pre-destruct'' callback that > could be optionally set for a pool cache, but after further > discussion, it seemed like having direct knowledge of passive > serialization synchronization points in the allocator was a better > solution, so here is a diff that implements it for you review. > > https://www.netbsd.org/~thorpej/pool-pser-diff.txt
Thanks, I think this API is better. It will be important to emphasize in the man page that this guarantees a pserialize_perform/xc_barrier(0)/RCU grace period between pool_cache_put and calling the dtor before returning the pages to the backing store -- _not_ between pool_cache_put and the next pool_cache_get that yields the object returned by pool_cache_put for reuse. Same with pool_put and calling the pool allocator's free function -- _not_ pool_put and pool_get. Might also be worth noting that PR_PSERIALIZE implies pool_put and pool_cache_put are allowed only in sleepable thread context -- absolutely not in soft interrupt context, let alone hard interrupt context.