Up to [cvs.NetBSD.org] / src / sys / kern
Request diff between arbitrary revisions
Default branch: MAIN
Current tag: netbsd-1-4-base
Revision 1.21 / (download) - annotate - [select for diffs], Wed Mar 31 23:23:48 1999 UTC (14 years, 1 month ago) by thorpej
Branch: MAIN
CVS Tags: netbsd-1-4-base
Branch point for: netbsd-1-4
Changes since 1.20: +185 -124
lines
Diff to previous 1.20 (colored)
Yet more fixes to the pool allocator: - Protect userspace from unnecessary header inclusions (as noted on current-users). - Some const poisioning. - GREATLY simplify the locking protocol, and fix potential deadlock scenarios. In particular, assume that the back-end page allocator provides its own locking mechanism (this is currently true for all such allocators in the NetBSD kernel). Doing so allows us to simply use one spin lock for serialized access to all r/w members of the pool descriptor. The spin lock is released before calling the back-end allocator, and re-acquired upon return from it. - Fix a problem in pr_rmpage() where a data structure was referenced after it was freed. - Minor tweak to page manaement. Migrate both idle and empty pages to the end of the page list. As soon as a page becomes un-empty (by a pool_put()), place it at the head of the page list, and set curpage to point to it. This reduces fragmentation as well as the time required to find a non-empty page as soon as curpage becomes empty again. - Use mono_time throughout, and protect access to it w/ splclock(). - In pool_reclaim(), if freeing an idle page would reduce the number of allocatable items to below the low water mark, don't.