Module Name: src Committed By: jym Date: Tue Jun 5 22:28:11 UTC 2012
Modified Files: src/sys/kern: subr_pool.c Log Message: As pool reclaiming is unlikely to happen at interrupt or softint context, re-enable the portion of code that allows invalidation of CPU-bound pool caches. Two reasons: - CPU cached objects being invalidated, the probability of fetching an obsolete object from the pool_cache(9) is greatly reduced. This speeds up pool_cache_get() quite a bit as it does not have to keep destroying objects until it finds an updated one when an invalidation is in progress. - for situations where we have to ensure that no obsolete object remains after a state transition (canonical example: pmap mappings between Xen VM restoration), invalidating all pool_cache(9) is the safest way to go. As it uses xcall(9) to broadcast the execution of pool_cache_transfer(), pool_cache_invalidate() cannot be called from interrupt or softint context (scheduling a xcall(9) can put a LWP to sleep). pool_cache_xcall() => pool_cache_transfer() to reflect its use. Invalidation being a costly process (1000s objects may be destroyed), all places where pool_cache_invalidate() may be called from interrupt/softint context will now get caught by the proper KASSERT(), and fixed. Ping me when you see one. Tested under i386 and amd64 by running ATF suite within 64MiB HVM domains (tried triggering pgdaemon a few times). No objection on tech-kern@. XXX a similar fix has to be pulled up to NetBSD-6, but with a more conservative approach. See http://mail-index.netbsd.org/tech-kern/2012/05/29/msg013245.html To generate a diff of this commit: cvs rdiff -u -r1.195 -r1.196 src/sys/kern/subr_pool.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.