#
1.80 |
|
25-Oct-2020 |
chs |
Handle PG_PAGEOUT in uvm_anon_release() too.
|
#
1.79 |
|
09-Jul-2020 |
skrll |
Consistently use UVMHIST(__func__)
Convert UVMHIST_{CALLED,LOG} into UVMHIST_CALLARGS
|
#
1.78 |
|
08-Jul-2020 |
skrll |
Trailing whitespace
|
Revision tags: bouyer-xenpvh-base2 phil-wifi-20200421 bouyer-xenpvh-base1 phil-wifi-20200411 bouyer-xenpvh-base phil-wifi-20200406
|
#
1.77 |
|
22-Mar-2020 |
ad |
Process concurrent page faults on individual uvm_objects / vm_amaps in parallel, where the relevant pages are already in-core. Proposed on tech-kern.
Temporarily disabled on MP architectures with __HAVE_UNLOCKED_PMAP until adjustments are made to their pmaps.
|
#
1.76 |
|
20-Mar-2020 |
ad |
Go back to freeing struct vm_anon one by one. There may have been an advantage circa ~2008 but there isn't now.
|
#
1.75 |
|
14-Mar-2020 |
ad |
Make page waits (WANTED vs BUSY) interlocked by pg->interlock. Gets RW locks out of the equation for sleep/wakeup, and allows observing+waiting for busy pages when holding only a read lock. Proposed on tech-kern.
|
Revision tags: is-mlppp-base ad-namecache-base3
|
#
1.74 |
|
24-Feb-2020 |
rin |
0x%#x --> %#x for non-external codes. Also, stop mixing up 0x%x and %#x in single files as far as possible.
|
#
1.73 |
|
23-Feb-2020 |
ad |
Use rw_lock_op().
|
#
1.72 |
|
23-Feb-2020 |
ad |
UVM locking changes, proposed on tech-kern:
- Change the lock on uvm_object, vm_amap and vm_anon to be a RW lock. - Break v_interlock and vmobjlock apart. v_interlock remains a mutex. - Do partial PV list locking in the x86 pmap. Others to follow later.
|
Revision tags: ad-namecache-base2 ad-namecache-base1
|
#
1.71 |
|
15-Jan-2020 |
ad |
Merge from yamt-pagecache (after much testing):
- Reduce unnecessary page scan in putpages esp. when an object has a ton of pages cached but only a few of them are dirty.
- Reduce the number of pmap operations by tracking page dirtiness more precisely in uvm layer.
|
Revision tags: ad-namecache-base
|
#
1.70 |
|
31-Dec-2019 |
ad |
branches: 1.70.2; - Add and use wrapper functions that take and acquire page interlocks, and pairs of page interlocks. Require that the page interlock be held over calls to uvm_pageactivate(), uvm_pagewire() and similar.
- Solve the concurrency problem with page replacement state. Rather than updating the global state synchronously, set an intended state on individual pages (active, inactive, enqueued, dequeued) while holding the page interlock. After the interlock is released put the pages on a 128 entry per-CPU queue for their state changes to be made real in batch. This results in in a ~400 fold decrease in contention on my test system. Proposed on tech-kern but modified to use the page interlock rather than atomics to synchronise as it's much easier to maintain that way, and cheaper.
|
#
1.69 |
|
13-Dec-2019 |
ad |
Break the global uvm_pageqlock into a per-page identity lock and a private lock for use of the pagedaemon policy code. Discussed on tech-kern.
PR kern/54209: NetBSD 8 large memory performance extremely low PR kern/54210: NetBSD-8 processes presumably not exiting PR kern/54727: writing a large file causes unreasonable system behaviour
|
#
1.68 |
|
02-Dec-2019 |
chs |
fix the build for when UVMHIST is enabled.
|
#
1.67 |
|
01-Dec-2019 |
uwe |
Add missing #include <sys/atomic.h>
|
#
1.66 |
|
01-Dec-2019 |
ad |
Free pages in batch instead of taking uvm_pageqlock for each one.
|
#
1.65 |
|
01-Dec-2019 |
ad |
- Adjust uvmexp.swpgonly with atomics, and make uvm_swap_data_lock static. - A bit more __cacheline_aligned on mutexes.
|
Revision tags: netbsd-9-1-RELEASE netbsd-9-0-RELEASE netbsd-9-0-RC2 netbsd-9-0-RC1 phil-wifi-20191119 netbsd-9-base phil-wifi-20190609 isaki-audio2-base pgoyette-compat-merge-20190127 pgoyette-compat-20190127 pgoyette-compat-20190118 pgoyette-compat-1226 pgoyette-compat-1126 pgoyette-compat-1020 pgoyette-compat-0930 pgoyette-compat-0906 pgoyette-compat-0728 phil-wifi-base pgoyette-compat-0625 pgoyette-compat-0521 pgoyette-compat-0502 pgoyette-compat-0422 pgoyette-compat-0415 pgoyette-compat-0407 pgoyette-compat-0330 pgoyette-compat-0322 pgoyette-compat-0315 pgoyette-compat-base tls-maxphys-base-20171202
|
#
1.64 |
|
28-Oct-2017 |
pgoyette |
branches: 1.64.4; Update the kernhist(9) kernel history code to address issues identified in PR kern/52639, as well as some general cleaning-up...
(As proposed on tech-kern@ with additional changes and enhancements.)
Details of changes:
* All history arguments are now stored as uintmax_t values[1], both in the kernel and in the structures used for exporting the history data to userland via sysctl(9). This avoids problems on some architectures where passing a 64-bit (or larger) value to printf(3) can cause it to process the value as multiple arguments. (This can be particularly problematic when printf()'s format string is not a literal, since in that case the compiler cannot know how large each argument should be.)
* Update the data structures used for exporting kernel history data to include a version number as well as the length of history arguments.
* All [2] existing users of kernhist(9) have had their format strings updated. Each format specifier now includes an explicit length modifier 'j' to refer to numeric values of the size of uintmax_t.
* All [2] existing users of kernhist(9) have had their format strings updated to replace uses of "%p" with "%#jx", and the pointer arguments are now cast to (uintptr_t) before being subsequently cast to (uintmax_t). This is needed to avoid compiler warnings about casting "pointer to integer of a different size."
* All [2] existing users of kernhist(9) have had instances of "%s" or "%c" format strings replaced with numeric formats; several instances of mis-match between format string and argument list have been fixed.
* vmstat(1) has been modified to handle the new size of arguments in the history data as exported by sysctl(9).
* vmstat(1) now provides a warning message if the history requested with the -u option does not exist (previously, this condition was silently ignored, with only a single blank line being printed).
* vmstat(1) now checks the version and argument length included in the data exported via sysctl(9) and exits if they do not match the values with which vmstat was built.
* The kernhist(9) man-page has been updated to note the additional requirements imposed on the format strings, along with several other minor changes and enhancements.
[1] It would have been possible to use an explicit length (for example, uint64_t) for the history arguments. But that would require another "rototill" of all the users in the future when we add support for an architecture that supports a larger size. Also, the printf(3) format specifiers for explicitly-sized values, such as "%"PRIu64, are much more verbose (and less aesthetically appealing, IMHO) than simply using "%ju".
[2] I've tried very hard to find "all [the] existing users of kernhist(9)" but it is possible that I've missed some of them. I would be glad to update any stragglers that anyone identifies.
|
Revision tags: netbsd-7-2-RELEASE netbsd-7-1-2-RELEASE netbsd-7-1-1-RELEASE nick-nhusb-base-20170825 perseant-stdc-iso10646-base netbsd-8-base prg-localcount2-base3 prg-localcount2-base2 prg-localcount2-base1 prg-localcount2-base pgoyette-localcount-20170426 bouyer-socketcan-base1 jdolecek-ncq-base pgoyette-localcount-20170320 netbsd-7-1-RELEASE netbsd-7-1-RC2 nick-nhusb-base-20170204 netbsd-7-nhusb-base-20170116 bouyer-socketcan-base pgoyette-localcount-20170107 netbsd-7-1-RC1 nick-nhusb-base-20161204 pgoyette-localcount-20161104 netbsd-7-0-2-RELEASE nick-nhusb-base-20161004 localcount-20160914 netbsd-7-nhusb-base pgoyette-localcount-20160806 pgoyette-localcount-20160726 pgoyette-localcount-base nick-nhusb-base-20160907 nick-nhusb-base-20160529 netbsd-7-0-1-RELEASE nick-nhusb-base-20160422 nick-nhusb-base-20160319 nick-nhusb-base-20151226 netbsd-7-0-RELEASE nick-nhusb-base-20150921 netbsd-7-0-RC3 netbsd-7-0-RC2 netbsd-7-0-RC1 nick-nhusb-base-20150606 nick-nhusb-base-20150406 nick-nhusb-base netbsd-7-base yamt-pagecache-base9 tls-earlyentropy-base riastradh-xf86-video-intel-2-7-1-pre-2-21-15 riastradh-drm2-base3 rmind-smpnet-nbase rmind-smpnet-base tls-maxphys-base
|
#
1.63 |
|
25-Oct-2013 |
martin |
branches: 1.63.22; Mark a diagnostic-only variable
|
Revision tags: netbsd-6-0-6-RELEASE netbsd-6-1-5-RELEASE netbsd-6-1-4-RELEASE netbsd-6-0-5-RELEASE netbsd-6-1-3-RELEASE netbsd-6-0-4-RELEASE netbsd-6-1-2-RELEASE netbsd-6-0-3-RELEASE netbsd-6-1-1-RELEASE riastradh-drm2-base2 riastradh-drm2-base1 riastradh-drm2-base netbsd-6-0-2-RELEASE netbsd-6-1-RELEASE netbsd-6-1-RC4 netbsd-6-1-RC3 agc-symver-base netbsd-6-1-RC2 netbsd-6-1-RC1 yamt-pagecache-base8 netbsd-6-0-1-RELEASE yamt-pagecache-base7 matt-nb6-plus-nbase yamt-pagecache-base6 netbsd-6-0-RELEASE netbsd-6-0-RC2 matt-nb6-plus-base netbsd-6-0-RC1 jmcneill-usbmp-base10 yamt-pagecache-base5 jmcneill-usbmp-base9 yamt-pagecache-base4 jmcneill-usbmp-base8 jmcneill-usbmp-base7 jmcneill-usbmp-base6 jmcneill-usbmp-base5 jmcneill-usbmp-base4 jmcneill-usbmp-base3 jmcneill-usbmp-pre-base2 jmcneill-usbmp-base2 netbsd-6-base jmcneill-usbmp-base jmcneill-audiomp3-base yamt-pagecache-base3 yamt-pagecache-base2 yamt-pagecache-base
|
#
1.62 |
|
18-Aug-2011 |
yamt |
branches: 1.62.2; 1.62.12; 1.62.16; uvm_anon_release: - don't forget to call uvm_anon_dispose. - simplify code a little.
|
#
1.61 |
|
18-Aug-2011 |
yamt |
uvm_anon_freelst: - clear an_link/an_ref when deferring anon disposal. otherwise others can see bogus an_ref. - fix the code to remove anon from the list.
|
#
1.60 |
|
14-Aug-2011 |
rmind |
uvm_anon_freelst: do not free PG_RELEASED pages (change uvm_anon_dispose() to indicate them with a return value).
|
#
1.59 |
|
06-Aug-2011 |
rmind |
- Rework uvm_anfree() into uvm_anon_freelst(), which always drops the lock. - Free anons in uvm_anon_freelst() without lock held. - Mechanic sync to unused loaning code.
|
#
1.58 |
|
05-Jul-2011 |
yamt |
reduce the number of atomic ops in common cases. it's exceptional for anons to remain longer than amap.
|
#
1.57 |
|
24-Jun-2011 |
rmind |
Fix uvmplock regression - a lock against oneself case in amap_swap_off(). Happens since amap is NULL in uvmfault_anonget(), so uvmfault_unlockall() keeps anon locked, when it should unlock it.
|
#
1.56 |
|
24-Jun-2011 |
yamt |
uvm_anon_release: fix a locking error after the rmind-uvmplock merge
|
#
1.55 |
|
17-Jun-2011 |
rmind |
Improve comments on uvm_anon.c, tidy up slightly. No functional changes.
|
#
1.54 |
|
12-Jun-2011 |
rmind |
Welcome to 5.99.53! Merge rmind-uvmplock branch:
- Reorganize locking in UVM and provide extra serialisation for pmap(9). New lock order: [vmpage-owner-lock] -> pmap-lock.
- Simplify locking in some pmap(9) modules by removing P->V locking.
- Use lock object on vmobjlock (and thus vnode_t::v_interlock) to share the locks amongst UVM objects where necessary (tmpfs, layerfs, unionfs).
- Rewrite and optimise x86 TLB shootdown code, make it simpler and cleaner. Add TLBSTATS option for x86 to collect statistics about TLB shootdowns.
- Unify /dev/mem et al in MI code and provide required locking (removes kernel-lock on some ports). Also, avoid cache-aliasing issues.
Thanks to Andrew Doran and Joerg Sonnenberger, as their initial patches formed the core changes of this branch.
|
Revision tags: rmind-uvmplock-nbase cherry-xenmp-base rmind-uvmplock-base
|
#
1.53 |
|
23-Apr-2011 |
rmind |
branches: 1.53.2; Replace "malloc" in comments, remove unnecessary header inclusions.
|
Revision tags: uebayasi-xip-base7 bouyer-quota2-nbase bouyer-quota2-base
|
#
1.52 |
|
02-Feb-2011 |
chuck |
udpate license clauses on my code to match the new-style BSD licenses. based on diff that rmind@ sent me.
no functional change with this commit.
|
Revision tags: netbsd-5-2-3-RELEASE netbsd-5-1-5-RELEASE netbsd-5-2-2-RELEASE netbsd-5-1-4-RELEASE netbsd-5-2-1-RELEASE netbsd-5-1-3-RELEASE netbsd-5-2-RELEASE netbsd-5-2-RC1 netbsd-5-1-2-RELEASE netbsd-5-1-1-RELEASE jruoho-x86intr-base matt-mips64-premerge-20101231 matt-nb5-mips64-premerge-20101231 matt-nb5-pq3-base uebayasi-xip-base6 uebayasi-xip-base5 netbsd-5-1-RELEASE uebayasi-xip-base4 uebayasi-xip-base3 yamt-nfs-mp-base11 netbsd-5-1-RC4 matt-nb5-mips64-k15 uebayasi-xip-base2 yamt-nfs-mp-base10 netbsd-5-1-RC3 netbsd-5-1-RC2 uebayasi-xip-base1 netbsd-5-1-RC1 yamt-nfs-mp-base9 uebayasi-xip-base netbsd-5-0-2-RELEASE matt-nb5-mips64-premerge-20091211 matt-premerge-20091211 yamt-nfs-mp-base8 matt-nb5-mips64-u2-k2-k4-k7-k8-k9 matt-nb4-mips64-k7-u2a-k9b matt-nb5-mips64-u1-k1-k5 yamt-nfs-mp-base7 netbsd-5-0-1-RELEASE jymxensuspend-base yamt-nfs-mp-base6 yamt-nfs-mp-base5 yamt-nfs-mp-base4 jym-xensuspend-nbase yamt-nfs-mp-base3 nick-hppapmap-base4 nick-hppapmap-base3 netbsd-5-0-RELEASE netbsd-5-0-RC4 netbsd-5-0-RC3 nick-hppapmap-base2 netbsd-5-0-RC2 jym-xensuspend-base netbsd-5-0-RC1 haad-dm-base2 haad-nbase2 ad-audiomp2-base netbsd-5-base nick-hppapmap-base matt-mips64-base2 haad-dm-base1 wrstuden-revivesa-base-4 wrstuden-revivesa-base-3 wrstuden-revivesa-base-2 haad-dm-base wrstuden-revivesa-base-1 simonb-wapbl-nbase yamt-pf42-base4 simonb-wapbl-base yamt-pf42-base3 hpcarm-cleanup-nbase yamt-pf42-baseX yamt-pf42-base2 yamt-nfs-mp-base2 wrstuden-revivesa-base yamt-nfs-mp-base yamt-pf42-base ad-socklock-base1 yamt-lazymbuf-base15 yamt-lazymbuf-base14 keiichi-mipv6-nbase mjf-devfs2-base nick-net80211-sync-base keiichi-mipv6-base bouyer-xeni386-nbase bouyer-xeni386-base matt-armv6-nbase mjf-devfs-base hpcarm-cleanup-base
|
#
1.51 |
|
18-Jan-2008 |
yamt |
branches: 1.51.28; 1.51.32; 1.51.38; 1.51.40; push pmap_clear_reference calls into pdpolicy code, where reference bits actually matter.
|
Revision tags: matt-armv6-base
|
#
1.50 |
|
02-Jan-2008 |
ad |
Merge vmlocking2 to head.
|
Revision tags: vmlocking2-base3
|
#
1.49 |
|
20-Dec-2007 |
ad |
Specify PR_LARGECACHE for anon_cache (which is insanely busy).
|
Revision tags: yamt-kmem-base3 cube-autoconf-base yamt-kmem-base2 yamt-kmem-base vmlocking2-base2 reinoud-bufcleanup-nbase vmlocking2-base1 bouyer-xenamd64-base2 vmlocking-nbase bouyer-xenamd64-base jmcneill-pm-base reinoud-bufcleanup-base
|
#
1.48 |
|
13-Nov-2007 |
yamt |
branches: 1.48.2; 1.48.6; g/c unused uvm_anon_pool.
|
#
1.47 |
|
07-Nov-2007 |
ad |
Merge from vmlocking:
- pool_cache changes. - Debugger/procfs locking fixes. - Other minor changes.
|
Revision tags: jmcneill-base yamt-x86pmap-base4 yamt-x86pmap-base3 vmlocking-base
|
#
1.46 |
|
11-Oct-2007 |
ad |
branches: 1.46.2; 1.46.4; Remove LOCK_ASSERT(!simple_lock_held(&foo));
|
Revision tags: nick-csl-alignment-base5 yamt-x86pmap-base2 yamt-x86pmap-base matt-mips64-base
|
#
1.45 |
|
21-Jul-2007 |
ad |
branches: 1.45.4; 1.45.6; 1.45.8; 1.45.10; Merge unobtrusive locking changes from the vmlocking branch.
|
Revision tags: nick-csl-alignment-base yamt-idlelwp-base8 thorpej-atomic-base mjf-ufs-trans-base
|
#
1.44 |
|
12-Mar-2007 |
ad |
branches: 1.44.8; Pass an ipl argument to pool_init/POOL_INIT to be used when initializing the pool's lock.
|
Revision tags: ad-audiomp-base
|
#
1.43 |
|
22-Feb-2007 |
thorpej |
branches: 1.43.4; TRUE -> true, FALSE -> false
|
#
1.42 |
|
21-Feb-2007 |
thorpej |
Replace the Mach-derived boolean_t type with the C99 bool type. A future commit will replace use of TRUE and FALSE with true and false.
|
Revision tags: netbsd-4-0-1-RELEASE wrstuden-fixsa-newbase wrstuden-fixsa-base-1 netbsd-4-0-RELEASE netbsd-4-0-RC5 matt-nb4-arm-base netbsd-4-0-RC4 netbsd-4-0-RC3 netbsd-4-0-RC2 netbsd-4-0-RC1 wrstuden-fixsa-base post-newlock2-merge newlock2-nbase yamt-splraiseipl-base5 yamt-splraiseipl-base4 yamt-splraiseipl-base3 newlock2-base netbsd-4-base
|
#
1.41 |
|
01-Nov-2006 |
yamt |
branches: 1.41.4; remove some __unused from function parameters.
|
Revision tags: yamt-splraiseipl-base2
|
#
1.40 |
|
12-Oct-2006 |
christos |
- sprinkle __unused on function decls. - fix a couple of unused bugs - no more -Wno-unused for i386
|
Revision tags: yamt-splraiseipl-base
|
#
1.39 |
|
15-Sep-2006 |
yamt |
branches: 1.39.2; merge yamt-pdpolicy branch. - separate page replacement policy from the rest of kernel - implement an alternative replacement policy
|
Revision tags: abandoned-netbsd-4-base yamt-pdpolicy-base9 yamt-pdpolicy-base8 yamt-pdpolicy-base7 yamt-pdpolicy-base6 chap-midi-nbase gdamore-uart-base simonb-timcounters-final yamt-pdpolicy-base5 chap-midi-base yamt-pdpolicy-base4 yamt-pdpolicy-base3 peter-altq-base yamt-pdpolicy-base2 elad-kernelauth-base yamt-pdpolicy-base yamt-uio_vmspace-base5 simonb-timecounters-base rpaulo-netinet-merge-pcb-base
|
#
1.38 |
|
11-Dec-2005 |
christos |
branches: 1.38.8; 1.38.20; merge ktrace-lwp.
|
Revision tags: yamt-readahead-base3 yamt-readahead-base2 yamt-readahead-pervnode yamt-readahead-perfile yamt-readahead-base yamt-vop-base3 yamt-vop-base2 thorpej-vnode-attr-base yamt-vop-base ktrace-lwp-base
|
#
1.37 |
|
13-Sep-2005 |
yamt |
wrap swap related code by #ifdef VMSWAP. always #define VMSWAP for now.
|
#
1.36 |
|
31-Jul-2005 |
yamt |
revert "defflag VMSWAP" changes for now. there seems to be far more people who don't want to edit their kernel config files than i thought.
|
#
1.35 |
|
30-Jul-2005 |
yamt |
defflag VMSWAP.
|
#
1.34 |
|
27-Jun-2005 |
thorpej |
branches: 1.34.2; Use ANSI function decls.
|
#
1.33 |
|
11-May-2005 |
yamt |
allocate anons on-demand, rather than reserving static amount of them on boot/swapon.
|
Revision tags: kent-audio2-base
|
#
1.32 |
|
01-Apr-2005 |
yamt |
merge yamt-km branch. - don't use managed mappings/backing objects for wired memory allocations. save some resources like pv_entry. also fix (most of) PR/27030. - simplify kernel memory management API. - simplify pmap bootstrap of some ports. - some related cleanups.
|
Revision tags: netbsd-3-1-1-RELEASE netbsd-3-0-3-RELEASE netbsd-3-1-RELEASE netbsd-3-0-2-RELEASE netbsd-3-1-RC4 netbsd-3-1-RC3 netbsd-3-1-RC2 netbsd-3-1-RC1 netbsd-3-0-1-RELEASE netbsd-3-0-RELEASE netbsd-3-0-RC6 netbsd-3-0-RC5 netbsd-3-0-RC4 netbsd-3-0-RC3 netbsd-3-0-RC2 netbsd-3-0-RC1 yamt-km-base4 yamt-km-base3 netbsd-3-base yamt-km-base2 yamt-km-base kent-audio1-beforemerge kent-audio1-base
|
#
1.31 |
|
01-Sep-2004 |
yamt |
branches: 1.31.4; 1.31.6; uvm_pagefree: when orphaning an A->K loaned page, - decrement uvmexp.anonpages as it's no longer an anon page. - null out anon->u.an_page as the anon no longer own the page. uvm_anfree: add related assertions.
|
#
1.30 |
|
01-Sep-2004 |
yamt |
uvm_anfree: remove a comment which is no longer true.
|
#
1.29 |
|
05-May-2004 |
yamt |
fix a amap_wirerange deadlock problem by re-introducing PG_RELEASED for anon pages. PR/23171 from Christian Limpach. for details, see discussion filed in the PR database.
uvm_anon_release: a new function to free anon-owned PG_RELEASED page. uvm_anfree: we can't wait for the page here because the caller might hold amap lock. instead, just mark the page as PG_RELEASED. who unbusy the page should check the PG_RELEASED. uvm_aio_aiodone: uvm_anon_release() instead of uvm_page_unbusy() if appropriate. uvmfault_anonget: check PG_RELEASED.
|
Revision tags: netbsd-2-0-base
|
#
1.28 |
|
24-Mar-2004 |
junyoung |
branches: 1.28.2; Nuke __P().
|
#
1.27 |
|
06-Jan-2004 |
chs |
fix lock initialization in uvm_anon_add(). from PR 23831.
|
#
1.26 |
|
28-Aug-2003 |
pk |
When retiring a swap device with marked bad blocks on it we should update the `# swap page in use' and `# swap page only' counters. However, at the time of swap device removal we can no longer figure out how many of the bad swap pages are actually also `swap only' pages.
So, on swap I/O errors arrange things to not include the bad swap pages in the `swpgonly' counter as follows: uvm_swap_markbad() decrements `swpgonly' by the number of bad pages, and the various VM object deallocation routines do not decrement `swpgonly' for swap slots marked as SWSLOT_BAD.
|
#
1.25 |
|
11-Aug-2003 |
pk |
uao_pagein_page() & anon_pagein(): * return failure if the page cannot be retrieved. * wakeup any waiters when releasing a page after successful page in.
|
#
1.24 |
|
11-Aug-2003 |
pk |
Only deactivate pages if their wired count is zero.
|
#
1.23 |
|
11-Aug-2003 |
pk |
Make sure to call uvm_swap_free() and uvm_swap_markbad() with valid (i.e. positive) slot numbers.
|
Revision tags: nathanw_sa_before_merge fvdl_fs64_base gmcgarry_ctxsw_base gmcgarry_ucred_base nathanw_sa_base kqueue-aftermerge kqueue-beforemerge kqueue-base
|
#
1.22 |
|
21-Sep-2002 |
chs |
branches: 1.22.6; add missing anon lock around call to uvm_anon_lockloanpg().
|
Revision tags: netbsd-1-6-PATCH002-RELEASE netbsd-1-6-PATCH002 netbsd-1-6-PATCH002-RC4 netbsd-1-6-PATCH002-RC3 netbsd-1-6-PATCH002-RC2 netbsd-1-6-PATCH002-RC1 netbsd-1-6-PATCH001 netbsd-1-6-PATCH001-RELEASE netbsd-1-6-PATCH001-RC3 netbsd-1-6-PATCH001-RC2 netbsd-1-6-PATCH001-RC1 netbsd-1-6-RELEASE netbsd-1-6-RC3 netbsd-1-6-RC2 netbsd-1-6-RC1 netbsd-1-6-base gehenna-devsw-base eeh-devprop-base newlock-base ifpoll-base thorpej-mips-cache-base
|
#
1.21 |
|
10-Nov-2001 |
lukem |
branches: 1.21.4; add RCSIDs, and in some cases, slightly cleanup #include order
|
#
1.20 |
|
06-Nov-2001 |
chs |
several changes prompted by loaning problems: - fix the loaned case in uvm_pagefree(). - redo uvmexp.swpgonly accounting to work with page loaning. add an assertion before each place we adjust uvmexp.swpgonly. - fix uvm_km_pgremove() to always free any swap space associated with the range being removed. - get rid of UVM_LOAN_WIRED flag. instead, we just make sure that pages loaned to the kernel are never on the page queues. this allows us to assert that pages are not loaned and wired at the same time. - add yet more assertions.
|
#
1.19 |
|
21-Oct-2001 |
chs |
branches: 1.19.2; add some missing spinlocks.
|
Revision tags: thorpej-devvp-base3 thorpej-devvp-base2 post-chs-ubcperf
|
#
1.18 |
|
15-Sep-2001 |
chs |
a whole bunch of changes to improve performance and robustness under load:
- remove special treatment of pager_map mappings in pmaps. this is required now, since I've removed the globals that expose the address range. pager_map now uses pmap_kenter_pa() instead of pmap_enter(), so there's no longer any need to special-case it. - eliminate struct uvm_vnode by moving its fields into struct vnode. - rewrite the pageout path. the pager is now responsible for handling the high-level requests instead of only getting control after a bunch of work has already been done on its behalf. this will allow us to UBCify LFS, which needs tighter control over its pages than other filesystems do. writing a page to disk no longer requires making it read-only, which allows us to write wired pages without causing all kinds of havoc. - use a new PG_PAGEOUT flag to indicate that a page should be freed on behalf of the pagedaemon when it's unlocked. this flag is very similar to PG_RELEASED, but unlike PG_RELEASED, PG_PAGEOUT can be cleared if the pageout fails due to eg. an indirect-block buffer being locked. this allows us to remove the "version" field from struct vm_page, and together with shrinking "loan_count" from 32 bits to 16, struct vm_page is now 4 bytes smaller. - no longer use PG_RELEASED for swap-backed pages. if the page is busy because it's being paged out, we can't release the swap slot to be reallocated until that write is complete, but unlike with vnodes we don't keep a count of in-progress writes so there's no good way to know when the write is done. instead, when we need to free a busy swap-backed page, just sleep until we can get it busy ourselves. - implement a fast-path for extending writes which allows us to avoid zeroing new pages. this substantially reduces cpu usage. - encapsulate the data used by the genfs code in a struct genfs_node, which must be the first element of the filesystem-specific vnode data for filesystems which use genfs_{get,put}pages(). - eliminate many of the UVM pagerops, since they aren't needed anymore now that the pager "put" operation is a higher-level operation. - enhance the genfs code to allow NFS to use the genfs_{get,put}pages instead of a modified copy. - clean up struct vnode by removing all the fields that used to be used by the vfs_cluster.c code (which we don't use anymore with UBC). - remove kmem_object and mb_object since they were useless. instead of allocating pages to these objects, we now just allocate pages with no object. such pages are mapped in the kernel until they are freed, so we can use the mapping to find the page to free it. this allows us to remove splvm() protection in several places.
The sum of all these changes improves write throughput on my decstation 5000/200 to within 1% of the rate of NetBSD 1.5 and reduces the elapsed time for "make release" of a NetBSD 1.5 source tree on my 128MB pc to 10% less than a 1.5 kernel took.
|
Revision tags: pre-chs-ubcperf thorpej-devvp-base
|
#
1.17 |
|
25-May-2001 |
chs |
branches: 1.17.2; 1.17.4; remove trailing whitespace.
|
Revision tags: thorpej_scsipi_beforemerge thorpej_scsipi_nbase thorpej_scsipi_base
|
#
1.16 |
|
10-Mar-2001 |
chs |
eliminate the VM_PAGER_* error codes in favor of the traditional E* codes. the mapping is:
VM_PAGER_OK 0 VM_PAGER_BAD <unused> VM_PAGER_FAIL <unused> VM_PAGER_PEND 0 (see below) VM_PAGER_ERROR EIO VM_PAGER_AGAIN EAGAIN VM_PAGER_UNLOCK EBUSY VM_PAGER_REFAULT ERESTART
for async i/o requests, it used to be possible for the request to be convert to sync, and the pager would return VM_PAGER_OK or VM_PAGER_PEND to indicate whether the caller should perform post-i/o cleanup. this is no longer allowed; pagers must now return 0 to indicate that the async i/o was successfully started, and the caller never needs to worry about doing the post-i/o cleanup.
|
#
1.15 |
|
18-Feb-2001 |
chs |
branches: 1.15.2; clean up DIAGNOSTIC checks, use KASSERT().
|
#
1.14 |
|
28-Jan-2001 |
thorpej |
Page scanner improvements, behavior is actually a bit more like Mach VM's now. Specific changes: - Pages now need not have all of their mappings removed before being put on the inactive list. They only need to have the "referenced" attribute cleared. This makes putting pages onto the inactive list much more efficient. In order to eliminate redundant clearings of "refrenced", callers of uvm_pagedeactivate() must now do this themselves. - When checking the "modified" attribute for a page (for clearing PG_CLEAN), make sure to only do it if PG_CLEAN is currently set on the page (saves a potentially expensive pmap operation). - When scanning the inactive list, if a page is referenced, reactivate it (this part was actually added in uvm_pdaemon.c,v 1.27). This now works properly now that pages on the inactive list are allowed to have mappings. - When scanning the inactive list and considering a page for freeing, remove all mappings, and then check the "modified" attribute if the page is marked PG_CLEAN. - When scanning the active list, if the page was referenced since its last sweep by the scanner, don't deactivate it. (This part was actually added in uvm_pdaemon.c,v 1.28.)
These changes greatly improve interactive performance during moderate to high memory and I/O load.
|
#
1.13 |
|
23-Jan-2001 |
thorpej |
Change uvm_analloc() to return a locked anon, update all callers, and fix an anon locking protocol error in uvm_loanzero().
|
#
1.12 |
|
23-Jan-2001 |
thorpej |
Sprinkle some assertions: amap_free(): Assert that the amap is locked. amap_share_protect(): Assert that the amap is locked. amap_wipeout(): Assert that the amap is locked. uvm_anfree(): Assert that the anon has a reference count of 0 and is not locked. uvm_anon_lockloanpg(): Assert that the anon is locked. anon_pagein(): Assert that the anon is locked. uvmfault_anonget(): Assert that the anon is locked. uvm_pagealloc_strat(): Assert that the uobj or the anon is locked
And fix the problems these have uncovered: amap_cow_now(): Lock the new anon after allocating it, and unref and unlock it (rather than lock!) before freeing it in case of an error condition. This should fix a problem reported by Dan Carosone using cdrecord on an i386 MP kernel. uvm_fault(): Case1B -- Lock the new anon afer allocating it, and unlock it later when we unlock the old anon. Case2 -- Lock the new anon after allocating it, and unlock it later by passing it to uvmfault_unlockall() (we set anon to NULL if we're not doing a promote fault).
|
#
1.11 |
|
27-Dec-2000 |
chs |
when we fail to allocate anons to represent new swap space, just return an error rather than panicing.
|
#
1.10 |
|
25-Nov-2000 |
chs |
lots of cleanup: use queue.h macros and KASSERT(). address amap offsets in pages instead of bytes. make amap_ref() and amap_unref() take an amap, offset and length instead of a vm_map_entry_t. improve whitespace and comments.
|
#
1.9 |
|
06-Aug-2000 |
thorpej |
Do something sane with a DIAGNOSTIC condition in an non-DIAGNOSTIC kernel.
|
#
1.8 |
|
05-Aug-2000 |
thorpej |
Correct a comment about locking wrt. uvmfault_anonget().
|
#
1.7 |
|
27-Jun-2000 |
mrg |
remove include of <vm/vm.h>
|
#
1.6 |
|
26-Jun-2000 |
mrg |
remove/move more mach vm header files:
<vm/pglist.h> -> <uvm/uvm_pglist.h> <vm/vm_inherit.h> -> <uvm/uvm_inherit.h> <vm/vm_kern.h> -> into <uvm/uvm_extern.h> <vm/vm_object.h> -> nothing <vm/vm_pager.h> -> into <uvm/uvm_pager.h>
also includes a bunch of <vm/vm_page.h> include removals (due to redudancy with <vm/vm.h>), and a scattering of other similar headers.
|
Revision tags: netbsd-1-5-base minoura-xpg4dl-base chs-ubc2-newbase
|
#
1.5 |
|
11-Jan-2000 |
chs |
branches: 1.5.4; add support for ``swapctl -d'' (removing swap space). improve handling of i/o errors in swap space.
reviewed by: Chuck Cranor
|
Revision tags: wrstuden-devbsize-19991221 wrstuden-devbsize-base comdex-fall-1999-base fvdl-softdep-base
|
#
1.4 |
|
12-Sep-1999 |
chs |
branches: 1.4.2; eliminate the PMAP_NEW option by making it required for all ports. ports which previously had no support for PMAP_NEW now implement the pmap_k* interfaces as wrappers around the non-k versions.
|
#
1.3 |
|
14-Aug-1999 |
ross |
In uvm_anon_init() and uvm_anon_add(), initialize the ref count lock.
|
Revision tags: netbsd-1-4-PATCH003 netbsd-1-4-PATCH002 kame_141_19991130 netbsd-1-4-PATCH001 kame_14_19990705 kame_14_19990628 chs-ubc2-base netbsd-1-4-RELEASE netbsd-1-4-base
|
#
1.2 |
|
26-Mar-1999 |
chs |
add uvmexp.swpgonly and use it to detect out-of-swap conditions.
|
#
1.1 |
|
24-Jan-1999 |
chuck |
cleanup/reorg: - break anon related functions out of uvm_amap.c and put them in their own file (uvm_anon.c). includes break up uvm_anon_init into an amap and an an anon init function - ensure that only functions within the amap module access amap structure fields (add macros to amap api as needed)
|
#
1.79 |
|
09-Jul-2020 |
skrll |
Consistently use UVMHIST(__func__)
Convert UVMHIST_{CALLED,LOG} into UVMHIST_CALLARGS
|
#
1.78 |
|
08-Jul-2020 |
skrll |
Trailing whitespace
|
Revision tags: bouyer-xenpvh-base2 phil-wifi-20200421 bouyer-xenpvh-base1 phil-wifi-20200411 bouyer-xenpvh-base phil-wifi-20200406
|
#
1.77 |
|
22-Mar-2020 |
ad |
Process concurrent page faults on individual uvm_objects / vm_amaps in parallel, where the relevant pages are already in-core. Proposed on tech-kern.
Temporarily disabled on MP architectures with __HAVE_UNLOCKED_PMAP until adjustments are made to their pmaps.
|
#
1.76 |
|
20-Mar-2020 |
ad |
Go back to freeing struct vm_anon one by one. There may have been an advantage circa ~2008 but there isn't now.
|
#
1.75 |
|
14-Mar-2020 |
ad |
Make page waits (WANTED vs BUSY) interlocked by pg->interlock. Gets RW locks out of the equation for sleep/wakeup, and allows observing+waiting for busy pages when holding only a read lock. Proposed on tech-kern.
|
Revision tags: is-mlppp-base ad-namecache-base3
|
#
1.74 |
|
24-Feb-2020 |
rin |
0x%#x --> %#x for non-external codes. Also, stop mixing up 0x%x and %#x in single files as far as possible.
|
#
1.73 |
|
23-Feb-2020 |
ad |
Use rw_lock_op().
|
#
1.72 |
|
23-Feb-2020 |
ad |
UVM locking changes, proposed on tech-kern:
- Change the lock on uvm_object, vm_amap and vm_anon to be a RW lock. - Break v_interlock and vmobjlock apart. v_interlock remains a mutex. - Do partial PV list locking in the x86 pmap. Others to follow later.
|
Revision tags: ad-namecache-base2 ad-namecache-base1
|
#
1.71 |
|
15-Jan-2020 |
ad |
Merge from yamt-pagecache (after much testing):
- Reduce unnecessary page scan in putpages esp. when an object has a ton of pages cached but only a few of them are dirty.
- Reduce the number of pmap operations by tracking page dirtiness more precisely in uvm layer.
|
Revision tags: ad-namecache-base
|
#
1.70 |
|
31-Dec-2019 |
ad |
branches: 1.70.2; - Add and use wrapper functions that take and acquire page interlocks, and pairs of page interlocks. Require that the page interlock be held over calls to uvm_pageactivate(), uvm_pagewire() and similar.
- Solve the concurrency problem with page replacement state. Rather than updating the global state synchronously, set an intended state on individual pages (active, inactive, enqueued, dequeued) while holding the page interlock. After the interlock is released put the pages on a 128 entry per-CPU queue for their state changes to be made real in batch. This results in in a ~400 fold decrease in contention on my test system. Proposed on tech-kern but modified to use the page interlock rather than atomics to synchronise as it's much easier to maintain that way, and cheaper.
|
#
1.69 |
|
13-Dec-2019 |
ad |
Break the global uvm_pageqlock into a per-page identity lock and a private lock for use of the pagedaemon policy code. Discussed on tech-kern.
PR kern/54209: NetBSD 8 large memory performance extremely low PR kern/54210: NetBSD-8 processes presumably not exiting PR kern/54727: writing a large file causes unreasonable system behaviour
|
#
1.68 |
|
02-Dec-2019 |
chs |
fix the build for when UVMHIST is enabled.
|
#
1.67 |
|
01-Dec-2019 |
uwe |
Add missing #include <sys/atomic.h>
|
#
1.66 |
|
01-Dec-2019 |
ad |
Free pages in batch instead of taking uvm_pageqlock for each one.
|
#
1.65 |
|
01-Dec-2019 |
ad |
- Adjust uvmexp.swpgonly with atomics, and make uvm_swap_data_lock static. - A bit more __cacheline_aligned on mutexes.
|
Revision tags: netbsd-9-0-RELEASE netbsd-9-0-RC2 netbsd-9-0-RC1 phil-wifi-20191119 netbsd-9-base phil-wifi-20190609 isaki-audio2-base pgoyette-compat-merge-20190127 pgoyette-compat-20190127 pgoyette-compat-20190118 pgoyette-compat-1226 pgoyette-compat-1126 pgoyette-compat-1020 pgoyette-compat-0930 pgoyette-compat-0906 pgoyette-compat-0728 phil-wifi-base pgoyette-compat-0625 pgoyette-compat-0521 pgoyette-compat-0502 pgoyette-compat-0422 pgoyette-compat-0415 pgoyette-compat-0407 pgoyette-compat-0330 pgoyette-compat-0322 pgoyette-compat-0315 pgoyette-compat-base tls-maxphys-base-20171202
|
#
1.64 |
|
28-Oct-2017 |
pgoyette |
branches: 1.64.4; Update the kernhist(9) kernel history code to address issues identified in PR kern/52639, as well as some general cleaning-up...
(As proposed on tech-kern@ with additional changes and enhancements.)
Details of changes:
* All history arguments are now stored as uintmax_t values[1], both in the kernel and in the structures used for exporting the history data to userland via sysctl(9). This avoids problems on some architectures where passing a 64-bit (or larger) value to printf(3) can cause it to process the value as multiple arguments. (This can be particularly problematic when printf()'s format string is not a literal, since in that case the compiler cannot know how large each argument should be.)
* Update the data structures used for exporting kernel history data to include a version number as well as the length of history arguments.
* All [2] existing users of kernhist(9) have had their format strings updated. Each format specifier now includes an explicit length modifier 'j' to refer to numeric values of the size of uintmax_t.
* All [2] existing users of kernhist(9) have had their format strings updated to replace uses of "%p" with "%#jx", and the pointer arguments are now cast to (uintptr_t) before being subsequently cast to (uintmax_t). This is needed to avoid compiler warnings about casting "pointer to integer of a different size."
* All [2] existing users of kernhist(9) have had instances of "%s" or "%c" format strings replaced with numeric formats; several instances of mis-match between format string and argument list have been fixed.
* vmstat(1) has been modified to handle the new size of arguments in the history data as exported by sysctl(9).
* vmstat(1) now provides a warning message if the history requested with the -u option does not exist (previously, this condition was silently ignored, with only a single blank line being printed).
* vmstat(1) now checks the version and argument length included in the data exported via sysctl(9) and exits if they do not match the values with which vmstat was built.
* The kernhist(9) man-page has been updated to note the additional requirements imposed on the format strings, along with several other minor changes and enhancements.
[1] It would have been possible to use an explicit length (for example, uint64_t) for the history arguments. But that would require another "rototill" of all the users in the future when we add support for an architecture that supports a larger size. Also, the printf(3) format specifiers for explicitly-sized values, such as "%"PRIu64, are much more verbose (and less aesthetically appealing, IMHO) than simply using "%ju".
[2] I've tried very hard to find "all [the] existing users of kernhist(9)" but it is possible that I've missed some of them. I would be glad to update any stragglers that anyone identifies.
|
Revision tags: netbsd-7-2-RELEASE netbsd-7-1-2-RELEASE netbsd-7-1-1-RELEASE nick-nhusb-base-20170825 perseant-stdc-iso10646-base netbsd-8-base prg-localcount2-base3 prg-localcount2-base2 prg-localcount2-base1 prg-localcount2-base pgoyette-localcount-20170426 bouyer-socketcan-base1 jdolecek-ncq-base pgoyette-localcount-20170320 netbsd-7-1-RELEASE netbsd-7-1-RC2 nick-nhusb-base-20170204 netbsd-7-nhusb-base-20170116 bouyer-socketcan-base pgoyette-localcount-20170107 netbsd-7-1-RC1 nick-nhusb-base-20161204 pgoyette-localcount-20161104 netbsd-7-0-2-RELEASE nick-nhusb-base-20161004 localcount-20160914 netbsd-7-nhusb-base pgoyette-localcount-20160806 pgoyette-localcount-20160726 pgoyette-localcount-base nick-nhusb-base-20160907 nick-nhusb-base-20160529 netbsd-7-0-1-RELEASE nick-nhusb-base-20160422 nick-nhusb-base-20160319 nick-nhusb-base-20151226 netbsd-7-0-RELEASE nick-nhusb-base-20150921 netbsd-7-0-RC3 netbsd-7-0-RC2 netbsd-7-0-RC1 nick-nhusb-base-20150606 nick-nhusb-base-20150406 nick-nhusb-base netbsd-7-base yamt-pagecache-base9 tls-earlyentropy-base riastradh-xf86-video-intel-2-7-1-pre-2-21-15 riastradh-drm2-base3 rmind-smpnet-nbase rmind-smpnet-base tls-maxphys-base
|
#
1.63 |
|
25-Oct-2013 |
martin |
branches: 1.63.22; Mark a diagnostic-only variable
|
Revision tags: netbsd-6-0-6-RELEASE netbsd-6-1-5-RELEASE netbsd-6-1-4-RELEASE netbsd-6-0-5-RELEASE netbsd-6-1-3-RELEASE netbsd-6-0-4-RELEASE netbsd-6-1-2-RELEASE netbsd-6-0-3-RELEASE netbsd-6-1-1-RELEASE riastradh-drm2-base2 riastradh-drm2-base1 riastradh-drm2-base netbsd-6-0-2-RELEASE netbsd-6-1-RELEASE netbsd-6-1-RC4 netbsd-6-1-RC3 agc-symver-base netbsd-6-1-RC2 netbsd-6-1-RC1 yamt-pagecache-base8 netbsd-6-0-1-RELEASE yamt-pagecache-base7 matt-nb6-plus-nbase yamt-pagecache-base6 netbsd-6-0-RELEASE netbsd-6-0-RC2 matt-nb6-plus-base netbsd-6-0-RC1 jmcneill-usbmp-base10 yamt-pagecache-base5 jmcneill-usbmp-base9 yamt-pagecache-base4 jmcneill-usbmp-base8 jmcneill-usbmp-base7 jmcneill-usbmp-base6 jmcneill-usbmp-base5 jmcneill-usbmp-base4 jmcneill-usbmp-base3 jmcneill-usbmp-pre-base2 jmcneill-usbmp-base2 netbsd-6-base jmcneill-usbmp-base jmcneill-audiomp3-base yamt-pagecache-base3 yamt-pagecache-base2 yamt-pagecache-base
|
#
1.62 |
|
18-Aug-2011 |
yamt |
branches: 1.62.2; 1.62.12; 1.62.16; uvm_anon_release: - don't forget to call uvm_anon_dispose. - simplify code a little.
|
#
1.61 |
|
18-Aug-2011 |
yamt |
uvm_anon_freelst: - clear an_link/an_ref when deferring anon disposal. otherwise others can see bogus an_ref. - fix the code to remove anon from the list.
|
#
1.60 |
|
14-Aug-2011 |
rmind |
uvm_anon_freelst: do not free PG_RELEASED pages (change uvm_anon_dispose() to indicate them with a return value).
|
#
1.59 |
|
06-Aug-2011 |
rmind |
- Rework uvm_anfree() into uvm_anon_freelst(), which always drops the lock. - Free anons in uvm_anon_freelst() without lock held. - Mechanic sync to unused loaning code.
|
#
1.58 |
|
05-Jul-2011 |
yamt |
reduce the number of atomic ops in common cases. it's exceptional for anons to remain longer than amap.
|
#
1.57 |
|
24-Jun-2011 |
rmind |
Fix uvmplock regression - a lock against oneself case in amap_swap_off(). Happens since amap is NULL in uvmfault_anonget(), so uvmfault_unlockall() keeps anon locked, when it should unlock it.
|
#
1.56 |
|
24-Jun-2011 |
yamt |
uvm_anon_release: fix a locking error after the rmind-uvmplock merge
|
#
1.55 |
|
17-Jun-2011 |
rmind |
Improve comments on uvm_anon.c, tidy up slightly. No functional changes.
|
#
1.54 |
|
12-Jun-2011 |
rmind |
Welcome to 5.99.53! Merge rmind-uvmplock branch:
- Reorganize locking in UVM and provide extra serialisation for pmap(9). New lock order: [vmpage-owner-lock] -> pmap-lock.
- Simplify locking in some pmap(9) modules by removing P->V locking.
- Use lock object on vmobjlock (and thus vnode_t::v_interlock) to share the locks amongst UVM objects where necessary (tmpfs, layerfs, unionfs).
- Rewrite and optimise x86 TLB shootdown code, make it simpler and cleaner. Add TLBSTATS option for x86 to collect statistics about TLB shootdowns.
- Unify /dev/mem et al in MI code and provide required locking (removes kernel-lock on some ports). Also, avoid cache-aliasing issues.
Thanks to Andrew Doran and Joerg Sonnenberger, as their initial patches formed the core changes of this branch.
|
Revision tags: rmind-uvmplock-nbase cherry-xenmp-base rmind-uvmplock-base
|
#
1.53 |
|
23-Apr-2011 |
rmind |
branches: 1.53.2; Replace "malloc" in comments, remove unnecessary header inclusions.
|
Revision tags: uebayasi-xip-base7 bouyer-quota2-nbase bouyer-quota2-base
|
#
1.52 |
|
02-Feb-2011 |
chuck |
udpate license clauses on my code to match the new-style BSD licenses. based on diff that rmind@ sent me.
no functional change with this commit.
|
Revision tags: netbsd-5-2-3-RELEASE netbsd-5-1-5-RELEASE netbsd-5-2-2-RELEASE netbsd-5-1-4-RELEASE netbsd-5-2-1-RELEASE netbsd-5-1-3-RELEASE netbsd-5-2-RELEASE netbsd-5-2-RC1 netbsd-5-1-2-RELEASE netbsd-5-1-1-RELEASE jruoho-x86intr-base matt-mips64-premerge-20101231 matt-nb5-mips64-premerge-20101231 matt-nb5-pq3-base uebayasi-xip-base6 uebayasi-xip-base5 netbsd-5-1-RELEASE uebayasi-xip-base4 uebayasi-xip-base3 yamt-nfs-mp-base11 netbsd-5-1-RC4 matt-nb5-mips64-k15 uebayasi-xip-base2 yamt-nfs-mp-base10 netbsd-5-1-RC3 netbsd-5-1-RC2 uebayasi-xip-base1 netbsd-5-1-RC1 yamt-nfs-mp-base9 uebayasi-xip-base netbsd-5-0-2-RELEASE matt-nb5-mips64-premerge-20091211 matt-premerge-20091211 yamt-nfs-mp-base8 matt-nb5-mips64-u2-k2-k4-k7-k8-k9 matt-nb4-mips64-k7-u2a-k9b matt-nb5-mips64-u1-k1-k5 yamt-nfs-mp-base7 netbsd-5-0-1-RELEASE jymxensuspend-base yamt-nfs-mp-base6 yamt-nfs-mp-base5 yamt-nfs-mp-base4 jym-xensuspend-nbase yamt-nfs-mp-base3 nick-hppapmap-base4 nick-hppapmap-base3 netbsd-5-0-RELEASE netbsd-5-0-RC4 netbsd-5-0-RC3 nick-hppapmap-base2 netbsd-5-0-RC2 jym-xensuspend-base netbsd-5-0-RC1 haad-dm-base2 haad-nbase2 ad-audiomp2-base netbsd-5-base nick-hppapmap-base matt-mips64-base2 haad-dm-base1 wrstuden-revivesa-base-4 wrstuden-revivesa-base-3 wrstuden-revivesa-base-2 haad-dm-base wrstuden-revivesa-base-1 simonb-wapbl-nbase yamt-pf42-base4 simonb-wapbl-base yamt-pf42-base3 hpcarm-cleanup-nbase yamt-pf42-baseX yamt-pf42-base2 yamt-nfs-mp-base2 wrstuden-revivesa-base yamt-nfs-mp-base yamt-pf42-base ad-socklock-base1 yamt-lazymbuf-base15 yamt-lazymbuf-base14 keiichi-mipv6-nbase mjf-devfs2-base nick-net80211-sync-base keiichi-mipv6-base bouyer-xeni386-nbase bouyer-xeni386-base matt-armv6-nbase mjf-devfs-base hpcarm-cleanup-base
|
#
1.51 |
|
18-Jan-2008 |
yamt |
branches: 1.51.28; 1.51.32; 1.51.38; 1.51.40; push pmap_clear_reference calls into pdpolicy code, where reference bits actually matter.
|
Revision tags: matt-armv6-base
|
#
1.50 |
|
02-Jan-2008 |
ad |
Merge vmlocking2 to head.
|
Revision tags: vmlocking2-base3
|
#
1.49 |
|
20-Dec-2007 |
ad |
Specify PR_LARGECACHE for anon_cache (which is insanely busy).
|
Revision tags: yamt-kmem-base3 cube-autoconf-base yamt-kmem-base2 yamt-kmem-base vmlocking2-base2 reinoud-bufcleanup-nbase vmlocking2-base1 bouyer-xenamd64-base2 vmlocking-nbase bouyer-xenamd64-base jmcneill-pm-base reinoud-bufcleanup-base
|
#
1.48 |
|
13-Nov-2007 |
yamt |
branches: 1.48.2; 1.48.6; g/c unused uvm_anon_pool.
|
#
1.47 |
|
07-Nov-2007 |
ad |
Merge from vmlocking:
- pool_cache changes. - Debugger/procfs locking fixes. - Other minor changes.
|
Revision tags: jmcneill-base yamt-x86pmap-base4 yamt-x86pmap-base3 vmlocking-base
|
#
1.46 |
|
11-Oct-2007 |
ad |
branches: 1.46.2; 1.46.4; Remove LOCK_ASSERT(!simple_lock_held(&foo));
|
Revision tags: nick-csl-alignment-base5 yamt-x86pmap-base2 yamt-x86pmap-base matt-mips64-base
|
#
1.45 |
|
21-Jul-2007 |
ad |
branches: 1.45.4; 1.45.6; 1.45.8; 1.45.10; Merge unobtrusive locking changes from the vmlocking branch.
|
Revision tags: nick-csl-alignment-base yamt-idlelwp-base8 thorpej-atomic-base mjf-ufs-trans-base
|
#
1.44 |
|
12-Mar-2007 |
ad |
branches: 1.44.8; Pass an ipl argument to pool_init/POOL_INIT to be used when initializing the pool's lock.
|
Revision tags: ad-audiomp-base
|
#
1.43 |
|
22-Feb-2007 |
thorpej |
branches: 1.43.4; TRUE -> true, FALSE -> false
|
#
1.42 |
|
21-Feb-2007 |
thorpej |
Replace the Mach-derived boolean_t type with the C99 bool type. A future commit will replace use of TRUE and FALSE with true and false.
|
Revision tags: netbsd-4-0-1-RELEASE wrstuden-fixsa-newbase wrstuden-fixsa-base-1 netbsd-4-0-RELEASE netbsd-4-0-RC5 matt-nb4-arm-base netbsd-4-0-RC4 netbsd-4-0-RC3 netbsd-4-0-RC2 netbsd-4-0-RC1 wrstuden-fixsa-base post-newlock2-merge newlock2-nbase yamt-splraiseipl-base5 yamt-splraiseipl-base4 yamt-splraiseipl-base3 newlock2-base netbsd-4-base
|
#
1.41 |
|
01-Nov-2006 |
yamt |
branches: 1.41.4; remove some __unused from function parameters.
|
Revision tags: yamt-splraiseipl-base2
|
#
1.40 |
|
12-Oct-2006 |
christos |
- sprinkle __unused on function decls. - fix a couple of unused bugs - no more -Wno-unused for i386
|
Revision tags: yamt-splraiseipl-base
|
#
1.39 |
|
15-Sep-2006 |
yamt |
branches: 1.39.2; merge yamt-pdpolicy branch. - separate page replacement policy from the rest of kernel - implement an alternative replacement policy
|
Revision tags: abandoned-netbsd-4-base yamt-pdpolicy-base9 yamt-pdpolicy-base8 yamt-pdpolicy-base7 yamt-pdpolicy-base6 chap-midi-nbase gdamore-uart-base simonb-timcounters-final yamt-pdpolicy-base5 chap-midi-base yamt-pdpolicy-base4 yamt-pdpolicy-base3 peter-altq-base yamt-pdpolicy-base2 elad-kernelauth-base yamt-pdpolicy-base yamt-uio_vmspace-base5 simonb-timecounters-base rpaulo-netinet-merge-pcb-base
|
#
1.38 |
|
11-Dec-2005 |
christos |
branches: 1.38.8; 1.38.20; merge ktrace-lwp.
|
Revision tags: yamt-readahead-base3 yamt-readahead-base2 yamt-readahead-pervnode yamt-readahead-perfile yamt-readahead-base yamt-vop-base3 yamt-vop-base2 thorpej-vnode-attr-base yamt-vop-base ktrace-lwp-base
|
#
1.37 |
|
13-Sep-2005 |
yamt |
wrap swap related code by #ifdef VMSWAP. always #define VMSWAP for now.
|
#
1.36 |
|
31-Jul-2005 |
yamt |
revert "defflag VMSWAP" changes for now. there seems to be far more people who don't want to edit their kernel config files than i thought.
|
#
1.35 |
|
30-Jul-2005 |
yamt |
defflag VMSWAP.
|
#
1.34 |
|
27-Jun-2005 |
thorpej |
branches: 1.34.2; Use ANSI function decls.
|
#
1.33 |
|
11-May-2005 |
yamt |
allocate anons on-demand, rather than reserving static amount of them on boot/swapon.
|
Revision tags: kent-audio2-base
|
#
1.32 |
|
01-Apr-2005 |
yamt |
merge yamt-km branch. - don't use managed mappings/backing objects for wired memory allocations. save some resources like pv_entry. also fix (most of) PR/27030. - simplify kernel memory management API. - simplify pmap bootstrap of some ports. - some related cleanups.
|
Revision tags: netbsd-3-1-1-RELEASE netbsd-3-0-3-RELEASE netbsd-3-1-RELEASE netbsd-3-0-2-RELEASE netbsd-3-1-RC4 netbsd-3-1-RC3 netbsd-3-1-RC2 netbsd-3-1-RC1 netbsd-3-0-1-RELEASE netbsd-3-0-RELEASE netbsd-3-0-RC6 netbsd-3-0-RC5 netbsd-3-0-RC4 netbsd-3-0-RC3 netbsd-3-0-RC2 netbsd-3-0-RC1 yamt-km-base4 yamt-km-base3 netbsd-3-base yamt-km-base2 yamt-km-base kent-audio1-beforemerge kent-audio1-base
|
#
1.31 |
|
01-Sep-2004 |
yamt |
branches: 1.31.4; 1.31.6; uvm_pagefree: when orphaning an A->K loaned page, - decrement uvmexp.anonpages as it's no longer an anon page. - null out anon->u.an_page as the anon no longer own the page. uvm_anfree: add related assertions.
|
#
1.30 |
|
01-Sep-2004 |
yamt |
uvm_anfree: remove a comment which is no longer true.
|
#
1.29 |
|
05-May-2004 |
yamt |
fix a amap_wirerange deadlock problem by re-introducing PG_RELEASED for anon pages. PR/23171 from Christian Limpach. for details, see discussion filed in the PR database.
uvm_anon_release: a new function to free anon-owned PG_RELEASED page. uvm_anfree: we can't wait for the page here because the caller might hold amap lock. instead, just mark the page as PG_RELEASED. who unbusy the page should check the PG_RELEASED. uvm_aio_aiodone: uvm_anon_release() instead of uvm_page_unbusy() if appropriate. uvmfault_anonget: check PG_RELEASED.
|
Revision tags: netbsd-2-0-base
|
#
1.28 |
|
24-Mar-2004 |
junyoung |
branches: 1.28.2; Nuke __P().
|
#
1.27 |
|
06-Jan-2004 |
chs |
fix lock initialization in uvm_anon_add(). from PR 23831.
|
#
1.26 |
|
28-Aug-2003 |
pk |
When retiring a swap device with marked bad blocks on it we should update the `# swap page in use' and `# swap page only' counters. However, at the time of swap device removal we can no longer figure out how many of the bad swap pages are actually also `swap only' pages.
So, on swap I/O errors arrange things to not include the bad swap pages in the `swpgonly' counter as follows: uvm_swap_markbad() decrements `swpgonly' by the number of bad pages, and the various VM object deallocation routines do not decrement `swpgonly' for swap slots marked as SWSLOT_BAD.
|
#
1.25 |
|
11-Aug-2003 |
pk |
uao_pagein_page() & anon_pagein(): * return failure if the page cannot be retrieved. * wakeup any waiters when releasing a page after successful page in.
|
#
1.24 |
|
11-Aug-2003 |
pk |
Only deactivate pages if their wired count is zero.
|
#
1.23 |
|
11-Aug-2003 |
pk |
Make sure to call uvm_swap_free() and uvm_swap_markbad() with valid (i.e. positive) slot numbers.
|
Revision tags: nathanw_sa_before_merge fvdl_fs64_base gmcgarry_ctxsw_base gmcgarry_ucred_base nathanw_sa_base kqueue-aftermerge kqueue-beforemerge kqueue-base
|
#
1.22 |
|
21-Sep-2002 |
chs |
branches: 1.22.6; add missing anon lock around call to uvm_anon_lockloanpg().
|
Revision tags: netbsd-1-6-PATCH002-RELEASE netbsd-1-6-PATCH002 netbsd-1-6-PATCH002-RC4 netbsd-1-6-PATCH002-RC3 netbsd-1-6-PATCH002-RC2 netbsd-1-6-PATCH002-RC1 netbsd-1-6-PATCH001 netbsd-1-6-PATCH001-RELEASE netbsd-1-6-PATCH001-RC3 netbsd-1-6-PATCH001-RC2 netbsd-1-6-PATCH001-RC1 netbsd-1-6-RELEASE netbsd-1-6-RC3 netbsd-1-6-RC2 netbsd-1-6-RC1 netbsd-1-6-base gehenna-devsw-base eeh-devprop-base newlock-base ifpoll-base thorpej-mips-cache-base
|
#
1.21 |
|
10-Nov-2001 |
lukem |
branches: 1.21.4; add RCSIDs, and in some cases, slightly cleanup #include order
|
#
1.20 |
|
06-Nov-2001 |
chs |
several changes prompted by loaning problems: - fix the loaned case in uvm_pagefree(). - redo uvmexp.swpgonly accounting to work with page loaning. add an assertion before each place we adjust uvmexp.swpgonly. - fix uvm_km_pgremove() to always free any swap space associated with the range being removed. - get rid of UVM_LOAN_WIRED flag. instead, we just make sure that pages loaned to the kernel are never on the page queues. this allows us to assert that pages are not loaned and wired at the same time. - add yet more assertions.
|
#
1.19 |
|
21-Oct-2001 |
chs |
branches: 1.19.2; add some missing spinlocks.
|
Revision tags: thorpej-devvp-base3 thorpej-devvp-base2 post-chs-ubcperf
|
#
1.18 |
|
15-Sep-2001 |
chs |
a whole bunch of changes to improve performance and robustness under load:
- remove special treatment of pager_map mappings in pmaps. this is required now, since I've removed the globals that expose the address range. pager_map now uses pmap_kenter_pa() instead of pmap_enter(), so there's no longer any need to special-case it. - eliminate struct uvm_vnode by moving its fields into struct vnode. - rewrite the pageout path. the pager is now responsible for handling the high-level requests instead of only getting control after a bunch of work has already been done on its behalf. this will allow us to UBCify LFS, which needs tighter control over its pages than other filesystems do. writing a page to disk no longer requires making it read-only, which allows us to write wired pages without causing all kinds of havoc. - use a new PG_PAGEOUT flag to indicate that a page should be freed on behalf of the pagedaemon when it's unlocked. this flag is very similar to PG_RELEASED, but unlike PG_RELEASED, PG_PAGEOUT can be cleared if the pageout fails due to eg. an indirect-block buffer being locked. this allows us to remove the "version" field from struct vm_page, and together with shrinking "loan_count" from 32 bits to 16, struct vm_page is now 4 bytes smaller. - no longer use PG_RELEASED for swap-backed pages. if the page is busy because it's being paged out, we can't release the swap slot to be reallocated until that write is complete, but unlike with vnodes we don't keep a count of in-progress writes so there's no good way to know when the write is done. instead, when we need to free a busy swap-backed page, just sleep until we can get it busy ourselves. - implement a fast-path for extending writes which allows us to avoid zeroing new pages. this substantially reduces cpu usage. - encapsulate the data used by the genfs code in a struct genfs_node, which must be the first element of the filesystem-specific vnode data for filesystems which use genfs_{get,put}pages(). - eliminate many of the UVM pagerops, since they aren't needed anymore now that the pager "put" operation is a higher-level operation. - enhance the genfs code to allow NFS to use the genfs_{get,put}pages instead of a modified copy. - clean up struct vnode by removing all the fields that used to be used by the vfs_cluster.c code (which we don't use anymore with UBC). - remove kmem_object and mb_object since they were useless. instead of allocating pages to these objects, we now just allocate pages with no object. such pages are mapped in the kernel until they are freed, so we can use the mapping to find the page to free it. this allows us to remove splvm() protection in several places.
The sum of all these changes improves write throughput on my decstation 5000/200 to within 1% of the rate of NetBSD 1.5 and reduces the elapsed time for "make release" of a NetBSD 1.5 source tree on my 128MB pc to 10% less than a 1.5 kernel took.
|
Revision tags: pre-chs-ubcperf thorpej-devvp-base
|
#
1.17 |
|
25-May-2001 |
chs |
branches: 1.17.2; 1.17.4; remove trailing whitespace.
|
Revision tags: thorpej_scsipi_beforemerge thorpej_scsipi_nbase thorpej_scsipi_base
|
#
1.16 |
|
10-Mar-2001 |
chs |
eliminate the VM_PAGER_* error codes in favor of the traditional E* codes. the mapping is:
VM_PAGER_OK 0 VM_PAGER_BAD <unused> VM_PAGER_FAIL <unused> VM_PAGER_PEND 0 (see below) VM_PAGER_ERROR EIO VM_PAGER_AGAIN EAGAIN VM_PAGER_UNLOCK EBUSY VM_PAGER_REFAULT ERESTART
for async i/o requests, it used to be possible for the request to be convert to sync, and the pager would return VM_PAGER_OK or VM_PAGER_PEND to indicate whether the caller should perform post-i/o cleanup. this is no longer allowed; pagers must now return 0 to indicate that the async i/o was successfully started, and the caller never needs to worry about doing the post-i/o cleanup.
|
#
1.15 |
|
18-Feb-2001 |
chs |
branches: 1.15.2; clean up DIAGNOSTIC checks, use KASSERT().
|
#
1.14 |
|
28-Jan-2001 |
thorpej |
Page scanner improvements, behavior is actually a bit more like Mach VM's now. Specific changes: - Pages now need not have all of their mappings removed before being put on the inactive list. They only need to have the "referenced" attribute cleared. This makes putting pages onto the inactive list much more efficient. In order to eliminate redundant clearings of "refrenced", callers of uvm_pagedeactivate() must now do this themselves. - When checking the "modified" attribute for a page (for clearing PG_CLEAN), make sure to only do it if PG_CLEAN is currently set on the page (saves a potentially expensive pmap operation). - When scanning the inactive list, if a page is referenced, reactivate it (this part was actually added in uvm_pdaemon.c,v 1.27). This now works properly now that pages on the inactive list are allowed to have mappings. - When scanning the inactive list and considering a page for freeing, remove all mappings, and then check the "modified" attribute if the page is marked PG_CLEAN. - When scanning the active list, if the page was referenced since its last sweep by the scanner, don't deactivate it. (This part was actually added in uvm_pdaemon.c,v 1.28.)
These changes greatly improve interactive performance during moderate to high memory and I/O load.
|
#
1.13 |
|
23-Jan-2001 |
thorpej |
Change uvm_analloc() to return a locked anon, update all callers, and fix an anon locking protocol error in uvm_loanzero().
|
#
1.12 |
|
23-Jan-2001 |
thorpej |
Sprinkle some assertions: amap_free(): Assert that the amap is locked. amap_share_protect(): Assert that the amap is locked. amap_wipeout(): Assert that the amap is locked. uvm_anfree(): Assert that the anon has a reference count of 0 and is not locked. uvm_anon_lockloanpg(): Assert that the anon is locked. anon_pagein(): Assert that the anon is locked. uvmfault_anonget(): Assert that the anon is locked. uvm_pagealloc_strat(): Assert that the uobj or the anon is locked
And fix the problems these have uncovered: amap_cow_now(): Lock the new anon after allocating it, and unref and unlock it (rather than lock!) before freeing it in case of an error condition. This should fix a problem reported by Dan Carosone using cdrecord on an i386 MP kernel. uvm_fault(): Case1B -- Lock the new anon afer allocating it, and unlock it later when we unlock the old anon. Case2 -- Lock the new anon after allocating it, and unlock it later by passing it to uvmfault_unlockall() (we set anon to NULL if we're not doing a promote fault).
|
#
1.11 |
|
27-Dec-2000 |
chs |
when we fail to allocate anons to represent new swap space, just return an error rather than panicing.
|
#
1.10 |
|
25-Nov-2000 |
chs |
lots of cleanup: use queue.h macros and KASSERT(). address amap offsets in pages instead of bytes. make amap_ref() and amap_unref() take an amap, offset and length instead of a vm_map_entry_t. improve whitespace and comments.
|
#
1.9 |
|
06-Aug-2000 |
thorpej |
Do something sane with a DIAGNOSTIC condition in an non-DIAGNOSTIC kernel.
|
#
1.8 |
|
05-Aug-2000 |
thorpej |
Correct a comment about locking wrt. uvmfault_anonget().
|
#
1.7 |
|
27-Jun-2000 |
mrg |
remove include of <vm/vm.h>
|
#
1.6 |
|
26-Jun-2000 |
mrg |
remove/move more mach vm header files:
<vm/pglist.h> -> <uvm/uvm_pglist.h> <vm/vm_inherit.h> -> <uvm/uvm_inherit.h> <vm/vm_kern.h> -> into <uvm/uvm_extern.h> <vm/vm_object.h> -> nothing <vm/vm_pager.h> -> into <uvm/uvm_pager.h>
also includes a bunch of <vm/vm_page.h> include removals (due to redudancy with <vm/vm.h>), and a scattering of other similar headers.
|
Revision tags: netbsd-1-5-base minoura-xpg4dl-base chs-ubc2-newbase
|
#
1.5 |
|
11-Jan-2000 |
chs |
branches: 1.5.4; add support for ``swapctl -d'' (removing swap space). improve handling of i/o errors in swap space.
reviewed by: Chuck Cranor
|
Revision tags: wrstuden-devbsize-19991221 wrstuden-devbsize-base comdex-fall-1999-base fvdl-softdep-base
|
#
1.4 |
|
12-Sep-1999 |
chs |
branches: 1.4.2; eliminate the PMAP_NEW option by making it required for all ports. ports which previously had no support for PMAP_NEW now implement the pmap_k* interfaces as wrappers around the non-k versions.
|
#
1.3 |
|
14-Aug-1999 |
ross |
In uvm_anon_init() and uvm_anon_add(), initialize the ref count lock.
|
Revision tags: netbsd-1-4-PATCH003 netbsd-1-4-PATCH002 kame_141_19991130 netbsd-1-4-PATCH001 kame_14_19990705 kame_14_19990628 chs-ubc2-base netbsd-1-4-RELEASE netbsd-1-4-base
|
#
1.2 |
|
26-Mar-1999 |
chs |
add uvmexp.swpgonly and use it to detect out-of-swap conditions.
|
#
1.1 |
|
24-Jan-1999 |
chuck |
cleanup/reorg: - break anon related functions out of uvm_amap.c and put them in their own file (uvm_anon.c). includes break up uvm_anon_init into an amap and an an anon init function - ensure that only functions within the amap module access amap structure fields (add macros to amap api as needed)
|
#
1.77 |
|
22-Mar-2020 |
ad |
Process concurrent page faults on individual uvm_objects / vm_amaps in parallel, where the relevant pages are already in-core. Proposed on tech-kern.
Temporarily disabled on MP architectures with __HAVE_UNLOCKED_PMAP until adjustments are made to their pmaps.
|
#
1.76 |
|
20-Mar-2020 |
ad |
Go back to freeing struct vm_anon one by one. There may have been an advantage circa ~2008 but there isn't now.
|
#
1.75 |
|
14-Mar-2020 |
ad |
Make page waits (WANTED vs BUSY) interlocked by pg->interlock. Gets RW locks out of the equation for sleep/wakeup, and allows observing+waiting for busy pages when holding only a read lock. Proposed on tech-kern.
|
Revision tags: ad-namecache-base3
|
#
1.74 |
|
24-Feb-2020 |
rin |
0x%#x --> %#x for non-external codes. Also, stop mixing up 0x%x and %#x in single files as far as possible.
|
#
1.73 |
|
23-Feb-2020 |
ad |
Use rw_lock_op().
|
#
1.72 |
|
23-Feb-2020 |
ad |
UVM locking changes, proposed on tech-kern:
- Change the lock on uvm_object, vm_amap and vm_anon to be a RW lock. - Break v_interlock and vmobjlock apart. v_interlock remains a mutex. - Do partial PV list locking in the x86 pmap. Others to follow later.
|
Revision tags: ad-namecache-base2 ad-namecache-base1
|
#
1.71 |
|
15-Jan-2020 |
ad |
Merge from yamt-pagecache (after much testing):
- Reduce unnecessary page scan in putpages esp. when an object has a ton of pages cached but only a few of them are dirty.
- Reduce the number of pmap operations by tracking page dirtiness more precisely in uvm layer.
|
Revision tags: ad-namecache-base
|
#
1.70 |
|
31-Dec-2019 |
ad |
branches: 1.70.2; - Add and use wrapper functions that take and acquire page interlocks, and pairs of page interlocks. Require that the page interlock be held over calls to uvm_pageactivate(), uvm_pagewire() and similar.
- Solve the concurrency problem with page replacement state. Rather than updating the global state synchronously, set an intended state on individual pages (active, inactive, enqueued, dequeued) while holding the page interlock. After the interlock is released put the pages on a 128 entry per-CPU queue for their state changes to be made real in batch. This results in in a ~400 fold decrease in contention on my test system. Proposed on tech-kern but modified to use the page interlock rather than atomics to synchronise as it's much easier to maintain that way, and cheaper.
|
#
1.69 |
|
13-Dec-2019 |
ad |
Break the global uvm_pageqlock into a per-page identity lock and a private lock for use of the pagedaemon policy code. Discussed on tech-kern.
PR kern/54209: NetBSD 8 large memory performance extremely low PR kern/54210: NetBSD-8 processes presumably not exiting PR kern/54727: writing a large file causes unreasonable system behaviour
|
#
1.68 |
|
02-Dec-2019 |
chs |
fix the build for when UVMHIST is enabled.
|
#
1.67 |
|
01-Dec-2019 |
uwe |
Add missing #include <sys/atomic.h>
|
#
1.66 |
|
01-Dec-2019 |
ad |
Free pages in batch instead of taking uvm_pageqlock for each one.
|
#
1.65 |
|
01-Dec-2019 |
ad |
- Adjust uvmexp.swpgonly with atomics, and make uvm_swap_data_lock static. - A bit more __cacheline_aligned on mutexes.
|
Revision tags: netbsd-9-0-RELEASE netbsd-9-0-RC2 netbsd-9-0-RC1 phil-wifi-20191119 netbsd-9-base phil-wifi-20190609 isaki-audio2-base pgoyette-compat-merge-20190127 pgoyette-compat-20190127 pgoyette-compat-20190118 pgoyette-compat-1226 pgoyette-compat-1126 pgoyette-compat-1020 pgoyette-compat-0930 pgoyette-compat-0906 pgoyette-compat-0728 phil-wifi-base pgoyette-compat-0625 pgoyette-compat-0521 pgoyette-compat-0502 pgoyette-compat-0422 pgoyette-compat-0415 pgoyette-compat-0407 pgoyette-compat-0330 pgoyette-compat-0322 pgoyette-compat-0315 pgoyette-compat-base tls-maxphys-base-20171202
|
#
1.64 |
|
28-Oct-2017 |
pgoyette |
Update the kernhist(9) kernel history code to address issues identified in PR kern/52639, as well as some general cleaning-up...
(As proposed on tech-kern@ with additional changes and enhancements.)
Details of changes:
* All history arguments are now stored as uintmax_t values[1], both in the kernel and in the structures used for exporting the history data to userland via sysctl(9). This avoids problems on some architectures where passing a 64-bit (or larger) value to printf(3) can cause it to process the value as multiple arguments. (This can be particularly problematic when printf()'s format string is not a literal, since in that case the compiler cannot know how large each argument should be.)
* Update the data structures used for exporting kernel history data to include a version number as well as the length of history arguments.
* All [2] existing users of kernhist(9) have had their format strings updated. Each format specifier now includes an explicit length modifier 'j' to refer to numeric values of the size of uintmax_t.
* All [2] existing users of kernhist(9) have had their format strings updated to replace uses of "%p" with "%#jx", and the pointer arguments are now cast to (uintptr_t) before being subsequently cast to (uintmax_t). This is needed to avoid compiler warnings about casting "pointer to integer of a different size."
* All [2] existing users of kernhist(9) have had instances of "%s" or "%c" format strings replaced with numeric formats; several instances of mis-match between format string and argument list have been fixed.
* vmstat(1) has been modified to handle the new size of arguments in the history data as exported by sysctl(9).
* vmstat(1) now provides a warning message if the history requested with the -u option does not exist (previously, this condition was silently ignored, with only a single blank line being printed).
* vmstat(1) now checks the version and argument length included in the data exported via sysctl(9) and exits if they do not match the values with which vmstat was built.
* The kernhist(9) man-page has been updated to note the additional requirements imposed on the format strings, along with several other minor changes and enhancements.
[1] It would have been possible to use an explicit length (for example, uint64_t) for the history arguments. But that would require another "rototill" of all the users in the future when we add support for an architecture that supports a larger size. Also, the printf(3) format specifiers for explicitly-sized values, such as "%"PRIu64, are much more verbose (and less aesthetically appealing, IMHO) than simply using "%ju".
[2] I've tried very hard to find "all [the] existing users of kernhist(9)" but it is possible that I've missed some of them. I would be glad to update any stragglers that anyone identifies.
|
Revision tags: netbsd-7-2-RELEASE netbsd-7-1-2-RELEASE netbsd-7-1-1-RELEASE nick-nhusb-base-20170825 perseant-stdc-iso10646-base netbsd-8-base prg-localcount2-base3 prg-localcount2-base2 prg-localcount2-base1 prg-localcount2-base pgoyette-localcount-20170426 bouyer-socketcan-base1 jdolecek-ncq-base pgoyette-localcount-20170320 netbsd-7-1-RELEASE netbsd-7-1-RC2 nick-nhusb-base-20170204 netbsd-7-nhusb-base-20170116 bouyer-socketcan-base pgoyette-localcount-20170107 netbsd-7-1-RC1 nick-nhusb-base-20161204 pgoyette-localcount-20161104 netbsd-7-0-2-RELEASE nick-nhusb-base-20161004 localcount-20160914 netbsd-7-nhusb-base pgoyette-localcount-20160806 pgoyette-localcount-20160726 pgoyette-localcount-base nick-nhusb-base-20160907 nick-nhusb-base-20160529 netbsd-7-0-1-RELEASE nick-nhusb-base-20160422 nick-nhusb-base-20160319 nick-nhusb-base-20151226 netbsd-7-0-RELEASE nick-nhusb-base-20150921 netbsd-7-0-RC3 netbsd-7-0-RC2 netbsd-7-0-RC1 nick-nhusb-base-20150606 nick-nhusb-base-20150406 nick-nhusb-base netbsd-7-base yamt-pagecache-base9 tls-earlyentropy-base riastradh-xf86-video-intel-2-7-1-pre-2-21-15 riastradh-drm2-base3 rmind-smpnet-nbase rmind-smpnet-base tls-maxphys-base
|
#
1.63 |
|
25-Oct-2013 |
martin |
branches: 1.63.22; Mark a diagnostic-only variable
|
Revision tags: netbsd-6-0-6-RELEASE netbsd-6-1-5-RELEASE netbsd-6-1-4-RELEASE netbsd-6-0-5-RELEASE netbsd-6-1-3-RELEASE netbsd-6-0-4-RELEASE netbsd-6-1-2-RELEASE netbsd-6-0-3-RELEASE netbsd-6-1-1-RELEASE riastradh-drm2-base2 riastradh-drm2-base1 riastradh-drm2-base netbsd-6-0-2-RELEASE netbsd-6-1-RELEASE netbsd-6-1-RC4 netbsd-6-1-RC3 agc-symver-base netbsd-6-1-RC2 netbsd-6-1-RC1 yamt-pagecache-base8 netbsd-6-0-1-RELEASE yamt-pagecache-base7 matt-nb6-plus-nbase yamt-pagecache-base6 netbsd-6-0-RELEASE netbsd-6-0-RC2 matt-nb6-plus-base netbsd-6-0-RC1 jmcneill-usbmp-base10 yamt-pagecache-base5 jmcneill-usbmp-base9 yamt-pagecache-base4 jmcneill-usbmp-base8 jmcneill-usbmp-base7 jmcneill-usbmp-base6 jmcneill-usbmp-base5 jmcneill-usbmp-base4 jmcneill-usbmp-base3 jmcneill-usbmp-pre-base2 jmcneill-usbmp-base2 netbsd-6-base jmcneill-usbmp-base jmcneill-audiomp3-base yamt-pagecache-base3 yamt-pagecache-base2 yamt-pagecache-base
|
#
1.62 |
|
18-Aug-2011 |
yamt |
branches: 1.62.2; 1.62.12; 1.62.16; uvm_anon_release: - don't forget to call uvm_anon_dispose. - simplify code a little.
|
#
1.61 |
|
18-Aug-2011 |
yamt |
uvm_anon_freelst: - clear an_link/an_ref when deferring anon disposal. otherwise others can see bogus an_ref. - fix the code to remove anon from the list.
|
#
1.60 |
|
14-Aug-2011 |
rmind |
uvm_anon_freelst: do not free PG_RELEASED pages (change uvm_anon_dispose() to indicate them with a return value).
|
#
1.59 |
|
06-Aug-2011 |
rmind |
- Rework uvm_anfree() into uvm_anon_freelst(), which always drops the lock. - Free anons in uvm_anon_freelst() without lock held. - Mechanic sync to unused loaning code.
|
#
1.58 |
|
05-Jul-2011 |
yamt |
reduce the number of atomic ops in common cases. it's exceptional for anons to remain longer than amap.
|
#
1.57 |
|
24-Jun-2011 |
rmind |
Fix uvmplock regression - a lock against oneself case in amap_swap_off(). Happens since amap is NULL in uvmfault_anonget(), so uvmfault_unlockall() keeps anon locked, when it should unlock it.
|
#
1.56 |
|
24-Jun-2011 |
yamt |
uvm_anon_release: fix a locking error after the rmind-uvmplock merge
|
#
1.55 |
|
17-Jun-2011 |
rmind |
Improve comments on uvm_anon.c, tidy up slightly. No functional changes.
|
#
1.54 |
|
12-Jun-2011 |
rmind |
Welcome to 5.99.53! Merge rmind-uvmplock branch:
- Reorganize locking in UVM and provide extra serialisation for pmap(9). New lock order: [vmpage-owner-lock] -> pmap-lock.
- Simplify locking in some pmap(9) modules by removing P->V locking.
- Use lock object on vmobjlock (and thus vnode_t::v_interlock) to share the locks amongst UVM objects where necessary (tmpfs, layerfs, unionfs).
- Rewrite and optimise x86 TLB shootdown code, make it simpler and cleaner. Add TLBSTATS option for x86 to collect statistics about TLB shootdowns.
- Unify /dev/mem et al in MI code and provide required locking (removes kernel-lock on some ports). Also, avoid cache-aliasing issues.
Thanks to Andrew Doran and Joerg Sonnenberger, as their initial patches formed the core changes of this branch.
|
Revision tags: rmind-uvmplock-nbase cherry-xenmp-base rmind-uvmplock-base
|
#
1.53 |
|
23-Apr-2011 |
rmind |
branches: 1.53.2; Replace "malloc" in comments, remove unnecessary header inclusions.
|
Revision tags: uebayasi-xip-base7 bouyer-quota2-nbase bouyer-quota2-base
|
#
1.52 |
|
02-Feb-2011 |
chuck |
udpate license clauses on my code to match the new-style BSD licenses. based on diff that rmind@ sent me.
no functional change with this commit.
|
Revision tags: netbsd-5-2-3-RELEASE netbsd-5-1-5-RELEASE netbsd-5-2-2-RELEASE netbsd-5-1-4-RELEASE netbsd-5-2-1-RELEASE netbsd-5-1-3-RELEASE netbsd-5-2-RELEASE netbsd-5-2-RC1 netbsd-5-1-2-RELEASE netbsd-5-1-1-RELEASE jruoho-x86intr-base matt-mips64-premerge-20101231 matt-nb5-mips64-premerge-20101231 matt-nb5-pq3-base uebayasi-xip-base6 uebayasi-xip-base5 netbsd-5-1-RELEASE uebayasi-xip-base4 uebayasi-xip-base3 yamt-nfs-mp-base11 netbsd-5-1-RC4 matt-nb5-mips64-k15 uebayasi-xip-base2 yamt-nfs-mp-base10 netbsd-5-1-RC3 netbsd-5-1-RC2 uebayasi-xip-base1 netbsd-5-1-RC1 yamt-nfs-mp-base9 uebayasi-xip-base netbsd-5-0-2-RELEASE matt-nb5-mips64-premerge-20091211 matt-premerge-20091211 yamt-nfs-mp-base8 matt-nb5-mips64-u2-k2-k4-k7-k8-k9 matt-nb4-mips64-k7-u2a-k9b matt-nb5-mips64-u1-k1-k5 yamt-nfs-mp-base7 netbsd-5-0-1-RELEASE jymxensuspend-base yamt-nfs-mp-base6 yamt-nfs-mp-base5 yamt-nfs-mp-base4 jym-xensuspend-nbase yamt-nfs-mp-base3 nick-hppapmap-base4 nick-hppapmap-base3 netbsd-5-0-RELEASE netbsd-5-0-RC4 netbsd-5-0-RC3 nick-hppapmap-base2 netbsd-5-0-RC2 jym-xensuspend-base netbsd-5-0-RC1 haad-dm-base2 haad-nbase2 ad-audiomp2-base netbsd-5-base nick-hppapmap-base matt-mips64-base2 haad-dm-base1 wrstuden-revivesa-base-4 wrstuden-revivesa-base-3 wrstuden-revivesa-base-2 haad-dm-base wrstuden-revivesa-base-1 simonb-wapbl-nbase yamt-pf42-base4 simonb-wapbl-base yamt-pf42-base3 hpcarm-cleanup-nbase yamt-pf42-baseX yamt-pf42-base2 yamt-nfs-mp-base2 wrstuden-revivesa-base yamt-nfs-mp-base yamt-pf42-base ad-socklock-base1 yamt-lazymbuf-base15 yamt-lazymbuf-base14 keiichi-mipv6-nbase mjf-devfs2-base nick-net80211-sync-base keiichi-mipv6-base bouyer-xeni386-nbase bouyer-xeni386-base matt-armv6-nbase mjf-devfs-base hpcarm-cleanup-base
|
#
1.51 |
|
18-Jan-2008 |
yamt |
branches: 1.51.28; 1.51.32; 1.51.38; 1.51.40; push pmap_clear_reference calls into pdpolicy code, where reference bits actually matter.
|
Revision tags: matt-armv6-base
|
#
1.50 |
|
02-Jan-2008 |
ad |
Merge vmlocking2 to head.
|
Revision tags: vmlocking2-base3
|
#
1.49 |
|
20-Dec-2007 |
ad |
Specify PR_LARGECACHE for anon_cache (which is insanely busy).
|
Revision tags: yamt-kmem-base3 cube-autoconf-base yamt-kmem-base2 yamt-kmem-base vmlocking2-base2 reinoud-bufcleanup-nbase vmlocking2-base1 bouyer-xenamd64-base2 vmlocking-nbase bouyer-xenamd64-base jmcneill-pm-base reinoud-bufcleanup-base
|
#
1.48 |
|
13-Nov-2007 |
yamt |
branches: 1.48.2; 1.48.6; g/c unused uvm_anon_pool.
|
#
1.47 |
|
07-Nov-2007 |
ad |
Merge from vmlocking:
- pool_cache changes. - Debugger/procfs locking fixes. - Other minor changes.
|
Revision tags: jmcneill-base yamt-x86pmap-base4 yamt-x86pmap-base3 vmlocking-base
|
#
1.46 |
|
11-Oct-2007 |
ad |
branches: 1.46.2; 1.46.4; Remove LOCK_ASSERT(!simple_lock_held(&foo));
|
Revision tags: nick-csl-alignment-base5 yamt-x86pmap-base2 yamt-x86pmap-base matt-mips64-base
|
#
1.45 |
|
21-Jul-2007 |
ad |
branches: 1.45.4; 1.45.6; 1.45.8; 1.45.10; Merge unobtrusive locking changes from the vmlocking branch.
|
Revision tags: nick-csl-alignment-base yamt-idlelwp-base8 thorpej-atomic-base mjf-ufs-trans-base
|
#
1.44 |
|
12-Mar-2007 |
ad |
branches: 1.44.8; Pass an ipl argument to pool_init/POOL_INIT to be used when initializing the pool's lock.
|
Revision tags: ad-audiomp-base
|
#
1.43 |
|
22-Feb-2007 |
thorpej |
branches: 1.43.4; TRUE -> true, FALSE -> false
|
#
1.42 |
|
21-Feb-2007 |
thorpej |
Replace the Mach-derived boolean_t type with the C99 bool type. A future commit will replace use of TRUE and FALSE with true and false.
|
Revision tags: netbsd-4-0-1-RELEASE wrstuden-fixsa-newbase wrstuden-fixsa-base-1 netbsd-4-0-RELEASE netbsd-4-0-RC5 matt-nb4-arm-base netbsd-4-0-RC4 netbsd-4-0-RC3 netbsd-4-0-RC2 netbsd-4-0-RC1 wrstuden-fixsa-base post-newlock2-merge newlock2-nbase yamt-splraiseipl-base5 yamt-splraiseipl-base4 yamt-splraiseipl-base3 newlock2-base netbsd-4-base
|
#
1.41 |
|
01-Nov-2006 |
yamt |
branches: 1.41.4; remove some __unused from function parameters.
|
Revision tags: yamt-splraiseipl-base2
|
#
1.40 |
|
12-Oct-2006 |
christos |
- sprinkle __unused on function decls. - fix a couple of unused bugs - no more -Wno-unused for i386
|
Revision tags: yamt-splraiseipl-base
|
#
1.39 |
|
15-Sep-2006 |
yamt |
branches: 1.39.2; merge yamt-pdpolicy branch. - separate page replacement policy from the rest of kernel - implement an alternative replacement policy
|
Revision tags: abandoned-netbsd-4-base yamt-pdpolicy-base9 yamt-pdpolicy-base8 yamt-pdpolicy-base7 yamt-pdpolicy-base6 chap-midi-nbase gdamore-uart-base simonb-timcounters-final yamt-pdpolicy-base5 chap-midi-base yamt-pdpolicy-base4 yamt-pdpolicy-base3 peter-altq-base yamt-pdpolicy-base2 elad-kernelauth-base yamt-pdpolicy-base yamt-uio_vmspace-base5 simonb-timecounters-base rpaulo-netinet-merge-pcb-base
|
#
1.38 |
|
11-Dec-2005 |
christos |
branches: 1.38.8; 1.38.20; merge ktrace-lwp.
|
Revision tags: yamt-readahead-base3 yamt-readahead-base2 yamt-readahead-pervnode yamt-readahead-perfile yamt-readahead-base yamt-vop-base3 yamt-vop-base2 thorpej-vnode-attr-base yamt-vop-base ktrace-lwp-base
|
#
1.37 |
|
13-Sep-2005 |
yamt |
wrap swap related code by #ifdef VMSWAP. always #define VMSWAP for now.
|
#
1.36 |
|
31-Jul-2005 |
yamt |
revert "defflag VMSWAP" changes for now. there seems to be far more people who don't want to edit their kernel config files than i thought.
|
#
1.35 |
|
30-Jul-2005 |
yamt |
defflag VMSWAP.
|
#
1.34 |
|
27-Jun-2005 |
thorpej |
branches: 1.34.2; Use ANSI function decls.
|
#
1.33 |
|
11-May-2005 |
yamt |
allocate anons on-demand, rather than reserving static amount of them on boot/swapon.
|
Revision tags: kent-audio2-base
|
#
1.32 |
|
01-Apr-2005 |
yamt |
merge yamt-km branch. - don't use managed mappings/backing objects for wired memory allocations. save some resources like pv_entry. also fix (most of) PR/27030. - simplify kernel memory management API. - simplify pmap bootstrap of some ports. - some related cleanups.
|
Revision tags: netbsd-3-1-1-RELEASE netbsd-3-0-3-RELEASE netbsd-3-1-RELEASE netbsd-3-0-2-RELEASE netbsd-3-1-RC4 netbsd-3-1-RC3 netbsd-3-1-RC2 netbsd-3-1-RC1 netbsd-3-0-1-RELEASE netbsd-3-0-RELEASE netbsd-3-0-RC6 netbsd-3-0-RC5 netbsd-3-0-RC4 netbsd-3-0-RC3 netbsd-3-0-RC2 netbsd-3-0-RC1 yamt-km-base4 yamt-km-base3 netbsd-3-base yamt-km-base2 yamt-km-base kent-audio1-beforemerge kent-audio1-base
|
#
1.31 |
|
01-Sep-2004 |
yamt |
branches: 1.31.4; 1.31.6; uvm_pagefree: when orphaning an A->K loaned page, - decrement uvmexp.anonpages as it's no longer an anon page. - null out anon->u.an_page as the anon no longer own the page. uvm_anfree: add related assertions.
|
#
1.30 |
|
01-Sep-2004 |
yamt |
uvm_anfree: remove a comment which is no longer true.
|
#
1.29 |
|
05-May-2004 |
yamt |
fix a amap_wirerange deadlock problem by re-introducing PG_RELEASED for anon pages. PR/23171 from Christian Limpach. for details, see discussion filed in the PR database.
uvm_anon_release: a new function to free anon-owned PG_RELEASED page. uvm_anfree: we can't wait for the page here because the caller might hold amap lock. instead, just mark the page as PG_RELEASED. who unbusy the page should check the PG_RELEASED. uvm_aio_aiodone: uvm_anon_release() instead of uvm_page_unbusy() if appropriate. uvmfault_anonget: check PG_RELEASED.
|
Revision tags: netbsd-2-0-base
|
#
1.28 |
|
24-Mar-2004 |
junyoung |
branches: 1.28.2; Nuke __P().
|
#
1.27 |
|
06-Jan-2004 |
chs |
fix lock initialization in uvm_anon_add(). from PR 23831.
|
#
1.26 |
|
28-Aug-2003 |
pk |
When retiring a swap device with marked bad blocks on it we should update the `# swap page in use' and `# swap page only' counters. However, at the time of swap device removal we can no longer figure out how many of the bad swap pages are actually also `swap only' pages.
So, on swap I/O errors arrange things to not include the bad swap pages in the `swpgonly' counter as follows: uvm_swap_markbad() decrements `swpgonly' by the number of bad pages, and the various VM object deallocation routines do not decrement `swpgonly' for swap slots marked as SWSLOT_BAD.
|
#
1.25 |
|
11-Aug-2003 |
pk |
uao_pagein_page() & anon_pagein(): * return failure if the page cannot be retrieved. * wakeup any waiters when releasing a page after successful page in.
|
#
1.24 |
|
11-Aug-2003 |
pk |
Only deactivate pages if their wired count is zero.
|
#
1.23 |
|
11-Aug-2003 |
pk |
Make sure to call uvm_swap_free() and uvm_swap_markbad() with valid (i.e. positive) slot numbers.
|
Revision tags: nathanw_sa_before_merge fvdl_fs64_base gmcgarry_ctxsw_base gmcgarry_ucred_base nathanw_sa_base kqueue-aftermerge kqueue-beforemerge kqueue-base
|
#
1.22 |
|
21-Sep-2002 |
chs |
branches: 1.22.6; add missing anon lock around call to uvm_anon_lockloanpg().
|
Revision tags: netbsd-1-6-PATCH002-RELEASE netbsd-1-6-PATCH002 netbsd-1-6-PATCH002-RC4 netbsd-1-6-PATCH002-RC3 netbsd-1-6-PATCH002-RC2 netbsd-1-6-PATCH002-RC1 netbsd-1-6-PATCH001 netbsd-1-6-PATCH001-RELEASE netbsd-1-6-PATCH001-RC3 netbsd-1-6-PATCH001-RC2 netbsd-1-6-PATCH001-RC1 netbsd-1-6-RELEASE netbsd-1-6-RC3 netbsd-1-6-RC2 netbsd-1-6-RC1 netbsd-1-6-base gehenna-devsw-base eeh-devprop-base newlock-base ifpoll-base thorpej-mips-cache-base
|
#
1.21 |
|
10-Nov-2001 |
lukem |
branches: 1.21.4; add RCSIDs, and in some cases, slightly cleanup #include order
|
#
1.20 |
|
06-Nov-2001 |
chs |
several changes prompted by loaning problems: - fix the loaned case in uvm_pagefree(). - redo uvmexp.swpgonly accounting to work with page loaning. add an assertion before each place we adjust uvmexp.swpgonly. - fix uvm_km_pgremove() to always free any swap space associated with the range being removed. - get rid of UVM_LOAN_WIRED flag. instead, we just make sure that pages loaned to the kernel are never on the page queues. this allows us to assert that pages are not loaned and wired at the same time. - add yet more assertions.
|
#
1.19 |
|
21-Oct-2001 |
chs |
branches: 1.19.2; add some missing spinlocks.
|
Revision tags: thorpej-devvp-base3 thorpej-devvp-base2 post-chs-ubcperf
|
#
1.18 |
|
15-Sep-2001 |
chs |
a whole bunch of changes to improve performance and robustness under load:
- remove special treatment of pager_map mappings in pmaps. this is required now, since I've removed the globals that expose the address range. pager_map now uses pmap_kenter_pa() instead of pmap_enter(), so there's no longer any need to special-case it. - eliminate struct uvm_vnode by moving its fields into struct vnode. - rewrite the pageout path. the pager is now responsible for handling the high-level requests instead of only getting control after a bunch of work has already been done on its behalf. this will allow us to UBCify LFS, which needs tighter control over its pages than other filesystems do. writing a page to disk no longer requires making it read-only, which allows us to write wired pages without causing all kinds of havoc. - use a new PG_PAGEOUT flag to indicate that a page should be freed on behalf of the pagedaemon when it's unlocked. this flag is very similar to PG_RELEASED, but unlike PG_RELEASED, PG_PAGEOUT can be cleared if the pageout fails due to eg. an indirect-block buffer being locked. this allows us to remove the "version" field from struct vm_page, and together with shrinking "loan_count" from 32 bits to 16, struct vm_page is now 4 bytes smaller. - no longer use PG_RELEASED for swap-backed pages. if the page is busy because it's being paged out, we can't release the swap slot to be reallocated until that write is complete, but unlike with vnodes we don't keep a count of in-progress writes so there's no good way to know when the write is done. instead, when we need to free a busy swap-backed page, just sleep until we can get it busy ourselves. - implement a fast-path for extending writes which allows us to avoid zeroing new pages. this substantially reduces cpu usage. - encapsulate the data used by the genfs code in a struct genfs_node, which must be the first element of the filesystem-specific vnode data for filesystems which use genfs_{get,put}pages(). - eliminate many of the UVM pagerops, since they aren't needed anymore now that the pager "put" operation is a higher-level operation. - enhance the genfs code to allow NFS to use the genfs_{get,put}pages instead of a modified copy. - clean up struct vnode by removing all the fields that used to be used by the vfs_cluster.c code (which we don't use anymore with UBC). - remove kmem_object and mb_object since they were useless. instead of allocating pages to these objects, we now just allocate pages with no object. such pages are mapped in the kernel until they are freed, so we can use the mapping to find the page to free it. this allows us to remove splvm() protection in several places.
The sum of all these changes improves write throughput on my decstation 5000/200 to within 1% of the rate of NetBSD 1.5 and reduces the elapsed time for "make release" of a NetBSD 1.5 source tree on my 128MB pc to 10% less than a 1.5 kernel took.
|
Revision tags: pre-chs-ubcperf thorpej-devvp-base
|
#
1.17 |
|
25-May-2001 |
chs |
branches: 1.17.2; 1.17.4; remove trailing whitespace.
|
Revision tags: thorpej_scsipi_beforemerge thorpej_scsipi_nbase thorpej_scsipi_base
|
#
1.16 |
|
10-Mar-2001 |
chs |
eliminate the VM_PAGER_* error codes in favor of the traditional E* codes. the mapping is:
VM_PAGER_OK 0 VM_PAGER_BAD <unused> VM_PAGER_FAIL <unused> VM_PAGER_PEND 0 (see below) VM_PAGER_ERROR EIO VM_PAGER_AGAIN EAGAIN VM_PAGER_UNLOCK EBUSY VM_PAGER_REFAULT ERESTART
for async i/o requests, it used to be possible for the request to be convert to sync, and the pager would return VM_PAGER_OK or VM_PAGER_PEND to indicate whether the caller should perform post-i/o cleanup. this is no longer allowed; pagers must now return 0 to indicate that the async i/o was successfully started, and the caller never needs to worry about doing the post-i/o cleanup.
|
#
1.15 |
|
18-Feb-2001 |
chs |
branches: 1.15.2; clean up DIAGNOSTIC checks, use KASSERT().
|
#
1.14 |
|
28-Jan-2001 |
thorpej |
Page scanner improvements, behavior is actually a bit more like Mach VM's now. Specific changes: - Pages now need not have all of their mappings removed before being put on the inactive list. They only need to have the "referenced" attribute cleared. This makes putting pages onto the inactive list much more efficient. In order to eliminate redundant clearings of "refrenced", callers of uvm_pagedeactivate() must now do this themselves. - When checking the "modified" attribute for a page (for clearing PG_CLEAN), make sure to only do it if PG_CLEAN is currently set on the page (saves a potentially expensive pmap operation). - When scanning the inactive list, if a page is referenced, reactivate it (this part was actually added in uvm_pdaemon.c,v 1.27). This now works properly now that pages on the inactive list are allowed to have mappings. - When scanning the inactive list and considering a page for freeing, remove all mappings, and then check the "modified" attribute if the page is marked PG_CLEAN. - When scanning the active list, if the page was referenced since its last sweep by the scanner, don't deactivate it. (This part was actually added in uvm_pdaemon.c,v 1.28.)
These changes greatly improve interactive performance during moderate to high memory and I/O load.
|
#
1.13 |
|
23-Jan-2001 |
thorpej |
Change uvm_analloc() to return a locked anon, update all callers, and fix an anon locking protocol error in uvm_loanzero().
|
#
1.12 |
|
23-Jan-2001 |
thorpej |
Sprinkle some assertions: amap_free(): Assert that the amap is locked. amap_share_protect(): Assert that the amap is locked. amap_wipeout(): Assert that the amap is locked. uvm_anfree(): Assert that the anon has a reference count of 0 and is not locked. uvm_anon_lockloanpg(): Assert that the anon is locked. anon_pagein(): Assert that the anon is locked. uvmfault_anonget(): Assert that the anon is locked. uvm_pagealloc_strat(): Assert that the uobj or the anon is locked
And fix the problems these have uncovered: amap_cow_now(): Lock the new anon after allocating it, and unref and unlock it (rather than lock!) before freeing it in case of an error condition. This should fix a problem reported by Dan Carosone using cdrecord on an i386 MP kernel. uvm_fault(): Case1B -- Lock the new anon afer allocating it, and unlock it later when we unlock the old anon. Case2 -- Lock the new anon after allocating it, and unlock it later by passing it to uvmfault_unlockall() (we set anon to NULL if we're not doing a promote fault).
|
#
1.11 |
|
27-Dec-2000 |
chs |
when we fail to allocate anons to represent new swap space, just return an error rather than panicing.
|
#
1.10 |
|
25-Nov-2000 |
chs |
lots of cleanup: use queue.h macros and KASSERT(). address amap offsets in pages instead of bytes. make amap_ref() and amap_unref() take an amap, offset and length instead of a vm_map_entry_t. improve whitespace and comments.
|
#
1.9 |
|
06-Aug-2000 |
thorpej |
Do something sane with a DIAGNOSTIC condition in an non-DIAGNOSTIC kernel.
|
#
1.8 |
|
05-Aug-2000 |
thorpej |
Correct a comment about locking wrt. uvmfault_anonget().
|
#
1.7 |
|
27-Jun-2000 |
mrg |
remove include of <vm/vm.h>
|
#
1.6 |
|
26-Jun-2000 |
mrg |
remove/move more mach vm header files:
<vm/pglist.h> -> <uvm/uvm_pglist.h> <vm/vm_inherit.h> -> <uvm/uvm_inherit.h> <vm/vm_kern.h> -> into <uvm/uvm_extern.h> <vm/vm_object.h> -> nothing <vm/vm_pager.h> -> into <uvm/uvm_pager.h>
also includes a bunch of <vm/vm_page.h> include removals (due to redudancy with <vm/vm.h>), and a scattering of other similar headers.
|
Revision tags: netbsd-1-5-base minoura-xpg4dl-base chs-ubc2-newbase
|
#
1.5 |
|
11-Jan-2000 |
chs |
branches: 1.5.4; add support for ``swapctl -d'' (removing swap space). improve handling of i/o errors in swap space.
reviewed by: Chuck Cranor
|
Revision tags: wrstuden-devbsize-19991221 wrstuden-devbsize-base comdex-fall-1999-base fvdl-softdep-base
|
#
1.4 |
|
12-Sep-1999 |
chs |
branches: 1.4.2; eliminate the PMAP_NEW option by making it required for all ports. ports which previously had no support for PMAP_NEW now implement the pmap_k* interfaces as wrappers around the non-k versions.
|
#
1.3 |
|
14-Aug-1999 |
ross |
In uvm_anon_init() and uvm_anon_add(), initialize the ref count lock.
|
Revision tags: netbsd-1-4-PATCH003 netbsd-1-4-PATCH002 kame_141_19991130 netbsd-1-4-PATCH001 kame_14_19990705 kame_14_19990628 chs-ubc2-base netbsd-1-4-RELEASE netbsd-1-4-base
|
#
1.2 |
|
26-Mar-1999 |
chs |
add uvmexp.swpgonly and use it to detect out-of-swap conditions.
|
#
1.1 |
|
24-Jan-1999 |
chuck |
cleanup/reorg: - break anon related functions out of uvm_amap.c and put them in their own file (uvm_anon.c). includes break up uvm_anon_init into an amap and an an anon init function - ensure that only functions within the amap module access amap structure fields (add macros to amap api as needed)
|
#
1.76 |
|
20-Mar-2020 |
ad |
Go back to freeing struct vm_anon one by one. There may have been an advantage circa ~2008 but there isn't now.
|
#
1.75 |
|
14-Mar-2020 |
ad |
Make page waits (WANTED vs BUSY) interlocked by pg->interlock. Gets RW locks out of the equation for sleep/wakeup, and allows observing+waiting for busy pages when holding only a read lock. Proposed on tech-kern.
|
Revision tags: ad-namecache-base3
|
#
1.74 |
|
24-Feb-2020 |
rin |
0x%#x --> %#x for non-external codes. Also, stop mixing up 0x%x and %#x in single files as far as possible.
|
#
1.73 |
|
23-Feb-2020 |
ad |
Use rw_lock_op().
|
#
1.72 |
|
23-Feb-2020 |
ad |
UVM locking changes, proposed on tech-kern:
- Change the lock on uvm_object, vm_amap and vm_anon to be a RW lock. - Break v_interlock and vmobjlock apart. v_interlock remains a mutex. - Do partial PV list locking in the x86 pmap. Others to follow later.
|
Revision tags: ad-namecache-base2 ad-namecache-base1
|
#
1.71 |
|
15-Jan-2020 |
ad |
Merge from yamt-pagecache (after much testing):
- Reduce unnecessary page scan in putpages esp. when an object has a ton of pages cached but only a few of them are dirty.
- Reduce the number of pmap operations by tracking page dirtiness more precisely in uvm layer.
|
Revision tags: ad-namecache-base
|
#
1.70 |
|
31-Dec-2019 |
ad |
branches: 1.70.2; - Add and use wrapper functions that take and acquire page interlocks, and pairs of page interlocks. Require that the page interlock be held over calls to uvm_pageactivate(), uvm_pagewire() and similar.
- Solve the concurrency problem with page replacement state. Rather than updating the global state synchronously, set an intended state on individual pages (active, inactive, enqueued, dequeued) while holding the page interlock. After the interlock is released put the pages on a 128 entry per-CPU queue for their state changes to be made real in batch. This results in in a ~400 fold decrease in contention on my test system. Proposed on tech-kern but modified to use the page interlock rather than atomics to synchronise as it's much easier to maintain that way, and cheaper.
|
#
1.69 |
|
13-Dec-2019 |
ad |
Break the global uvm_pageqlock into a per-page identity lock and a private lock for use of the pagedaemon policy code. Discussed on tech-kern.
PR kern/54209: NetBSD 8 large memory performance extremely low PR kern/54210: NetBSD-8 processes presumably not exiting PR kern/54727: writing a large file causes unreasonable system behaviour
|
#
1.68 |
|
02-Dec-2019 |
chs |
fix the build for when UVMHIST is enabled.
|
#
1.67 |
|
01-Dec-2019 |
uwe |
Add missing #include <sys/atomic.h>
|
#
1.66 |
|
01-Dec-2019 |
ad |
Free pages in batch instead of taking uvm_pageqlock for each one.
|
#
1.65 |
|
01-Dec-2019 |
ad |
- Adjust uvmexp.swpgonly with atomics, and make uvm_swap_data_lock static. - A bit more __cacheline_aligned on mutexes.
|
Revision tags: netbsd-9-0-RELEASE netbsd-9-0-RC2 netbsd-9-0-RC1 phil-wifi-20191119 netbsd-9-base phil-wifi-20190609 isaki-audio2-base pgoyette-compat-merge-20190127 pgoyette-compat-20190127 pgoyette-compat-20190118 pgoyette-compat-1226 pgoyette-compat-1126 pgoyette-compat-1020 pgoyette-compat-0930 pgoyette-compat-0906 pgoyette-compat-0728 phil-wifi-base pgoyette-compat-0625 pgoyette-compat-0521 pgoyette-compat-0502 pgoyette-compat-0422 pgoyette-compat-0415 pgoyette-compat-0407 pgoyette-compat-0330 pgoyette-compat-0322 pgoyette-compat-0315 pgoyette-compat-base tls-maxphys-base-20171202
|
#
1.64 |
|
28-Oct-2017 |
pgoyette |
Update the kernhist(9) kernel history code to address issues identified in PR kern/52639, as well as some general cleaning-up...
(As proposed on tech-kern@ with additional changes and enhancements.)
Details of changes:
* All history arguments are now stored as uintmax_t values[1], both in the kernel and in the structures used for exporting the history data to userland via sysctl(9). This avoids problems on some architectures where passing a 64-bit (or larger) value to printf(3) can cause it to process the value as multiple arguments. (This can be particularly problematic when printf()'s format string is not a literal, since in that case the compiler cannot know how large each argument should be.)
* Update the data structures used for exporting kernel history data to include a version number as well as the length of history arguments.
* All [2] existing users of kernhist(9) have had their format strings updated. Each format specifier now includes an explicit length modifier 'j' to refer to numeric values of the size of uintmax_t.
* All [2] existing users of kernhist(9) have had their format strings updated to replace uses of "%p" with "%#jx", and the pointer arguments are now cast to (uintptr_t) before being subsequently cast to (uintmax_t). This is needed to avoid compiler warnings about casting "pointer to integer of a different size."
* All [2] existing users of kernhist(9) have had instances of "%s" or "%c" format strings replaced with numeric formats; several instances of mis-match between format string and argument list have been fixed.
* vmstat(1) has been modified to handle the new size of arguments in the history data as exported by sysctl(9).
* vmstat(1) now provides a warning message if the history requested with the -u option does not exist (previously, this condition was silently ignored, with only a single blank line being printed).
* vmstat(1) now checks the version and argument length included in the data exported via sysctl(9) and exits if they do not match the values with which vmstat was built.
* The kernhist(9) man-page has been updated to note the additional requirements imposed on the format strings, along with several other minor changes and enhancements.
[1] It would have been possible to use an explicit length (for example, uint64_t) for the history arguments. But that would require another "rototill" of all the users in the future when we add support for an architecture that supports a larger size. Also, the printf(3) format specifiers for explicitly-sized values, such as "%"PRIu64, are much more verbose (and less aesthetically appealing, IMHO) than simply using "%ju".
[2] I've tried very hard to find "all [the] existing users of kernhist(9)" but it is possible that I've missed some of them. I would be glad to update any stragglers that anyone identifies.
|
Revision tags: netbsd-7-2-RELEASE netbsd-7-1-2-RELEASE netbsd-7-1-1-RELEASE nick-nhusb-base-20170825 perseant-stdc-iso10646-base netbsd-8-base prg-localcount2-base3 prg-localcount2-base2 prg-localcount2-base1 prg-localcount2-base pgoyette-localcount-20170426 bouyer-socketcan-base1 jdolecek-ncq-base pgoyette-localcount-20170320 netbsd-7-1-RELEASE netbsd-7-1-RC2 nick-nhusb-base-20170204 netbsd-7-nhusb-base-20170116 bouyer-socketcan-base pgoyette-localcount-20170107 netbsd-7-1-RC1 nick-nhusb-base-20161204 pgoyette-localcount-20161104 netbsd-7-0-2-RELEASE nick-nhusb-base-20161004 localcount-20160914 netbsd-7-nhusb-base pgoyette-localcount-20160806 pgoyette-localcount-20160726 pgoyette-localcount-base nick-nhusb-base-20160907 nick-nhusb-base-20160529 netbsd-7-0-1-RELEASE nick-nhusb-base-20160422 nick-nhusb-base-20160319 nick-nhusb-base-20151226 netbsd-7-0-RELEASE nick-nhusb-base-20150921 netbsd-7-0-RC3 netbsd-7-0-RC2 netbsd-7-0-RC1 nick-nhusb-base-20150606 nick-nhusb-base-20150406 nick-nhusb-base netbsd-7-base yamt-pagecache-base9 tls-earlyentropy-base riastradh-xf86-video-intel-2-7-1-pre-2-21-15 riastradh-drm2-base3 rmind-smpnet-nbase rmind-smpnet-base tls-maxphys-base
|
#
1.63 |
|
25-Oct-2013 |
martin |
branches: 1.63.22; Mark a diagnostic-only variable
|
Revision tags: netbsd-6-0-6-RELEASE netbsd-6-1-5-RELEASE netbsd-6-1-4-RELEASE netbsd-6-0-5-RELEASE netbsd-6-1-3-RELEASE netbsd-6-0-4-RELEASE netbsd-6-1-2-RELEASE netbsd-6-0-3-RELEASE netbsd-6-1-1-RELEASE riastradh-drm2-base2 riastradh-drm2-base1 riastradh-drm2-base netbsd-6-0-2-RELEASE netbsd-6-1-RELEASE netbsd-6-1-RC4 netbsd-6-1-RC3 agc-symver-base netbsd-6-1-RC2 netbsd-6-1-RC1 yamt-pagecache-base8 netbsd-6-0-1-RELEASE yamt-pagecache-base7 matt-nb6-plus-nbase yamt-pagecache-base6 netbsd-6-0-RELEASE netbsd-6-0-RC2 matt-nb6-plus-base netbsd-6-0-RC1 jmcneill-usbmp-base10 yamt-pagecache-base5 jmcneill-usbmp-base9 yamt-pagecache-base4 jmcneill-usbmp-base8 jmcneill-usbmp-base7 jmcneill-usbmp-base6 jmcneill-usbmp-base5 jmcneill-usbmp-base4 jmcneill-usbmp-base3 jmcneill-usbmp-pre-base2 jmcneill-usbmp-base2 netbsd-6-base jmcneill-usbmp-base jmcneill-audiomp3-base yamt-pagecache-base3 yamt-pagecache-base2 yamt-pagecache-base
|
#
1.62 |
|
18-Aug-2011 |
yamt |
branches: 1.62.2; 1.62.12; 1.62.16; uvm_anon_release: - don't forget to call uvm_anon_dispose. - simplify code a little.
|
#
1.61 |
|
18-Aug-2011 |
yamt |
uvm_anon_freelst: - clear an_link/an_ref when deferring anon disposal. otherwise others can see bogus an_ref. - fix the code to remove anon from the list.
|
#
1.60 |
|
14-Aug-2011 |
rmind |
uvm_anon_freelst: do not free PG_RELEASED pages (change uvm_anon_dispose() to indicate them with a return value).
|
#
1.59 |
|
06-Aug-2011 |
rmind |
- Rework uvm_anfree() into uvm_anon_freelst(), which always drops the lock. - Free anons in uvm_anon_freelst() without lock held. - Mechanic sync to unused loaning code.
|
#
1.58 |
|
05-Jul-2011 |
yamt |
reduce the number of atomic ops in common cases. it's exceptional for anons to remain longer than amap.
|
#
1.57 |
|
24-Jun-2011 |
rmind |
Fix uvmplock regression - a lock against oneself case in amap_swap_off(). Happens since amap is NULL in uvmfault_anonget(), so uvmfault_unlockall() keeps anon locked, when it should unlock it.
|
#
1.56 |
|
24-Jun-2011 |
yamt |
uvm_anon_release: fix a locking error after the rmind-uvmplock merge
|
#
1.55 |
|
17-Jun-2011 |
rmind |
Improve comments on uvm_anon.c, tidy up slightly. No functional changes.
|
#
1.54 |
|
12-Jun-2011 |
rmind |
Welcome to 5.99.53! Merge rmind-uvmplock branch:
- Reorganize locking in UVM and provide extra serialisation for pmap(9). New lock order: [vmpage-owner-lock] -> pmap-lock.
- Simplify locking in some pmap(9) modules by removing P->V locking.
- Use lock object on vmobjlock (and thus vnode_t::v_interlock) to share the locks amongst UVM objects where necessary (tmpfs, layerfs, unionfs).
- Rewrite and optimise x86 TLB shootdown code, make it simpler and cleaner. Add TLBSTATS option for x86 to collect statistics about TLB shootdowns.
- Unify /dev/mem et al in MI code and provide required locking (removes kernel-lock on some ports). Also, avoid cache-aliasing issues.
Thanks to Andrew Doran and Joerg Sonnenberger, as their initial patches formed the core changes of this branch.
|
Revision tags: rmind-uvmplock-nbase cherry-xenmp-base rmind-uvmplock-base
|
#
1.53 |
|
23-Apr-2011 |
rmind |
branches: 1.53.2; Replace "malloc" in comments, remove unnecessary header inclusions.
|
Revision tags: uebayasi-xip-base7 bouyer-quota2-nbase bouyer-quota2-base
|
#
1.52 |
|
02-Feb-2011 |
chuck |
udpate license clauses on my code to match the new-style BSD licenses. based on diff that rmind@ sent me.
no functional change with this commit.
|
Revision tags: netbsd-5-2-3-RELEASE netbsd-5-1-5-RELEASE netbsd-5-2-2-RELEASE netbsd-5-1-4-RELEASE netbsd-5-2-1-RELEASE netbsd-5-1-3-RELEASE netbsd-5-2-RELEASE netbsd-5-2-RC1 netbsd-5-1-2-RELEASE netbsd-5-1-1-RELEASE jruoho-x86intr-base matt-mips64-premerge-20101231 matt-nb5-mips64-premerge-20101231 matt-nb5-pq3-base uebayasi-xip-base6 uebayasi-xip-base5 netbsd-5-1-RELEASE uebayasi-xip-base4 uebayasi-xip-base3 yamt-nfs-mp-base11 netbsd-5-1-RC4 matt-nb5-mips64-k15 uebayasi-xip-base2 yamt-nfs-mp-base10 netbsd-5-1-RC3 netbsd-5-1-RC2 uebayasi-xip-base1 netbsd-5-1-RC1 yamt-nfs-mp-base9 uebayasi-xip-base netbsd-5-0-2-RELEASE matt-nb5-mips64-premerge-20091211 matt-premerge-20091211 yamt-nfs-mp-base8 matt-nb5-mips64-u2-k2-k4-k7-k8-k9 matt-nb4-mips64-k7-u2a-k9b matt-nb5-mips64-u1-k1-k5 yamt-nfs-mp-base7 netbsd-5-0-1-RELEASE jymxensuspend-base yamt-nfs-mp-base6 yamt-nfs-mp-base5 yamt-nfs-mp-base4 jym-xensuspend-nbase yamt-nfs-mp-base3 nick-hppapmap-base4 nick-hppapmap-base3 netbsd-5-0-RELEASE netbsd-5-0-RC4 netbsd-5-0-RC3 nick-hppapmap-base2 netbsd-5-0-RC2 jym-xensuspend-base netbsd-5-0-RC1 haad-dm-base2 haad-nbase2 ad-audiomp2-base netbsd-5-base nick-hppapmap-base matt-mips64-base2 haad-dm-base1 wrstuden-revivesa-base-4 wrstuden-revivesa-base-3 wrstuden-revivesa-base-2 haad-dm-base wrstuden-revivesa-base-1 simonb-wapbl-nbase yamt-pf42-base4 simonb-wapbl-base yamt-pf42-base3 hpcarm-cleanup-nbase yamt-pf42-baseX yamt-pf42-base2 yamt-nfs-mp-base2 wrstuden-revivesa-base yamt-nfs-mp-base yamt-pf42-base ad-socklock-base1 yamt-lazymbuf-base15 yamt-lazymbuf-base14 keiichi-mipv6-nbase mjf-devfs2-base nick-net80211-sync-base keiichi-mipv6-base bouyer-xeni386-nbase bouyer-xeni386-base matt-armv6-nbase mjf-devfs-base hpcarm-cleanup-base
|
#
1.51 |
|
18-Jan-2008 |
yamt |
branches: 1.51.28; 1.51.32; 1.51.38; 1.51.40; push pmap_clear_reference calls into pdpolicy code, where reference bits actually matter.
|
Revision tags: matt-armv6-base
|
#
1.50 |
|
02-Jan-2008 |
ad |
Merge vmlocking2 to head.
|
Revision tags: vmlocking2-base3
|
#
1.49 |
|
20-Dec-2007 |
ad |
Specify PR_LARGECACHE for anon_cache (which is insanely busy).
|
Revision tags: yamt-kmem-base3 cube-autoconf-base yamt-kmem-base2 yamt-kmem-base vmlocking2-base2 reinoud-bufcleanup-nbase vmlocking2-base1 bouyer-xenamd64-base2 vmlocking-nbase bouyer-xenamd64-base jmcneill-pm-base reinoud-bufcleanup-base
|
#
1.48 |
|
13-Nov-2007 |
yamt |
branches: 1.48.2; 1.48.6; g/c unused uvm_anon_pool.
|
#
1.47 |
|
07-Nov-2007 |
ad |
Merge from vmlocking:
- pool_cache changes. - Debugger/procfs locking fixes. - Other minor changes.
|
Revision tags: jmcneill-base yamt-x86pmap-base4 yamt-x86pmap-base3 vmlocking-base
|
#
1.46 |
|
11-Oct-2007 |
ad |
branches: 1.46.2; 1.46.4; Remove LOCK_ASSERT(!simple_lock_held(&foo));
|
Revision tags: nick-csl-alignment-base5 yamt-x86pmap-base2 yamt-x86pmap-base matt-mips64-base
|
#
1.45 |
|
21-Jul-2007 |
ad |
branches: 1.45.4; 1.45.6; 1.45.8; 1.45.10; Merge unobtrusive locking changes from the vmlocking branch.
|
Revision tags: nick-csl-alignment-base yamt-idlelwp-base8 thorpej-atomic-base mjf-ufs-trans-base
|
#
1.44 |
|
12-Mar-2007 |
ad |
branches: 1.44.8; Pass an ipl argument to pool_init/POOL_INIT to be used when initializing the pool's lock.
|
Revision tags: ad-audiomp-base
|
#
1.43 |
|
22-Feb-2007 |
thorpej |
branches: 1.43.4; TRUE -> true, FALSE -> false
|
#
1.42 |
|
21-Feb-2007 |
thorpej |
Replace the Mach-derived boolean_t type with the C99 bool type. A future commit will replace use of TRUE and FALSE with true and false.
|
Revision tags: netbsd-4-0-1-RELEASE wrstuden-fixsa-newbase wrstuden-fixsa-base-1 netbsd-4-0-RELEASE netbsd-4-0-RC5 matt-nb4-arm-base netbsd-4-0-RC4 netbsd-4-0-RC3 netbsd-4-0-RC2 netbsd-4-0-RC1 wrstuden-fixsa-base post-newlock2-merge newlock2-nbase yamt-splraiseipl-base5 yamt-splraiseipl-base4 yamt-splraiseipl-base3 newlock2-base netbsd-4-base
|
#
1.41 |
|
01-Nov-2006 |
yamt |
branches: 1.41.4; remove some __unused from function parameters.
|
Revision tags: yamt-splraiseipl-base2
|
#
1.40 |
|
12-Oct-2006 |
christos |
- sprinkle __unused on function decls. - fix a couple of unused bugs - no more -Wno-unused for i386
|
Revision tags: yamt-splraiseipl-base
|
#
1.39 |
|
15-Sep-2006 |
yamt |
branches: 1.39.2; merge yamt-pdpolicy branch. - separate page replacement policy from the rest of kernel - implement an alternative replacement policy
|
Revision tags: abandoned-netbsd-4-base yamt-pdpolicy-base9 yamt-pdpolicy-base8 yamt-pdpolicy-base7 yamt-pdpolicy-base6 chap-midi-nbase gdamore-uart-base simonb-timcounters-final yamt-pdpolicy-base5 chap-midi-base yamt-pdpolicy-base4 yamt-pdpolicy-base3 peter-altq-base yamt-pdpolicy-base2 elad-kernelauth-base yamt-pdpolicy-base yamt-uio_vmspace-base5 simonb-timecounters-base rpaulo-netinet-merge-pcb-base
|
#
1.38 |
|
11-Dec-2005 |
christos |
branches: 1.38.8; 1.38.20; merge ktrace-lwp.
|
Revision tags: yamt-readahead-base3 yamt-readahead-base2 yamt-readahead-pervnode yamt-readahead-perfile yamt-readahead-base yamt-vop-base3 yamt-vop-base2 thorpej-vnode-attr-base yamt-vop-base ktrace-lwp-base
|
#
1.37 |
|
13-Sep-2005 |
yamt |
wrap swap related code by #ifdef VMSWAP. always #define VMSWAP for now.
|
#
1.36 |
|
31-Jul-2005 |
yamt |
revert "defflag VMSWAP" changes for now. there seems to be far more people who don't want to edit their kernel config files than i thought.
|
#
1.35 |
|
30-Jul-2005 |
yamt |
defflag VMSWAP.
|
#
1.34 |
|
27-Jun-2005 |
thorpej |
branches: 1.34.2; Use ANSI function decls.
|
#
1.33 |
|
11-May-2005 |
yamt |
allocate anons on-demand, rather than reserving static amount of them on boot/swapon.
|
Revision tags: kent-audio2-base
|
#
1.32 |
|
01-Apr-2005 |
yamt |
merge yamt-km branch. - don't use managed mappings/backing objects for wired memory allocations. save some resources like pv_entry. also fix (most of) PR/27030. - simplify kernel memory management API. - simplify pmap bootstrap of some ports. - some related cleanups.
|
Revision tags: netbsd-3-1-1-RELEASE netbsd-3-0-3-RELEASE netbsd-3-1-RELEASE netbsd-3-0-2-RELEASE netbsd-3-1-RC4 netbsd-3-1-RC3 netbsd-3-1-RC2 netbsd-3-1-RC1 netbsd-3-0-1-RELEASE netbsd-3-0-RELEASE netbsd-3-0-RC6 netbsd-3-0-RC5 netbsd-3-0-RC4 netbsd-3-0-RC3 netbsd-3-0-RC2 netbsd-3-0-RC1 yamt-km-base4 yamt-km-base3 netbsd-3-base yamt-km-base2 yamt-km-base kent-audio1-beforemerge kent-audio1-base
|
#
1.31 |
|
01-Sep-2004 |
yamt |
branches: 1.31.4; 1.31.6; uvm_pagefree: when orphaning an A->K loaned page, - decrement uvmexp.anonpages as it's no longer an anon page. - null out anon->u.an_page as the anon no longer own the page. uvm_anfree: add related assertions.
|
#
1.30 |
|
01-Sep-2004 |
yamt |
uvm_anfree: remove a comment which is no longer true.
|
#
1.29 |
|
05-May-2004 |
yamt |
fix a amap_wirerange deadlock problem by re-introducing PG_RELEASED for anon pages. PR/23171 from Christian Limpach. for details, see discussion filed in the PR database.
uvm_anon_release: a new function to free anon-owned PG_RELEASED page. uvm_anfree: we can't wait for the page here because the caller might hold amap lock. instead, just mark the page as PG_RELEASED. who unbusy the page should check the PG_RELEASED. uvm_aio_aiodone: uvm_anon_release() instead of uvm_page_unbusy() if appropriate. uvmfault_anonget: check PG_RELEASED.
|
Revision tags: netbsd-2-0-base
|
#
1.28 |
|
24-Mar-2004 |
junyoung |
branches: 1.28.2; Nuke __P().
|
#
1.27 |
|
06-Jan-2004 |
chs |
fix lock initialization in uvm_anon_add(). from PR 23831.
|
#
1.26 |
|
28-Aug-2003 |
pk |
When retiring a swap device with marked bad blocks on it we should update the `# swap page in use' and `# swap page only' counters. However, at the time of swap device removal we can no longer figure out how many of the bad swap pages are actually also `swap only' pages.
So, on swap I/O errors arrange things to not include the bad swap pages in the `swpgonly' counter as follows: uvm_swap_markbad() decrements `swpgonly' by the number of bad pages, and the various VM object deallocation routines do not decrement `swpgonly' for swap slots marked as SWSLOT_BAD.
|
#
1.25 |
|
11-Aug-2003 |
pk |
uao_pagein_page() & anon_pagein(): * return failure if the page cannot be retrieved. * wakeup any waiters when releasing a page after successful page in.
|
#
1.24 |
|
11-Aug-2003 |
pk |
Only deactivate pages if their wired count is zero.
|
#
1.23 |
|
11-Aug-2003 |
pk |
Make sure to call uvm_swap_free() and uvm_swap_markbad() with valid (i.e. positive) slot numbers.
|
Revision tags: nathanw_sa_before_merge fvdl_fs64_base gmcgarry_ctxsw_base gmcgarry_ucred_base nathanw_sa_base kqueue-aftermerge kqueue-beforemerge kqueue-base
|
#
1.22 |
|
21-Sep-2002 |
chs |
branches: 1.22.6; add missing anon lock around call to uvm_anon_lockloanpg().
|
Revision tags: netbsd-1-6-PATCH002-RELEASE netbsd-1-6-PATCH002 netbsd-1-6-PATCH002-RC4 netbsd-1-6-PATCH002-RC3 netbsd-1-6-PATCH002-RC2 netbsd-1-6-PATCH002-RC1 netbsd-1-6-PATCH001 netbsd-1-6-PATCH001-RELEASE netbsd-1-6-PATCH001-RC3 netbsd-1-6-PATCH001-RC2 netbsd-1-6-PATCH001-RC1 netbsd-1-6-RELEASE netbsd-1-6-RC3 netbsd-1-6-RC2 netbsd-1-6-RC1 netbsd-1-6-base gehenna-devsw-base eeh-devprop-base newlock-base ifpoll-base thorpej-mips-cache-base
|
#
1.21 |
|
10-Nov-2001 |
lukem |
branches: 1.21.4; add RCSIDs, and in some cases, slightly cleanup #include order
|
#
1.20 |
|
06-Nov-2001 |
chs |
several changes prompted by loaning problems: - fix the loaned case in uvm_pagefree(). - redo uvmexp.swpgonly accounting to work with page loaning. add an assertion before each place we adjust uvmexp.swpgonly. - fix uvm_km_pgremove() to always free any swap space associated with the range being removed. - get rid of UVM_LOAN_WIRED flag. instead, we just make sure that pages loaned to the kernel are never on the page queues. this allows us to assert that pages are not loaned and wired at the same time. - add yet more assertions.
|
#
1.19 |
|
21-Oct-2001 |
chs |
branches: 1.19.2; add some missing spinlocks.
|
Revision tags: thorpej-devvp-base3 thorpej-devvp-base2 post-chs-ubcperf
|
#
1.18 |
|
15-Sep-2001 |
chs |
a whole bunch of changes to improve performance and robustness under load:
- remove special treatment of pager_map mappings in pmaps. this is required now, since I've removed the globals that expose the address range. pager_map now uses pmap_kenter_pa() instead of pmap_enter(), so there's no longer any need to special-case it. - eliminate struct uvm_vnode by moving its fields into struct vnode. - rewrite the pageout path. the pager is now responsible for handling the high-level requests instead of only getting control after a bunch of work has already been done on its behalf. this will allow us to UBCify LFS, which needs tighter control over its pages than other filesystems do. writing a page to disk no longer requires making it read-only, which allows us to write wired pages without causing all kinds of havoc. - use a new PG_PAGEOUT flag to indicate that a page should be freed on behalf of the pagedaemon when it's unlocked. this flag is very similar to PG_RELEASED, but unlike PG_RELEASED, PG_PAGEOUT can be cleared if the pageout fails due to eg. an indirect-block buffer being locked. this allows us to remove the "version" field from struct vm_page, and together with shrinking "loan_count" from 32 bits to 16, struct vm_page is now 4 bytes smaller. - no longer use PG_RELEASED for swap-backed pages. if the page is busy because it's being paged out, we can't release the swap slot to be reallocated until that write is complete, but unlike with vnodes we don't keep a count of in-progress writes so there's no good way to know when the write is done. instead, when we need to free a busy swap-backed page, just sleep until we can get it busy ourselves. - implement a fast-path for extending writes which allows us to avoid zeroing new pages. this substantially reduces cpu usage. - encapsulate the data used by the genfs code in a struct genfs_node, which must be the first element of the filesystem-specific vnode data for filesystems which use genfs_{get,put}pages(). - eliminate many of the UVM pagerops, since they aren't needed anymore now that the pager "put" operation is a higher-level operation. - enhance the genfs code to allow NFS to use the genfs_{get,put}pages instead of a modified copy. - clean up struct vnode by removing all the fields that used to be used by the vfs_cluster.c code (which we don't use anymore with UBC). - remove kmem_object and mb_object since they were useless. instead of allocating pages to these objects, we now just allocate pages with no object. such pages are mapped in the kernel until they are freed, so we can use the mapping to find the page to free it. this allows us to remove splvm() protection in several places.
The sum of all these changes improves write throughput on my decstation 5000/200 to within 1% of the rate of NetBSD 1.5 and reduces the elapsed time for "make release" of a NetBSD 1.5 source tree on my 128MB pc to 10% less than a 1.5 kernel took.
|
Revision tags: pre-chs-ubcperf thorpej-devvp-base
|
#
1.17 |
|
25-May-2001 |
chs |
branches: 1.17.2; 1.17.4; remove trailing whitespace.
|
Revision tags: thorpej_scsipi_beforemerge thorpej_scsipi_nbase thorpej_scsipi_base
|
#
1.16 |
|
10-Mar-2001 |
chs |
eliminate the VM_PAGER_* error codes in favor of the traditional E* codes. the mapping is:
VM_PAGER_OK 0 VM_PAGER_BAD <unused> VM_PAGER_FAIL <unused> VM_PAGER_PEND 0 (see below) VM_PAGER_ERROR EIO VM_PAGER_AGAIN EAGAIN VM_PAGER_UNLOCK EBUSY VM_PAGER_REFAULT ERESTART
for async i/o requests, it used to be possible for the request to be convert to sync, and the pager would return VM_PAGER_OK or VM_PAGER_PEND to indicate whether the caller should perform post-i/o cleanup. this is no longer allowed; pagers must now return 0 to indicate that the async i/o was successfully started, and the caller never needs to worry about doing the post-i/o cleanup.
|
#
1.15 |
|
18-Feb-2001 |
chs |
branches: 1.15.2; clean up DIAGNOSTIC checks, use KASSERT().
|
#
1.14 |
|
28-Jan-2001 |
thorpej |
Page scanner improvements, behavior is actually a bit more like Mach VM's now. Specific changes: - Pages now need not have all of their mappings removed before being put on the inactive list. They only need to have the "referenced" attribute cleared. This makes putting pages onto the inactive list much more efficient. In order to eliminate redundant clearings of "refrenced", callers of uvm_pagedeactivate() must now do this themselves. - When checking the "modified" attribute for a page (for clearing PG_CLEAN), make sure to only do it if PG_CLEAN is currently set on the page (saves a potentially expensive pmap operation). - When scanning the inactive list, if a page is referenced, reactivate it (this part was actually added in uvm_pdaemon.c,v 1.27). This now works properly now that pages on the inactive list are allowed to have mappings. - When scanning the inactive list and considering a page for freeing, remove all mappings, and then check the "modified" attribute if the page is marked PG_CLEAN. - When scanning the active list, if the page was referenced since its last sweep by the scanner, don't deactivate it. (This part was actually added in uvm_pdaemon.c,v 1.28.)
These changes greatly improve interactive performance during moderate to high memory and I/O load.
|
#
1.13 |
|
23-Jan-2001 |
thorpej |
Change uvm_analloc() to return a locked anon, update all callers, and fix an anon locking protocol error in uvm_loanzero().
|
#
1.12 |
|
23-Jan-2001 |
thorpej |
Sprinkle some assertions: amap_free(): Assert that the amap is locked. amap_share_protect(): Assert that the amap is locked. amap_wipeout(): Assert that the amap is locked. uvm_anfree(): Assert that the anon has a reference count of 0 and is not locked. uvm_anon_lockloanpg(): Assert that the anon is locked. anon_pagein(): Assert that the anon is locked. uvmfault_anonget(): Assert that the anon is locked. uvm_pagealloc_strat(): Assert that the uobj or the anon is locked
And fix the problems these have uncovered: amap_cow_now(): Lock the new anon after allocating it, and unref and unlock it (rather than lock!) before freeing it in case of an error condition. This should fix a problem reported by Dan Carosone using cdrecord on an i386 MP kernel. uvm_fault(): Case1B -- Lock the new anon afer allocating it, and unlock it later when we unlock the old anon. Case2 -- Lock the new anon after allocating it, and unlock it later by passing it to uvmfault_unlockall() (we set anon to NULL if we're not doing a promote fault).
|
#
1.11 |
|
27-Dec-2000 |
chs |
when we fail to allocate anons to represent new swap space, just return an error rather than panicing.
|
#
1.10 |
|
25-Nov-2000 |
chs |
lots of cleanup: use queue.h macros and KASSERT(). address amap offsets in pages instead of bytes. make amap_ref() and amap_unref() take an amap, offset and length instead of a vm_map_entry_t. improve whitespace and comments.
|
#
1.9 |
|
06-Aug-2000 |
thorpej |
Do something sane with a DIAGNOSTIC condition in an non-DIAGNOSTIC kernel.
|
#
1.8 |
|
05-Aug-2000 |
thorpej |
Correct a comment about locking wrt. uvmfault_anonget().
|
#
1.7 |
|
27-Jun-2000 |
mrg |
remove include of <vm/vm.h>
|
#
1.6 |
|
26-Jun-2000 |
mrg |
remove/move more mach vm header files:
<vm/pglist.h> -> <uvm/uvm_pglist.h> <vm/vm_inherit.h> -> <uvm/uvm_inherit.h> <vm/vm_kern.h> -> into <uvm/uvm_extern.h> <vm/vm_object.h> -> nothing <vm/vm_pager.h> -> into <uvm/uvm_pager.h>
also includes a bunch of <vm/vm_page.h> include removals (due to redudancy with <vm/vm.h>), and a scattering of other similar headers.
|
Revision tags: netbsd-1-5-base minoura-xpg4dl-base chs-ubc2-newbase
|
#
1.5 |
|
11-Jan-2000 |
chs |
branches: 1.5.4; add support for ``swapctl -d'' (removing swap space). improve handling of i/o errors in swap space.
reviewed by: Chuck Cranor
|
Revision tags: wrstuden-devbsize-19991221 wrstuden-devbsize-base comdex-fall-1999-base fvdl-softdep-base
|
#
1.4 |
|
12-Sep-1999 |
chs |
branches: 1.4.2; eliminate the PMAP_NEW option by making it required for all ports. ports which previously had no support for PMAP_NEW now implement the pmap_k* interfaces as wrappers around the non-k versions.
|
#
1.3 |
|
14-Aug-1999 |
ross |
In uvm_anon_init() and uvm_anon_add(), initialize the ref count lock.
|
Revision tags: netbsd-1-4-PATCH003 netbsd-1-4-PATCH002 kame_141_19991130 netbsd-1-4-PATCH001 kame_14_19990705 kame_14_19990628 chs-ubc2-base netbsd-1-4-RELEASE netbsd-1-4-base
|
#
1.2 |
|
26-Mar-1999 |
chs |
add uvmexp.swpgonly and use it to detect out-of-swap conditions.
|
#
1.1 |
|
24-Jan-1999 |
chuck |
cleanup/reorg: - break anon related functions out of uvm_amap.c and put them in their own file (uvm_anon.c). includes break up uvm_anon_init into an amap and an an anon init function - ensure that only functions within the amap module access amap structure fields (add macros to amap api as needed)
|
#
1.75 |
|
14-Mar-2020 |
ad |
Make page waits (WANTED vs BUSY) interlocked by pg->interlock. Gets RW locks out of the equation for sleep/wakeup, and allows observing+waiting for busy pages when holding only a read lock. Proposed on tech-kern.
|
Revision tags: ad-namecache-base3
|
#
1.74 |
|
24-Feb-2020 |
rin |
0x%#x --> %#x for non-external codes. Also, stop mixing up 0x%x and %#x in single files as far as possible.
|
#
1.73 |
|
23-Feb-2020 |
ad |
Use rw_lock_op().
|
#
1.72 |
|
23-Feb-2020 |
ad |
UVM locking changes, proposed on tech-kern:
- Change the lock on uvm_object, vm_amap and vm_anon to be a RW lock. - Break v_interlock and vmobjlock apart. v_interlock remains a mutex. - Do partial PV list locking in the x86 pmap. Others to follow later.
|
Revision tags: ad-namecache-base2 ad-namecache-base1
|
#
1.71 |
|
15-Jan-2020 |
ad |
Merge from yamt-pagecache (after much testing):
- Reduce unnecessary page scan in putpages esp. when an object has a ton of pages cached but only a few of them are dirty.
- Reduce the number of pmap operations by tracking page dirtiness more precisely in uvm layer.
|
Revision tags: ad-namecache-base
|
#
1.70 |
|
31-Dec-2019 |
ad |
branches: 1.70.2; - Add and use wrapper functions that take and acquire page interlocks, and pairs of page interlocks. Require that the page interlock be held over calls to uvm_pageactivate(), uvm_pagewire() and similar.
- Solve the concurrency problem with page replacement state. Rather than updating the global state synchronously, set an intended state on individual pages (active, inactive, enqueued, dequeued) while holding the page interlock. After the interlock is released put the pages on a 128 entry per-CPU queue for their state changes to be made real in batch. This results in in a ~400 fold decrease in contention on my test system. Proposed on tech-kern but modified to use the page interlock rather than atomics to synchronise as it's much easier to maintain that way, and cheaper.
|
#
1.69 |
|
13-Dec-2019 |
ad |
Break the global uvm_pageqlock into a per-page identity lock and a private lock for use of the pagedaemon policy code. Discussed on tech-kern.
PR kern/54209: NetBSD 8 large memory performance extremely low PR kern/54210: NetBSD-8 processes presumably not exiting PR kern/54727: writing a large file causes unreasonable system behaviour
|
#
1.68 |
|
02-Dec-2019 |
chs |
fix the build for when UVMHIST is enabled.
|
#
1.67 |
|
01-Dec-2019 |
uwe |
Add missing #include <sys/atomic.h>
|
#
1.66 |
|
01-Dec-2019 |
ad |
Free pages in batch instead of taking uvm_pageqlock for each one.
|
#
1.65 |
|
01-Dec-2019 |
ad |
- Adjust uvmexp.swpgonly with atomics, and make uvm_swap_data_lock static. - A bit more __cacheline_aligned on mutexes.
|
Revision tags: netbsd-9-0-RELEASE netbsd-9-0-RC2 netbsd-9-0-RC1 phil-wifi-20191119 netbsd-9-base phil-wifi-20190609 isaki-audio2-base pgoyette-compat-merge-20190127 pgoyette-compat-20190127 pgoyette-compat-20190118 pgoyette-compat-1226 pgoyette-compat-1126 pgoyette-compat-1020 pgoyette-compat-0930 pgoyette-compat-0906 pgoyette-compat-0728 phil-wifi-base pgoyette-compat-0625 pgoyette-compat-0521 pgoyette-compat-0502 pgoyette-compat-0422 pgoyette-compat-0415 pgoyette-compat-0407 pgoyette-compat-0330 pgoyette-compat-0322 pgoyette-compat-0315 pgoyette-compat-base tls-maxphys-base-20171202
|
#
1.64 |
|
28-Oct-2017 |
pgoyette |
Update the kernhist(9) kernel history code to address issues identified in PR kern/52639, as well as some general cleaning-up...
(As proposed on tech-kern@ with additional changes and enhancements.)
Details of changes:
* All history arguments are now stored as uintmax_t values[1], both in the kernel and in the structures used for exporting the history data to userland via sysctl(9). This avoids problems on some architectures where passing a 64-bit (or larger) value to printf(3) can cause it to process the value as multiple arguments. (This can be particularly problematic when printf()'s format string is not a literal, since in that case the compiler cannot know how large each argument should be.)
* Update the data structures used for exporting kernel history data to include a version number as well as the length of history arguments.
* All [2] existing users of kernhist(9) have had their format strings updated. Each format specifier now includes an explicit length modifier 'j' to refer to numeric values of the size of uintmax_t.
* All [2] existing users of kernhist(9) have had their format strings updated to replace uses of "%p" with "%#jx", and the pointer arguments are now cast to (uintptr_t) before being subsequently cast to (uintmax_t). This is needed to avoid compiler warnings about casting "pointer to integer of a different size."
* All [2] existing users of kernhist(9) have had instances of "%s" or "%c" format strings replaced with numeric formats; several instances of mis-match between format string and argument list have been fixed.
* vmstat(1) has been modified to handle the new size of arguments in the history data as exported by sysctl(9).
* vmstat(1) now provides a warning message if the history requested with the -u option does not exist (previously, this condition was silently ignored, with only a single blank line being printed).
* vmstat(1) now checks the version and argument length included in the data exported via sysctl(9) and exits if they do not match the values with which vmstat was built.
* The kernhist(9) man-page has been updated to note the additional requirements imposed on the format strings, along with several other minor changes and enhancements.
[1] It would have been possible to use an explicit length (for example, uint64_t) for the history arguments. But that would require another "rototill" of all the users in the future when we add support for an architecture that supports a larger size. Also, the printf(3) format specifiers for explicitly-sized values, such as "%"PRIu64, are much more verbose (and less aesthetically appealing, IMHO) than simply using "%ju".
[2] I've tried very hard to find "all [the] existing users of kernhist(9)" but it is possible that I've missed some of them. I would be glad to update any stragglers that anyone identifies.
|
Revision tags: netbsd-7-2-RELEASE netbsd-7-1-2-RELEASE netbsd-7-1-1-RELEASE nick-nhusb-base-20170825 perseant-stdc-iso10646-base netbsd-8-base prg-localcount2-base3 prg-localcount2-base2 prg-localcount2-base1 prg-localcount2-base pgoyette-localcount-20170426 bouyer-socketcan-base1 jdolecek-ncq-base pgoyette-localcount-20170320 netbsd-7-1-RELEASE netbsd-7-1-RC2 nick-nhusb-base-20170204 netbsd-7-nhusb-base-20170116 bouyer-socketcan-base pgoyette-localcount-20170107 netbsd-7-1-RC1 nick-nhusb-base-20161204 pgoyette-localcount-20161104 netbsd-7-0-2-RELEASE nick-nhusb-base-20161004 localcount-20160914 netbsd-7-nhusb-base pgoyette-localcount-20160806 pgoyette-localcount-20160726 pgoyette-localcount-base nick-nhusb-base-20160907 nick-nhusb-base-20160529 netbsd-7-0-1-RELEASE nick-nhusb-base-20160422 nick-nhusb-base-20160319 nick-nhusb-base-20151226 netbsd-7-0-RELEASE nick-nhusb-base-20150921 netbsd-7-0-RC3 netbsd-7-0-RC2 netbsd-7-0-RC1 nick-nhusb-base-20150606 nick-nhusb-base-20150406 nick-nhusb-base netbsd-7-base yamt-pagecache-base9 tls-earlyentropy-base riastradh-xf86-video-intel-2-7-1-pre-2-21-15 riastradh-drm2-base3 rmind-smpnet-nbase rmind-smpnet-base tls-maxphys-base
|
#
1.63 |
|
25-Oct-2013 |
martin |
branches: 1.63.22; Mark a diagnostic-only variable
|
Revision tags: netbsd-6-0-6-RELEASE netbsd-6-1-5-RELEASE netbsd-6-1-4-RELEASE netbsd-6-0-5-RELEASE netbsd-6-1-3-RELEASE netbsd-6-0-4-RELEASE netbsd-6-1-2-RELEASE netbsd-6-0-3-RELEASE netbsd-6-1-1-RELEASE riastradh-drm2-base2 riastradh-drm2-base1 riastradh-drm2-base netbsd-6-0-2-RELEASE netbsd-6-1-RELEASE netbsd-6-1-RC4 netbsd-6-1-RC3 agc-symver-base netbsd-6-1-RC2 netbsd-6-1-RC1 yamt-pagecache-base8 netbsd-6-0-1-RELEASE yamt-pagecache-base7 matt-nb6-plus-nbase yamt-pagecache-base6 netbsd-6-0-RELEASE netbsd-6-0-RC2 matt-nb6-plus-base netbsd-6-0-RC1 jmcneill-usbmp-base10 yamt-pagecache-base5 jmcneill-usbmp-base9 yamt-pagecache-base4 jmcneill-usbmp-base8 jmcneill-usbmp-base7 jmcneill-usbmp-base6 jmcneill-usbmp-base5 jmcneill-usbmp-base4 jmcneill-usbmp-base3 jmcneill-usbmp-pre-base2 jmcneill-usbmp-base2 netbsd-6-base jmcneill-usbmp-base jmcneill-audiomp3-base yamt-pagecache-base3 yamt-pagecache-base2 yamt-pagecache-base
|
#
1.62 |
|
18-Aug-2011 |
yamt |
branches: 1.62.2; 1.62.12; 1.62.16; uvm_anon_release: - don't forget to call uvm_anon_dispose. - simplify code a little.
|
#
1.61 |
|
18-Aug-2011 |
yamt |
uvm_anon_freelst: - clear an_link/an_ref when deferring anon disposal. otherwise others can see bogus an_ref. - fix the code to remove anon from the list.
|
#
1.60 |
|
14-Aug-2011 |
rmind |
uvm_anon_freelst: do not free PG_RELEASED pages (change uvm_anon_dispose() to indicate them with a return value).
|
#
1.59 |
|
06-Aug-2011 |
rmind |
- Rework uvm_anfree() into uvm_anon_freelst(), which always drops the lock. - Free anons in uvm_anon_freelst() without lock held. - Mechanic sync to unused loaning code.
|
#
1.58 |
|
05-Jul-2011 |
yamt |
reduce the number of atomic ops in common cases. it's exceptional for anons to remain longer than amap.
|
#
1.57 |
|
24-Jun-2011 |
rmind |
Fix uvmplock regression - a lock against oneself case in amap_swap_off(). Happens since amap is NULL in uvmfault_anonget(), so uvmfault_unlockall() keeps anon locked, when it should unlock it.
|
#
1.56 |
|
24-Jun-2011 |
yamt |
uvm_anon_release: fix a locking error after the rmind-uvmplock merge
|
#
1.55 |
|
17-Jun-2011 |
rmind |
Improve comments on uvm_anon.c, tidy up slightly. No functional changes.
|
#
1.54 |
|
12-Jun-2011 |
rmind |
Welcome to 5.99.53! Merge rmind-uvmplock branch:
- Reorganize locking in UVM and provide extra serialisation for pmap(9). New lock order: [vmpage-owner-lock] -> pmap-lock.
- Simplify locking in some pmap(9) modules by removing P->V locking.
- Use lock object on vmobjlock (and thus vnode_t::v_interlock) to share the locks amongst UVM objects where necessary (tmpfs, layerfs, unionfs).
- Rewrite and optimise x86 TLB shootdown code, make it simpler and cleaner. Add TLBSTATS option for x86 to collect statistics about TLB shootdowns.
- Unify /dev/mem et al in MI code and provide required locking (removes kernel-lock on some ports). Also, avoid cache-aliasing issues.
Thanks to Andrew Doran and Joerg Sonnenberger, as their initial patches formed the core changes of this branch.
|
Revision tags: rmind-uvmplock-nbase cherry-xenmp-base rmind-uvmplock-base
|
#
1.53 |
|
23-Apr-2011 |
rmind |
branches: 1.53.2; Replace "malloc" in comments, remove unnecessary header inclusions.
|
Revision tags: uebayasi-xip-base7 bouyer-quota2-nbase bouyer-quota2-base
|
#
1.52 |
|
02-Feb-2011 |
chuck |
udpate license clauses on my code to match the new-style BSD licenses. based on diff that rmind@ sent me.
no functional change with this commit.
|
Revision tags: netbsd-5-2-3-RELEASE netbsd-5-1-5-RELEASE netbsd-5-2-2-RELEASE netbsd-5-1-4-RELEASE netbsd-5-2-1-RELEASE netbsd-5-1-3-RELEASE netbsd-5-2-RELEASE netbsd-5-2-RC1 netbsd-5-1-2-RELEASE netbsd-5-1-1-RELEASE jruoho-x86intr-base matt-mips64-premerge-20101231 matt-nb5-mips64-premerge-20101231 matt-nb5-pq3-base uebayasi-xip-base6 uebayasi-xip-base5 netbsd-5-1-RELEASE uebayasi-xip-base4 uebayasi-xip-base3 yamt-nfs-mp-base11 netbsd-5-1-RC4 matt-nb5-mips64-k15 uebayasi-xip-base2 yamt-nfs-mp-base10 netbsd-5-1-RC3 netbsd-5-1-RC2 uebayasi-xip-base1 netbsd-5-1-RC1 yamt-nfs-mp-base9 uebayasi-xip-base netbsd-5-0-2-RELEASE matt-nb5-mips64-premerge-20091211 matt-premerge-20091211 yamt-nfs-mp-base8 matt-nb5-mips64-u2-k2-k4-k7-k8-k9 matt-nb4-mips64-k7-u2a-k9b matt-nb5-mips64-u1-k1-k5 yamt-nfs-mp-base7 netbsd-5-0-1-RELEASE jymxensuspend-base yamt-nfs-mp-base6 yamt-nfs-mp-base5 yamt-nfs-mp-base4 jym-xensuspend-nbase yamt-nfs-mp-base3 nick-hppapmap-base4 nick-hppapmap-base3 netbsd-5-0-RELEASE netbsd-5-0-RC4 netbsd-5-0-RC3 nick-hppapmap-base2 netbsd-5-0-RC2 jym-xensuspend-base netbsd-5-0-RC1 haad-dm-base2 haad-nbase2 ad-audiomp2-base netbsd-5-base nick-hppapmap-base matt-mips64-base2 haad-dm-base1 wrstuden-revivesa-base-4 wrstuden-revivesa-base-3 wrstuden-revivesa-base-2 haad-dm-base wrstuden-revivesa-base-1 simonb-wapbl-nbase yamt-pf42-base4 simonb-wapbl-base yamt-pf42-base3 hpcarm-cleanup-nbase yamt-pf42-baseX yamt-pf42-base2 yamt-nfs-mp-base2 wrstuden-revivesa-base yamt-nfs-mp-base yamt-pf42-base ad-socklock-base1 yamt-lazymbuf-base15 yamt-lazymbuf-base14 keiichi-mipv6-nbase mjf-devfs2-base nick-net80211-sync-base keiichi-mipv6-base bouyer-xeni386-nbase bouyer-xeni386-base matt-armv6-nbase mjf-devfs-base hpcarm-cleanup-base
|
#
1.51 |
|
18-Jan-2008 |
yamt |
branches: 1.51.28; 1.51.32; 1.51.38; 1.51.40; push pmap_clear_reference calls into pdpolicy code, where reference bits actually matter.
|
Revision tags: matt-armv6-base
|
#
1.50 |
|
02-Jan-2008 |
ad |
Merge vmlocking2 to head.
|
Revision tags: vmlocking2-base3
|
#
1.49 |
|
20-Dec-2007 |
ad |
Specify PR_LARGECACHE for anon_cache (which is insanely busy).
|
Revision tags: yamt-kmem-base3 cube-autoconf-base yamt-kmem-base2 yamt-kmem-base vmlocking2-base2 reinoud-bufcleanup-nbase vmlocking2-base1 bouyer-xenamd64-base2 vmlocking-nbase bouyer-xenamd64-base jmcneill-pm-base reinoud-bufcleanup-base
|
#
1.48 |
|
13-Nov-2007 |
yamt |
branches: 1.48.2; 1.48.6; g/c unused uvm_anon_pool.
|
#
1.47 |
|
07-Nov-2007 |
ad |
Merge from vmlocking:
- pool_cache changes. - Debugger/procfs locking fixes. - Other minor changes.
|
Revision tags: jmcneill-base yamt-x86pmap-base4 yamt-x86pmap-base3 vmlocking-base
|
#
1.46 |
|
11-Oct-2007 |
ad |
branches: 1.46.2; 1.46.4; Remove LOCK_ASSERT(!simple_lock_held(&foo));
|
Revision tags: nick-csl-alignment-base5 yamt-x86pmap-base2 yamt-x86pmap-base matt-mips64-base
|
#
1.45 |
|
21-Jul-2007 |
ad |
branches: 1.45.4; 1.45.6; 1.45.8; 1.45.10; Merge unobtrusive locking changes from the vmlocking branch.
|
Revision tags: nick-csl-alignment-base yamt-idlelwp-base8 thorpej-atomic-base mjf-ufs-trans-base
|
#
1.44 |
|
12-Mar-2007 |
ad |
branches: 1.44.8; Pass an ipl argument to pool_init/POOL_INIT to be used when initializing the pool's lock.
|
Revision tags: ad-audiomp-base
|
#
1.43 |
|
22-Feb-2007 |
thorpej |
branches: 1.43.4; TRUE -> true, FALSE -> false
|
#
1.42 |
|
21-Feb-2007 |
thorpej |
Replace the Mach-derived boolean_t type with the C99 bool type. A future commit will replace use of TRUE and FALSE with true and false.
|
Revision tags: netbsd-4-0-1-RELEASE wrstuden-fixsa-newbase wrstuden-fixsa-base-1 netbsd-4-0-RELEASE netbsd-4-0-RC5 matt-nb4-arm-base netbsd-4-0-RC4 netbsd-4-0-RC3 netbsd-4-0-RC2 netbsd-4-0-RC1 wrstuden-fixsa-base post-newlock2-merge newlock2-nbase yamt-splraiseipl-base5 yamt-splraiseipl-base4 yamt-splraiseipl-base3 newlock2-base netbsd-4-base
|
#
1.41 |
|
01-Nov-2006 |
yamt |
branches: 1.41.4; remove some __unused from function parameters.
|
Revision tags: yamt-splraiseipl-base2
|
#
1.40 |
|
12-Oct-2006 |
christos |
- sprinkle __unused on function decls. - fix a couple of unused bugs - no more -Wno-unused for i386
|
Revision tags: yamt-splraiseipl-base
|
#
1.39 |
|
15-Sep-2006 |
yamt |
branches: 1.39.2; merge yamt-pdpolicy branch. - separate page replacement policy from the rest of kernel - implement an alternative replacement policy
|
Revision tags: abandoned-netbsd-4-base yamt-pdpolicy-base9 yamt-pdpolicy-base8 yamt-pdpolicy-base7 yamt-pdpolicy-base6 chap-midi-nbase gdamore-uart-base simonb-timcounters-final yamt-pdpolicy-base5 chap-midi-base yamt-pdpolicy-base4 yamt-pdpolicy-base3 peter-altq-base yamt-pdpolicy-base2 elad-kernelauth-base yamt-pdpolicy-base yamt-uio_vmspace-base5 simonb-timecounters-base rpaulo-netinet-merge-pcb-base
|
#
1.38 |
|
11-Dec-2005 |
christos |
branches: 1.38.8; 1.38.20; merge ktrace-lwp.
|
Revision tags: yamt-readahead-base3 yamt-readahead-base2 yamt-readahead-pervnode yamt-readahead-perfile yamt-readahead-base yamt-vop-base3 yamt-vop-base2 thorpej-vnode-attr-base yamt-vop-base ktrace-lwp-base
|
#
1.37 |
|
13-Sep-2005 |
yamt |
wrap swap related code by #ifdef VMSWAP. always #define VMSWAP for now.
|
#
1.36 |
|
31-Jul-2005 |
yamt |
revert "defflag VMSWAP" changes for now. there seems to be far more people who don't want to edit their kernel config files than i thought.
|
#
1.35 |
|
30-Jul-2005 |
yamt |
defflag VMSWAP.
|
#
1.34 |
|
27-Jun-2005 |
thorpej |
branches: 1.34.2; Use ANSI function decls.
|
#
1.33 |
|
11-May-2005 |
yamt |
allocate anons on-demand, rather than reserving static amount of them on boot/swapon.
|
Revision tags: kent-audio2-base
|
#
1.32 |
|
01-Apr-2005 |
yamt |
merge yamt-km branch. - don't use managed mappings/backing objects for wired memory allocations. save some resources like pv_entry. also fix (most of) PR/27030. - simplify kernel memory management API. - simplify pmap bootstrap of some ports. - some related cleanups.
|
Revision tags: netbsd-3-1-1-RELEASE netbsd-3-0-3-RELEASE netbsd-3-1-RELEASE netbsd-3-0-2-RELEASE netbsd-3-1-RC4 netbsd-3-1-RC3 netbsd-3-1-RC2 netbsd-3-1-RC1 netbsd-3-0-1-RELEASE netbsd-3-0-RELEASE netbsd-3-0-RC6 netbsd-3-0-RC5 netbsd-3-0-RC4 netbsd-3-0-RC3 netbsd-3-0-RC2 netbsd-3-0-RC1 yamt-km-base4 yamt-km-base3 netbsd-3-base yamt-km-base2 yamt-km-base kent-audio1-beforemerge kent-audio1-base
|
#
1.31 |
|
01-Sep-2004 |
yamt |
branches: 1.31.4; 1.31.6; uvm_pagefree: when orphaning an A->K loaned page, - decrement uvmexp.anonpages as it's no longer an anon page. - null out anon->u.an_page as the anon no longer own the page. uvm_anfree: add related assertions.
|
#
1.30 |
|
01-Sep-2004 |
yamt |
uvm_anfree: remove a comment which is no longer true.
|
#
1.29 |
|
05-May-2004 |
yamt |
fix a amap_wirerange deadlock problem by re-introducing PG_RELEASED for anon pages. PR/23171 from Christian Limpach. for details, see discussion filed in the PR database.
uvm_anon_release: a new function to free anon-owned PG_RELEASED page. uvm_anfree: we can't wait for the page here because the caller might hold amap lock. instead, just mark the page as PG_RELEASED. who unbusy the page should check the PG_RELEASED. uvm_aio_aiodone: uvm_anon_release() instead of uvm_page_unbusy() if appropriate. uvmfault_anonget: check PG_RELEASED.
|
Revision tags: netbsd-2-0-base
|
#
1.28 |
|
24-Mar-2004 |
junyoung |
branches: 1.28.2; Nuke __P().
|
#
1.27 |
|
06-Jan-2004 |
chs |
fix lock initialization in uvm_anon_add(). from PR 23831.
|
#
1.26 |
|
28-Aug-2003 |
pk |
When retiring a swap device with marked bad blocks on it we should update the `# swap page in use' and `# swap page only' counters. However, at the time of swap device removal we can no longer figure out how many of the bad swap pages are actually also `swap only' pages.
So, on swap I/O errors arrange things to not include the bad swap pages in the `swpgonly' counter as follows: uvm_swap_markbad() decrements `swpgonly' by the number of bad pages, and the various VM object deallocation routines do not decrement `swpgonly' for swap slots marked as SWSLOT_BAD.
|
#
1.25 |
|
11-Aug-2003 |
pk |
uao_pagein_page() & anon_pagein(): * return failure if the page cannot be retrieved. * wakeup any waiters when releasing a page after successful page in.
|
#
1.24 |
|
11-Aug-2003 |
pk |
Only deactivate pages if their wired count is zero.
|
#
1.23 |
|
11-Aug-2003 |
pk |
Make sure to call uvm_swap_free() and uvm_swap_markbad() with valid (i.e. positive) slot numbers.
|
Revision tags: nathanw_sa_before_merge fvdl_fs64_base gmcgarry_ctxsw_base gmcgarry_ucred_base nathanw_sa_base kqueue-aftermerge kqueue-beforemerge kqueue-base
|
#
1.22 |
|
21-Sep-2002 |
chs |
branches: 1.22.6; add missing anon lock around call to uvm_anon_lockloanpg().
|
Revision tags: netbsd-1-6-PATCH002-RELEASE netbsd-1-6-PATCH002 netbsd-1-6-PATCH002-RC4 netbsd-1-6-PATCH002-RC3 netbsd-1-6-PATCH002-RC2 netbsd-1-6-PATCH002-RC1 netbsd-1-6-PATCH001 netbsd-1-6-PATCH001-RELEASE netbsd-1-6-PATCH001-RC3 netbsd-1-6-PATCH001-RC2 netbsd-1-6-PATCH001-RC1 netbsd-1-6-RELEASE netbsd-1-6-RC3 netbsd-1-6-RC2 netbsd-1-6-RC1 netbsd-1-6-base gehenna-devsw-base eeh-devprop-base newlock-base ifpoll-base thorpej-mips-cache-base
|
#
1.21 |
|
10-Nov-2001 |
lukem |
branches: 1.21.4; add RCSIDs, and in some cases, slightly cleanup #include order
|
#
1.20 |
|
06-Nov-2001 |
chs |
several changes prompted by loaning problems: - fix the loaned case in uvm_pagefree(). - redo uvmexp.swpgonly accounting to work with page loaning. add an assertion before each place we adjust uvmexp.swpgonly. - fix uvm_km_pgremove() to always free any swap space associated with the range being removed. - get rid of UVM_LOAN_WIRED flag. instead, we just make sure that pages loaned to the kernel are never on the page queues. this allows us to assert that pages are not loaned and wired at the same time. - add yet more assertions.
|
#
1.19 |
|
21-Oct-2001 |
chs |
branches: 1.19.2; add some missing spinlocks.
|
Revision tags: thorpej-devvp-base3 thorpej-devvp-base2 post-chs-ubcperf
|
#
1.18 |
|
15-Sep-2001 |
chs |
a whole bunch of changes to improve performance and robustness under load:
- remove special treatment of pager_map mappings in pmaps. this is required now, since I've removed the globals that expose the address range. pager_map now uses pmap_kenter_pa() instead of pmap_enter(), so there's no longer any need to special-case it. - eliminate struct uvm_vnode by moving its fields into struct vnode. - rewrite the pageout path. the pager is now responsible for handling the high-level requests instead of only getting control after a bunch of work has already been done on its behalf. this will allow us to UBCify LFS, which needs tighter control over its pages than other filesystems do. writing a page to disk no longer requires making it read-only, which allows us to write wired pages without causing all kinds of havoc. - use a new PG_PAGEOUT flag to indicate that a page should be freed on behalf of the pagedaemon when it's unlocked. this flag is very similar to PG_RELEASED, but unlike PG_RELEASED, PG_PAGEOUT can be cleared if the pageout fails due to eg. an indirect-block buffer being locked. this allows us to remove the "version" field from struct vm_page, and together with shrinking "loan_count" from 32 bits to 16, struct vm_page is now 4 bytes smaller. - no longer use PG_RELEASED for swap-backed pages. if the page is busy because it's being paged out, we can't release the swap slot to be reallocated until that write is complete, but unlike with vnodes we don't keep a count of in-progress writes so there's no good way to know when the write is done. instead, when we need to free a busy swap-backed page, just sleep until we can get it busy ourselves. - implement a fast-path for extending writes which allows us to avoid zeroing new pages. this substantially reduces cpu usage. - encapsulate the data used by the genfs code in a struct genfs_node, which must be the first element of the filesystem-specific vnode data for filesystems which use genfs_{get,put}pages(). - eliminate many of the UVM pagerops, since they aren't needed anymore now that the pager "put" operation is a higher-level operation. - enhance the genfs code to allow NFS to use the genfs_{get,put}pages instead of a modified copy. - clean up struct vnode by removing all the fields that used to be used by the vfs_cluster.c code (which we don't use anymore with UBC). - remove kmem_object and mb_object since they were useless. instead of allocating pages to these objects, we now just allocate pages with no object. such pages are mapped in the kernel until they are freed, so we can use the mapping to find the page to free it. this allows us to remove splvm() protection in several places.
The sum of all these changes improves write throughput on my decstation 5000/200 to within 1% of the rate of NetBSD 1.5 and reduces the elapsed time for "make release" of a NetBSD 1.5 source tree on my 128MB pc to 10% less than a 1.5 kernel took.
|
Revision tags: pre-chs-ubcperf thorpej-devvp-base
|
#
1.17 |
|
25-May-2001 |
chs |
branches: 1.17.2; 1.17.4; remove trailing whitespace.
|
Revision tags: thorpej_scsipi_beforemerge thorpej_scsipi_nbase thorpej_scsipi_base
|
#
1.16 |
|
10-Mar-2001 |
chs |
eliminate the VM_PAGER_* error codes in favor of the traditional E* codes. the mapping is:
VM_PAGER_OK 0 VM_PAGER_BAD <unused> VM_PAGER_FAIL <unused> VM_PAGER_PEND 0 (see below) VM_PAGER_ERROR EIO VM_PAGER_AGAIN EAGAIN VM_PAGER_UNLOCK EBUSY VM_PAGER_REFAULT ERESTART
for async i/o requests, it used to be possible for the request to be convert to sync, and the pager would return VM_PAGER_OK or VM_PAGER_PEND to indicate whether the caller should perform post-i/o cleanup. this is no longer allowed; pagers must now return 0 to indicate that the async i/o was successfully started, and the caller never needs to worry about doing the post-i/o cleanup.
|
#
1.15 |
|
18-Feb-2001 |
chs |
branches: 1.15.2; clean up DIAGNOSTIC checks, use KASSERT().
|
#
1.14 |
|
28-Jan-2001 |
thorpej |
Page scanner improvements, behavior is actually a bit more like Mach VM's now. Specific changes: - Pages now need not have all of their mappings removed before being put on the inactive list. They only need to have the "referenced" attribute cleared. This makes putting pages onto the inactive list much more efficient. In order to eliminate redundant clearings of "refrenced", callers of uvm_pagedeactivate() must now do this themselves. - When checking the "modified" attribute for a page (for clearing PG_CLEAN), make sure to only do it if PG_CLEAN is currently set on the page (saves a potentially expensive pmap operation). - When scanning the inactive list, if a page is referenced, reactivate it (this part was actually added in uvm_pdaemon.c,v 1.27). This now works properly now that pages on the inactive list are allowed to have mappings. - When scanning the inactive list and considering a page for freeing, remove all mappings, and then check the "modified" attribute if the page is marked PG_CLEAN. - When scanning the active list, if the page was referenced since its last sweep by the scanner, don't deactivate it. (This part was actually added in uvm_pdaemon.c,v 1.28.)
These changes greatly improve interactive performance during moderate to high memory and I/O load.
|
#
1.13 |
|
23-Jan-2001 |
thorpej |
Change uvm_analloc() to return a locked anon, update all callers, and fix an anon locking protocol error in uvm_loanzero().
|
#
1.12 |
|
23-Jan-2001 |
thorpej |
Sprinkle some assertions: amap_free(): Assert that the amap is locked. amap_share_protect(): Assert that the amap is locked. amap_wipeout(): Assert that the amap is locked. uvm_anfree(): Assert that the anon has a reference count of 0 and is not locked. uvm_anon_lockloanpg(): Assert that the anon is locked. anon_pagein(): Assert that the anon is locked. uvmfault_anonget(): Assert that the anon is locked. uvm_pagealloc_strat(): Assert that the uobj or the anon is locked
And fix the problems these have uncovered: amap_cow_now(): Lock the new anon after allocating it, and unref and unlock it (rather than lock!) before freeing it in case of an error condition. This should fix a problem reported by Dan Carosone using cdrecord on an i386 MP kernel. uvm_fault(): Case1B -- Lock the new anon afer allocating it, and unlock it later when we unlock the old anon. Case2 -- Lock the new anon after allocating it, and unlock it later by passing it to uvmfault_unlockall() (we set anon to NULL if we're not doing a promote fault).
|
#
1.11 |
|
27-Dec-2000 |
chs |
when we fail to allocate anons to represent new swap space, just return an error rather than panicing.
|
#
1.10 |
|
25-Nov-2000 |
chs |
lots of cleanup: use queue.h macros and KASSERT(). address amap offsets in pages instead of bytes. make amap_ref() and amap_unref() take an amap, offset and length instead of a vm_map_entry_t. improve whitespace and comments.
|
#
1.9 |
|
06-Aug-2000 |
thorpej |
Do something sane with a DIAGNOSTIC condition in an non-DIAGNOSTIC kernel.
|
#
1.8 |
|
05-Aug-2000 |
thorpej |
Correct a comment about locking wrt. uvmfault_anonget().
|
#
1.7 |
|
27-Jun-2000 |
mrg |
remove include of <vm/vm.h>
|
#
1.6 |
|
26-Jun-2000 |
mrg |
remove/move more mach vm header files:
<vm/pglist.h> -> <uvm/uvm_pglist.h> <vm/vm_inherit.h> -> <uvm/uvm_inherit.h> <vm/vm_kern.h> -> into <uvm/uvm_extern.h> <vm/vm_object.h> -> nothing <vm/vm_pager.h> -> into <uvm/uvm_pager.h>
also includes a bunch of <vm/vm_page.h> include removals (due to redudancy with <vm/vm.h>), and a scattering of other similar headers.
|
Revision tags: netbsd-1-5-base minoura-xpg4dl-base chs-ubc2-newbase
|
#
1.5 |
|
11-Jan-2000 |
chs |
branches: 1.5.4; add support for ``swapctl -d'' (removing swap space). improve handling of i/o errors in swap space.
reviewed by: Chuck Cranor
|
Revision tags: wrstuden-devbsize-19991221 wrstuden-devbsize-base comdex-fall-1999-base fvdl-softdep-base
|
#
1.4 |
|
12-Sep-1999 |
chs |
branches: 1.4.2; eliminate the PMAP_NEW option by making it required for all ports. ports which previously had no support for PMAP_NEW now implement the pmap_k* interfaces as wrappers around the non-k versions.
|
#
1.3 |
|
14-Aug-1999 |
ross |
In uvm_anon_init() and uvm_anon_add(), initialize the ref count lock.
|
Revision tags: netbsd-1-4-PATCH003 netbsd-1-4-PATCH002 kame_141_19991130 netbsd-1-4-PATCH001 kame_14_19990705 kame_14_19990628 chs-ubc2-base netbsd-1-4-RELEASE netbsd-1-4-base
|
#
1.2 |
|
26-Mar-1999 |
chs |
add uvmexp.swpgonly and use it to detect out-of-swap conditions.
|
#
1.1 |
|
24-Jan-1999 |
chuck |
cleanup/reorg: - break anon related functions out of uvm_amap.c and put them in their own file (uvm_anon.c). includes break up uvm_anon_init into an amap and an an anon init function - ensure that only functions within the amap module access amap structure fields (add macros to amap api as needed)
|
#
1.74 |
|
24-Feb-2020 |
rin |
0x%#x --> %#x for non-external codes. Also, stop mixing up 0x%x and %#x in single files as far as possible.
|
#
1.73 |
|
23-Feb-2020 |
ad |
Use rw_lock_op().
|
#
1.72 |
|
23-Feb-2020 |
ad |
UVM locking changes, proposed on tech-kern:
- Change the lock on uvm_object, vm_amap and vm_anon to be a RW lock. - Break v_interlock and vmobjlock apart. v_interlock remains a mutex. - Do partial PV list locking in the x86 pmap. Others to follow later.
|
Revision tags: ad-namecache-base2 ad-namecache-base1
|
#
1.71 |
|
15-Jan-2020 |
ad |
Merge from yamt-pagecache (after much testing):
- Reduce unnecessary page scan in putpages esp. when an object has a ton of pages cached but only a few of them are dirty.
- Reduce the number of pmap operations by tracking page dirtiness more precisely in uvm layer.
|
Revision tags: ad-namecache-base
|
#
1.70 |
|
31-Dec-2019 |
ad |
branches: 1.70.2; - Add and use wrapper functions that take and acquire page interlocks, and pairs of page interlocks. Require that the page interlock be held over calls to uvm_pageactivate(), uvm_pagewire() and similar.
- Solve the concurrency problem with page replacement state. Rather than updating the global state synchronously, set an intended state on individual pages (active, inactive, enqueued, dequeued) while holding the page interlock. After the interlock is released put the pages on a 128 entry per-CPU queue for their state changes to be made real in batch. This results in in a ~400 fold decrease in contention on my test system. Proposed on tech-kern but modified to use the page interlock rather than atomics to synchronise as it's much easier to maintain that way, and cheaper.
|
#
1.69 |
|
13-Dec-2019 |
ad |
Break the global uvm_pageqlock into a per-page identity lock and a private lock for use of the pagedaemon policy code. Discussed on tech-kern.
PR kern/54209: NetBSD 8 large memory performance extremely low PR kern/54210: NetBSD-8 processes presumably not exiting PR kern/54727: writing a large file causes unreasonable system behaviour
|
#
1.68 |
|
02-Dec-2019 |
chs |
fix the build for when UVMHIST is enabled.
|
#
1.67 |
|
01-Dec-2019 |
uwe |
Add missing #include <sys/atomic.h>
|
#
1.66 |
|
01-Dec-2019 |
ad |
Free pages in batch instead of taking uvm_pageqlock for each one.
|
#
1.65 |
|
01-Dec-2019 |
ad |
- Adjust uvmexp.swpgonly with atomics, and make uvm_swap_data_lock static. - A bit more __cacheline_aligned on mutexes.
|
Revision tags: netbsd-9-0-RELEASE netbsd-9-0-RC2 netbsd-9-0-RC1 phil-wifi-20191119 netbsd-9-base phil-wifi-20190609 isaki-audio2-base pgoyette-compat-merge-20190127 pgoyette-compat-20190127 pgoyette-compat-20190118 pgoyette-compat-1226 pgoyette-compat-1126 pgoyette-compat-1020 pgoyette-compat-0930 pgoyette-compat-0906 pgoyette-compat-0728 phil-wifi-base pgoyette-compat-0625 pgoyette-compat-0521 pgoyette-compat-0502 pgoyette-compat-0422 pgoyette-compat-0415 pgoyette-compat-0407 pgoyette-compat-0330 pgoyette-compat-0322 pgoyette-compat-0315 pgoyette-compat-base tls-maxphys-base-20171202
|
#
1.64 |
|
28-Oct-2017 |
pgoyette |
Update the kernhist(9) kernel history code to address issues identified in PR kern/52639, as well as some general cleaning-up...
(As proposed on tech-kern@ with additional changes and enhancements.)
Details of changes:
* All history arguments are now stored as uintmax_t values[1], both in the kernel and in the structures used for exporting the history data to userland via sysctl(9). This avoids problems on some architectures where passing a 64-bit (or larger) value to printf(3) can cause it to process the value as multiple arguments. (This can be particularly problematic when printf()'s format string is not a literal, since in that case the compiler cannot know how large each argument should be.)
* Update the data structures used for exporting kernel history data to include a version number as well as the length of history arguments.
* All [2] existing users of kernhist(9) have had their format strings updated. Each format specifier now includes an explicit length modifier 'j' to refer to numeric values of the size of uintmax_t.
* All [2] existing users of kernhist(9) have had their format strings updated to replace uses of "%p" with "%#jx", and the pointer arguments are now cast to (uintptr_t) before being subsequently cast to (uintmax_t). This is needed to avoid compiler warnings about casting "pointer to integer of a different size."
* All [2] existing users of kernhist(9) have had instances of "%s" or "%c" format strings replaced with numeric formats; several instances of mis-match between format string and argument list have been fixed.
* vmstat(1) has been modified to handle the new size of arguments in the history data as exported by sysctl(9).
* vmstat(1) now provides a warning message if the history requested with the -u option does not exist (previously, this condition was silently ignored, with only a single blank line being printed).
* vmstat(1) now checks the version and argument length included in the data exported via sysctl(9) and exits if they do not match the values with which vmstat was built.
* The kernhist(9) man-page has been updated to note the additional requirements imposed on the format strings, along with several other minor changes and enhancements.
[1] It would have been possible to use an explicit length (for example, uint64_t) for the history arguments. But that would require another "rototill" of all the users in the future when we add support for an architecture that supports a larger size. Also, the printf(3) format specifiers for explicitly-sized values, such as "%"PRIu64, are much more verbose (and less aesthetically appealing, IMHO) than simply using "%ju".
[2] I've tried very hard to find "all [the] existing users of kernhist(9)" but it is possible that I've missed some of them. I would be glad to update any stragglers that anyone identifies.
|
Revision tags: netbsd-7-2-RELEASE netbsd-7-1-2-RELEASE netbsd-7-1-1-RELEASE nick-nhusb-base-20170825 perseant-stdc-iso10646-base netbsd-8-base prg-localcount2-base3 prg-localcount2-base2 prg-localcount2-base1 prg-localcount2-base pgoyette-localcount-20170426 bouyer-socketcan-base1 jdolecek-ncq-base pgoyette-localcount-20170320 netbsd-7-1-RELEASE netbsd-7-1-RC2 nick-nhusb-base-20170204 netbsd-7-nhusb-base-20170116 bouyer-socketcan-base pgoyette-localcount-20170107 netbsd-7-1-RC1 nick-nhusb-base-20161204 pgoyette-localcount-20161104 netbsd-7-0-2-RELEASE nick-nhusb-base-20161004 localcount-20160914 netbsd-7-nhusb-base pgoyette-localcount-20160806 pgoyette-localcount-20160726 pgoyette-localcount-base nick-nhusb-base-20160907 nick-nhusb-base-20160529 netbsd-7-0-1-RELEASE nick-nhusb-base-20160422 nick-nhusb-base-20160319 nick-nhusb-base-20151226 netbsd-7-0-RELEASE nick-nhusb-base-20150921 netbsd-7-0-RC3 netbsd-7-0-RC2 netbsd-7-0-RC1 nick-nhusb-base-20150606 nick-nhusb-base-20150406 nick-nhusb-base netbsd-7-base yamt-pagecache-base9 tls-earlyentropy-base riastradh-xf86-video-intel-2-7-1-pre-2-21-15 riastradh-drm2-base3 rmind-smpnet-nbase rmind-smpnet-base tls-maxphys-base
|
#
1.63 |
|
25-Oct-2013 |
martin |
branches: 1.63.22; Mark a diagnostic-only variable
|
Revision tags: netbsd-6-0-6-RELEASE netbsd-6-1-5-RELEASE netbsd-6-1-4-RELEASE netbsd-6-0-5-RELEASE netbsd-6-1-3-RELEASE netbsd-6-0-4-RELEASE netbsd-6-1-2-RELEASE netbsd-6-0-3-RELEASE netbsd-6-1-1-RELEASE riastradh-drm2-base2 riastradh-drm2-base1 riastradh-drm2-base netbsd-6-0-2-RELEASE netbsd-6-1-RELEASE netbsd-6-1-RC4 netbsd-6-1-RC3 agc-symver-base netbsd-6-1-RC2 netbsd-6-1-RC1 yamt-pagecache-base8 netbsd-6-0-1-RELEASE yamt-pagecache-base7 matt-nb6-plus-nbase yamt-pagecache-base6 netbsd-6-0-RELEASE netbsd-6-0-RC2 matt-nb6-plus-base netbsd-6-0-RC1 jmcneill-usbmp-base10 yamt-pagecache-base5 jmcneill-usbmp-base9 yamt-pagecache-base4 jmcneill-usbmp-base8 jmcneill-usbmp-base7 jmcneill-usbmp-base6 jmcneill-usbmp-base5 jmcneill-usbmp-base4 jmcneill-usbmp-base3 jmcneill-usbmp-pre-base2 jmcneill-usbmp-base2 netbsd-6-base jmcneill-usbmp-base jmcneill-audiomp3-base yamt-pagecache-base3 yamt-pagecache-base2 yamt-pagecache-base
|
#
1.62 |
|
18-Aug-2011 |
yamt |
branches: 1.62.2; 1.62.12; 1.62.16; uvm_anon_release: - don't forget to call uvm_anon_dispose. - simplify code a little.
|
#
1.61 |
|
18-Aug-2011 |
yamt |
uvm_anon_freelst: - clear an_link/an_ref when deferring anon disposal. otherwise others can see bogus an_ref. - fix the code to remove anon from the list.
|
#
1.60 |
|
14-Aug-2011 |
rmind |
uvm_anon_freelst: do not free PG_RELEASED pages (change uvm_anon_dispose() to indicate them with a return value).
|
#
1.59 |
|
06-Aug-2011 |
rmind |
- Rework uvm_anfree() into uvm_anon_freelst(), which always drops the lock. - Free anons in uvm_anon_freelst() without lock held. - Mechanic sync to unused loaning code.
|
#
1.58 |
|
05-Jul-2011 |
yamt |
reduce the number of atomic ops in common cases. it's exceptional for anons to remain longer than amap.
|
#
1.57 |
|
24-Jun-2011 |
rmind |
Fix uvmplock regression - a lock against oneself case in amap_swap_off(). Happens since amap is NULL in uvmfault_anonget(), so uvmfault_unlockall() keeps anon locked, when it should unlock it.
|
#
1.56 |
|
24-Jun-2011 |
yamt |
uvm_anon_release: fix a locking error after the rmind-uvmplock merge
|
#
1.55 |
|
17-Jun-2011 |
rmind |
Improve comments on uvm_anon.c, tidy up slightly. No functional changes.
|
#
1.54 |
|
12-Jun-2011 |
rmind |
Welcome to 5.99.53! Merge rmind-uvmplock branch:
- Reorganize locking in UVM and provide extra serialisation for pmap(9). New lock order: [vmpage-owner-lock] -> pmap-lock.
- Simplify locking in some pmap(9) modules by removing P->V locking.
- Use lock object on vmobjlock (and thus vnode_t::v_interlock) to share the locks amongst UVM objects where necessary (tmpfs, layerfs, unionfs).
- Rewrite and optimise x86 TLB shootdown code, make it simpler and cleaner. Add TLBSTATS option for x86 to collect statistics about TLB shootdowns.
- Unify /dev/mem et al in MI code and provide required locking (removes kernel-lock on some ports). Also, avoid cache-aliasing issues.
Thanks to Andrew Doran and Joerg Sonnenberger, as their initial patches formed the core changes of this branch.
|
Revision tags: rmind-uvmplock-nbase cherry-xenmp-base rmind-uvmplock-base
|
#
1.53 |
|
23-Apr-2011 |
rmind |
branches: 1.53.2; Replace "malloc" in comments, remove unnecessary header inclusions.
|
Revision tags: uebayasi-xip-base7 bouyer-quota2-nbase bouyer-quota2-base
|
#
1.52 |
|
02-Feb-2011 |
chuck |
udpate license clauses on my code to match the new-style BSD licenses. based on diff that rmind@ sent me.
no functional change with this commit.
|
Revision tags: netbsd-5-2-3-RELEASE netbsd-5-1-5-RELEASE netbsd-5-2-2-RELEASE netbsd-5-1-4-RELEASE netbsd-5-2-1-RELEASE netbsd-5-1-3-RELEASE netbsd-5-2-RELEASE netbsd-5-2-RC1 netbsd-5-1-2-RELEASE netbsd-5-1-1-RELEASE jruoho-x86intr-base matt-mips64-premerge-20101231 matt-nb5-mips64-premerge-20101231 matt-nb5-pq3-base uebayasi-xip-base6 uebayasi-xip-base5 netbsd-5-1-RELEASE uebayasi-xip-base4 uebayasi-xip-base3 yamt-nfs-mp-base11 netbsd-5-1-RC4 matt-nb5-mips64-k15 uebayasi-xip-base2 yamt-nfs-mp-base10 netbsd-5-1-RC3 netbsd-5-1-RC2 uebayasi-xip-base1 netbsd-5-1-RC1 yamt-nfs-mp-base9 uebayasi-xip-base netbsd-5-0-2-RELEASE matt-nb5-mips64-premerge-20091211 matt-premerge-20091211 yamt-nfs-mp-base8 matt-nb5-mips64-u2-k2-k4-k7-k8-k9 matt-nb4-mips64-k7-u2a-k9b matt-nb5-mips64-u1-k1-k5 yamt-nfs-mp-base7 netbsd-5-0-1-RELEASE jymxensuspend-base yamt-nfs-mp-base6 yamt-nfs-mp-base5 yamt-nfs-mp-base4 jym-xensuspend-nbase yamt-nfs-mp-base3 nick-hppapmap-base4 nick-hppapmap-base3 netbsd-5-0-RELEASE netbsd-5-0-RC4 netbsd-5-0-RC3 nick-hppapmap-base2 netbsd-5-0-RC2 jym-xensuspend-base netbsd-5-0-RC1 haad-dm-base2 haad-nbase2 ad-audiomp2-base netbsd-5-base nick-hppapmap-base matt-mips64-base2 haad-dm-base1 wrstuden-revivesa-base-4 wrstuden-revivesa-base-3 wrstuden-revivesa-base-2 haad-dm-base wrstuden-revivesa-base-1 simonb-wapbl-nbase yamt-pf42-base4 simonb-wapbl-base yamt-pf42-base3 hpcarm-cleanup-nbase yamt-pf42-baseX yamt-pf42-base2 yamt-nfs-mp-base2 wrstuden-revivesa-base yamt-nfs-mp-base yamt-pf42-base ad-socklock-base1 yamt-lazymbuf-base15 yamt-lazymbuf-base14 keiichi-mipv6-nbase mjf-devfs2-base nick-net80211-sync-base keiichi-mipv6-base bouyer-xeni386-nbase bouyer-xeni386-base matt-armv6-nbase mjf-devfs-base hpcarm-cleanup-base
|
#
1.51 |
|
18-Jan-2008 |
yamt |
branches: 1.51.28; 1.51.32; 1.51.38; 1.51.40; push pmap_clear_reference calls into pdpolicy code, where reference bits actually matter.
|
Revision tags: matt-armv6-base
|
#
1.50 |
|
02-Jan-2008 |
ad |
Merge vmlocking2 to head.
|
Revision tags: vmlocking2-base3
|
#
1.49 |
|
20-Dec-2007 |
ad |
Specify PR_LARGECACHE for anon_cache (which is insanely busy).
|
Revision tags: yamt-kmem-base3 cube-autoconf-base yamt-kmem-base2 yamt-kmem-base vmlocking2-base2 reinoud-bufcleanup-nbase vmlocking2-base1 bouyer-xenamd64-base2 vmlocking-nbase bouyer-xenamd64-base jmcneill-pm-base reinoud-bufcleanup-base
|
#
1.48 |
|
13-Nov-2007 |
yamt |
branches: 1.48.2; 1.48.6; g/c unused uvm_anon_pool.
|
#
1.47 |
|
07-Nov-2007 |
ad |
Merge from vmlocking:
- pool_cache changes. - Debugger/procfs locking fixes. - Other minor changes.
|
Revision tags: jmcneill-base yamt-x86pmap-base4 yamt-x86pmap-base3 vmlocking-base
|
#
1.46 |
|
11-Oct-2007 |
ad |
branches: 1.46.2; 1.46.4; Remove LOCK_ASSERT(!simple_lock_held(&foo));
|
Revision tags: nick-csl-alignment-base5 yamt-x86pmap-base2 yamt-x86pmap-base matt-mips64-base
|
#
1.45 |
|
21-Jul-2007 |
ad |
branches: 1.45.4; 1.45.6; 1.45.8; 1.45.10; Merge unobtrusive locking changes from the vmlocking branch.
|
Revision tags: nick-csl-alignment-base yamt-idlelwp-base8 thorpej-atomic-base mjf-ufs-trans-base
|
#
1.44 |
|
12-Mar-2007 |
ad |
branches: 1.44.8; Pass an ipl argument to pool_init/POOL_INIT to be used when initializing the pool's lock.
|
Revision tags: ad-audiomp-base
|
#
1.43 |
|
22-Feb-2007 |
thorpej |
branches: 1.43.4; TRUE -> true, FALSE -> false
|
#
1.42 |
|
21-Feb-2007 |
thorpej |
Replace the Mach-derived boolean_t type with the C99 bool type. A future commit will replace use of TRUE and FALSE with true and false.
|
Revision tags: netbsd-4-0-1-RELEASE wrstuden-fixsa-newbase wrstuden-fixsa-base-1 netbsd-4-0-RELEASE netbsd-4-0-RC5 matt-nb4-arm-base netbsd-4-0-RC4 netbsd-4-0-RC3 netbsd-4-0-RC2 netbsd-4-0-RC1 wrstuden-fixsa-base post-newlock2-merge newlock2-nbase yamt-splraiseipl-base5 yamt-splraiseipl-base4 yamt-splraiseipl-base3 newlock2-base netbsd-4-base
|
#
1.41 |
|
01-Nov-2006 |
yamt |
branches: 1.41.4; remove some __unused from function parameters.
|
Revision tags: yamt-splraiseipl-base2
|
#
1.40 |
|
12-Oct-2006 |
christos |
- sprinkle __unused on function decls. - fix a couple of unused bugs - no more -Wno-unused for i386
|
Revision tags: yamt-splraiseipl-base
|
#
1.39 |
|
15-Sep-2006 |
yamt |
branches: 1.39.2; merge yamt-pdpolicy branch. - separate page replacement policy from the rest of kernel - implement an alternative replacement policy
|
Revision tags: abandoned-netbsd-4-base yamt-pdpolicy-base9 yamt-pdpolicy-base8 yamt-pdpolicy-base7 yamt-pdpolicy-base6 chap-midi-nbase gdamore-uart-base simonb-timcounters-final yamt-pdpolicy-base5 chap-midi-base yamt-pdpolicy-base4 yamt-pdpolicy-base3 peter-altq-base yamt-pdpolicy-base2 elad-kernelauth-base yamt-pdpolicy-base yamt-uio_vmspace-base5 simonb-timecounters-base rpaulo-netinet-merge-pcb-base
|
#
1.38 |
|
11-Dec-2005 |
christos |
branches: 1.38.8; 1.38.20; merge ktrace-lwp.
|
Revision tags: yamt-readahead-base3 yamt-readahead-base2 yamt-readahead-pervnode yamt-readahead-perfile yamt-readahead-base yamt-vop-base3 yamt-vop-base2 thorpej-vnode-attr-base yamt-vop-base ktrace-lwp-base
|
#
1.37 |
|
13-Sep-2005 |
yamt |
wrap swap related code by #ifdef VMSWAP. always #define VMSWAP for now.
|
#
1.36 |
|
31-Jul-2005 |
yamt |
revert "defflag VMSWAP" changes for now. there seems to be far more people who don't want to edit their kernel config files than i thought.
|
#
1.35 |
|
30-Jul-2005 |
yamt |
defflag VMSWAP.
|
#
1.34 |
|
27-Jun-2005 |
thorpej |
branches: 1.34.2; Use ANSI function decls.
|
#
1.33 |
|
11-May-2005 |
yamt |
allocate anons on-demand, rather than reserving static amount of them on boot/swapon.
|
Revision tags: kent-audio2-base
|
#
1.32 |
|
01-Apr-2005 |
yamt |
merge yamt-km branch. - don't use managed mappings/backing objects for wired memory allocations. save some resources like pv_entry. also fix (most of) PR/27030. - simplify kernel memory management API. - simplify pmap bootstrap of some ports. - some related cleanups.
|
Revision tags: netbsd-3-1-1-RELEASE netbsd-3-0-3-RELEASE netbsd-3-1-RELEASE netbsd-3-0-2-RELEASE netbsd-3-1-RC4 netbsd-3-1-RC3 netbsd-3-1-RC2 netbsd-3-1-RC1 netbsd-3-0-1-RELEASE netbsd-3-0-RELEASE netbsd-3-0-RC6 netbsd-3-0-RC5 netbsd-3-0-RC4 netbsd-3-0-RC3 netbsd-3-0-RC2 netbsd-3-0-RC1 yamt-km-base4 yamt-km-base3 netbsd-3-base yamt-km-base2 yamt-km-base kent-audio1-beforemerge kent-audio1-base
|
#
1.31 |
|
01-Sep-2004 |
yamt |
branches: 1.31.4; 1.31.6; uvm_pagefree: when orphaning an A->K loaned page, - decrement uvmexp.anonpages as it's no longer an anon page. - null out anon->u.an_page as the anon no longer own the page. uvm_anfree: add related assertions.
|
#
1.30 |
|
01-Sep-2004 |
yamt |
uvm_anfree: remove a comment which is no longer true.
|
#
1.29 |
|
05-May-2004 |
yamt |
fix a amap_wirerange deadlock problem by re-introducing PG_RELEASED for anon pages. PR/23171 from Christian Limpach. for details, see discussion filed in the PR database.
uvm_anon_release: a new function to free anon-owned PG_RELEASED page. uvm_anfree: we can't wait for the page here because the caller might hold amap lock. instead, just mark the page as PG_RELEASED. who unbusy the page should check the PG_RELEASED. uvm_aio_aiodone: uvm_anon_release() instead of uvm_page_unbusy() if appropriate. uvmfault_anonget: check PG_RELEASED.
|
Revision tags: netbsd-2-0-base
|
#
1.28 |
|
24-Mar-2004 |
junyoung |
branches: 1.28.2; Nuke __P().
|
#
1.27 |
|
06-Jan-2004 |
chs |
fix lock initialization in uvm_anon_add(). from PR 23831.
|
#
1.26 |
|
28-Aug-2003 |
pk |
When retiring a swap device with marked bad blocks on it we should update the `# swap page in use' and `# swap page only' counters. However, at the time of swap device removal we can no longer figure out how many of the bad swap pages are actually also `swap only' pages.
So, on swap I/O errors arrange things to not include the bad swap pages in the `swpgonly' counter as follows: uvm_swap_markbad() decrements `swpgonly' by the number of bad pages, and the various VM object deallocation routines do not decrement `swpgonly' for swap slots marked as SWSLOT_BAD.
|
#
1.25 |
|
11-Aug-2003 |
pk |
uao_pagein_page() & anon_pagein(): * return failure if the page cannot be retrieved. * wakeup any waiters when releasing a page after successful page in.
|
#
1.24 |
|
11-Aug-2003 |
pk |
Only deactivate pages if their wired count is zero.
|
#
1.23 |
|
11-Aug-2003 |
pk |
Make sure to call uvm_swap_free() and uvm_swap_markbad() with valid (i.e. positive) slot numbers.
|
Revision tags: nathanw_sa_before_merge fvdl_fs64_base gmcgarry_ctxsw_base gmcgarry_ucred_base nathanw_sa_base kqueue-aftermerge kqueue-beforemerge kqueue-base
|
#
1.22 |
|
21-Sep-2002 |
chs |
branches: 1.22.6; add missing anon lock around call to uvm_anon_lockloanpg().
|
Revision tags: netbsd-1-6-PATCH002-RELEASE netbsd-1-6-PATCH002 netbsd-1-6-PATCH002-RC4 netbsd-1-6-PATCH002-RC3 netbsd-1-6-PATCH002-RC2 netbsd-1-6-PATCH002-RC1 netbsd-1-6-PATCH001 netbsd-1-6-PATCH001-RELEASE netbsd-1-6-PATCH001-RC3 netbsd-1-6-PATCH001-RC2 netbsd-1-6-PATCH001-RC1 netbsd-1-6-RELEASE netbsd-1-6-RC3 netbsd-1-6-RC2 netbsd-1-6-RC1 netbsd-1-6-base gehenna-devsw-base eeh-devprop-base newlock-base ifpoll-base thorpej-mips-cache-base
|
#
1.21 |
|
10-Nov-2001 |
lukem |
branches: 1.21.4; add RCSIDs, and in some cases, slightly cleanup #include order
|
#
1.20 |
|
06-Nov-2001 |
chs |
several changes prompted by loaning problems: - fix the loaned case in uvm_pagefree(). - redo uvmexp.swpgonly accounting to work with page loaning. add an assertion before each place we adjust uvmexp.swpgonly. - fix uvm_km_pgremove() to always free any swap space associated with the range being removed. - get rid of UVM_LOAN_WIRED flag. instead, we just make sure that pages loaned to the kernel are never on the page queues. this allows us to assert that pages are not loaned and wired at the same time. - add yet more assertions.
|
#
1.19 |
|
21-Oct-2001 |
chs |
branches: 1.19.2; add some missing spinlocks.
|
Revision tags: thorpej-devvp-base3 thorpej-devvp-base2 post-chs-ubcperf
|
#
1.18 |
|
15-Sep-2001 |
chs |
a whole bunch of changes to improve performance and robustness under load:
- remove special treatment of pager_map mappings in pmaps. this is required now, since I've removed the globals that expose the address range. pager_map now uses pmap_kenter_pa() instead of pmap_enter(), so there's no longer any need to special-case it. - eliminate struct uvm_vnode by moving its fields into struct vnode. - rewrite the pageout path. the pager is now responsible for handling the high-level requests instead of only getting control after a bunch of work has already been done on its behalf. this will allow us to UBCify LFS, which needs tighter control over its pages than other filesystems do. writing a page to disk no longer requires making it read-only, which allows us to write wired pages without causing all kinds of havoc. - use a new PG_PAGEOUT flag to indicate that a page should be freed on behalf of the pagedaemon when it's unlocked. this flag is very similar to PG_RELEASED, but unlike PG_RELEASED, PG_PAGEOUT can be cleared if the pageout fails due to eg. an indirect-block buffer being locked. this allows us to remove the "version" field from struct vm_page, and together with shrinking "loan_count" from 32 bits to 16, struct vm_page is now 4 bytes smaller. - no longer use PG_RELEASED for swap-backed pages. if the page is busy because it's being paged out, we can't release the swap slot to be reallocated until that write is complete, but unlike with vnodes we don't keep a count of in-progress writes so there's no good way to know when the write is done. instead, when we need to free a busy swap-backed page, just sleep until we can get it busy ourselves. - implement a fast-path for extending writes which allows us to avoid zeroing new pages. this substantially reduces cpu usage. - encapsulate the data used by the genfs code in a struct genfs_node, which must be the first element of the filesystem-specific vnode data for filesystems which use genfs_{get,put}pages(). - eliminate many of the UVM pagerops, since they aren't needed anymore now that the pager "put" operation is a higher-level operation. - enhance the genfs code to allow NFS to use the genfs_{get,put}pages instead of a modified copy. - clean up struct vnode by removing all the fields that used to be used by the vfs_cluster.c code (which we don't use anymore with UBC). - remove kmem_object and mb_object since they were useless. instead of allocating pages to these objects, we now just allocate pages with no object. such pages are mapped in the kernel until they are freed, so we can use the mapping to find the page to free it. this allows us to remove splvm() protection in several places.
The sum of all these changes improves write throughput on my decstation 5000/200 to within 1% of the rate of NetBSD 1.5 and reduces the elapsed time for "make release" of a NetBSD 1.5 source tree on my 128MB pc to 10% less than a 1.5 kernel took.
|
Revision tags: pre-chs-ubcperf thorpej-devvp-base
|
#
1.17 |
|
25-May-2001 |
chs |
branches: 1.17.2; 1.17.4; remove trailing whitespace.
|
Revision tags: thorpej_scsipi_beforemerge thorpej_scsipi_nbase thorpej_scsipi_base
|
#
1.16 |
|
10-Mar-2001 |
chs |
eliminate the VM_PAGER_* error codes in favor of the traditional E* codes. the mapping is:
VM_PAGER_OK 0 VM_PAGER_BAD <unused> VM_PAGER_FAIL <unused> VM_PAGER_PEND 0 (see below) VM_PAGER_ERROR EIO VM_PAGER_AGAIN EAGAIN VM_PAGER_UNLOCK EBUSY VM_PAGER_REFAULT ERESTART
for async i/o requests, it used to be possible for the request to be convert to sync, and the pager would return VM_PAGER_OK or VM_PAGER_PEND to indicate whether the caller should perform post-i/o cleanup. this is no longer allowed; pagers must now return 0 to indicate that the async i/o was successfully started, and the caller never needs to worry about doing the post-i/o cleanup.
|
#
1.15 |
|
18-Feb-2001 |
chs |
branches: 1.15.2; clean up DIAGNOSTIC checks, use KASSERT().
|
#
1.14 |
|
28-Jan-2001 |
thorpej |
Page scanner improvements, behavior is actually a bit more like Mach VM's now. Specific changes: - Pages now need not have all of their mappings removed before being put on the inactive list. They only need to have the "referenced" attribute cleared. This makes putting pages onto the inactive list much more efficient. In order to eliminate redundant clearings of "refrenced", callers of uvm_pagedeactivate() must now do this themselves. - When checking the "modified" attribute for a page (for clearing PG_CLEAN), make sure to only do it if PG_CLEAN is currently set on the page (saves a potentially expensive pmap operation). - When scanning the inactive list, if a page is referenced, reactivate it (this part was actually added in uvm_pdaemon.c,v 1.27). This now works properly now that pages on the inactive list are allowed to have mappings. - When scanning the inactive list and considering a page for freeing, remove all mappings, and then check the "modified" attribute if the page is marked PG_CLEAN. - When scanning the active list, if the page was referenced since its last sweep by the scanner, don't deactivate it. (This part was actually added in uvm_pdaemon.c,v 1.28.)
These changes greatly improve interactive performance during moderate to high memory and I/O load.
|
#
1.13 |
|
23-Jan-2001 |
thorpej |
Change uvm_analloc() to return a locked anon, update all callers, and fix an anon locking protocol error in uvm_loanzero().
|
#
1.12 |
|
23-Jan-2001 |
thorpej |
Sprinkle some assertions: amap_free(): Assert that the amap is locked. amap_share_protect(): Assert that the amap is locked. amap_wipeout(): Assert that the amap is locked. uvm_anfree(): Assert that the anon has a reference count of 0 and is not locked. uvm_anon_lockloanpg(): Assert that the anon is locked. anon_pagein(): Assert that the anon is locked. uvmfault_anonget(): Assert that the anon is locked. uvm_pagealloc_strat(): Assert that the uobj or the anon is locked
And fix the problems these have uncovered: amap_cow_now(): Lock the new anon after allocating it, and unref and unlock it (rather than lock!) before freeing it in case of an error condition. This should fix a problem reported by Dan Carosone using cdrecord on an i386 MP kernel. uvm_fault(): Case1B -- Lock the new anon afer allocating it, and unlock it later when we unlock the old anon. Case2 -- Lock the new anon after allocating it, and unlock it later by passing it to uvmfault_unlockall() (we set anon to NULL if we're not doing a promote fault).
|
#
1.11 |
|
27-Dec-2000 |
chs |
when we fail to allocate anons to represent new swap space, just return an error rather than panicing.
|
#
1.10 |
|
25-Nov-2000 |
chs |
lots of cleanup: use queue.h macros and KASSERT(). address amap offsets in pages instead of bytes. make amap_ref() and amap_unref() take an amap, offset and length instead of a vm_map_entry_t. improve whitespace and comments.
|
#
1.9 |
|
06-Aug-2000 |
thorpej |
Do something sane with a DIAGNOSTIC condition in an non-DIAGNOSTIC kernel.
|
#
1.8 |
|
05-Aug-2000 |
thorpej |
Correct a comment about locking wrt. uvmfault_anonget().
|
#
1.7 |
|
27-Jun-2000 |
mrg |
remove include of <vm/vm.h>
|
#
1.6 |
|
26-Jun-2000 |
mrg |
remove/move more mach vm header files:
<vm/pglist.h> -> <uvm/uvm_pglist.h> <vm/vm_inherit.h> -> <uvm/uvm_inherit.h> <vm/vm_kern.h> -> into <uvm/uvm_extern.h> <vm/vm_object.h> -> nothing <vm/vm_pager.h> -> into <uvm/uvm_pager.h>
also includes a bunch of <vm/vm_page.h> include removals (due to redudancy with <vm/vm.h>), and a scattering of other similar headers.
|
Revision tags: netbsd-1-5-base minoura-xpg4dl-base chs-ubc2-newbase
|
#
1.5 |
|
11-Jan-2000 |
chs |
branches: 1.5.4; add support for ``swapctl -d'' (removing swap space). improve handling of i/o errors in swap space.
reviewed by: Chuck Cranor
|
Revision tags: wrstuden-devbsize-19991221 wrstuden-devbsize-base comdex-fall-1999-base fvdl-softdep-base
|
#
1.4 |
|
12-Sep-1999 |
chs |
branches: 1.4.2; eliminate the PMAP_NEW option by making it required for all ports. ports which previously had no support for PMAP_NEW now implement the pmap_k* interfaces as wrappers around the non-k versions.
|
#
1.3 |
|
14-Aug-1999 |
ross |
In uvm_anon_init() and uvm_anon_add(), initialize the ref count lock.
|
Revision tags: netbsd-1-4-PATCH003 netbsd-1-4-PATCH002 kame_141_19991130 netbsd-1-4-PATCH001 kame_14_19990705 kame_14_19990628 chs-ubc2-base netbsd-1-4-RELEASE netbsd-1-4-base
|
#
1.2 |
|
26-Mar-1999 |
chs |
add uvmexp.swpgonly and use it to detect out-of-swap conditions.
|
#
1.1 |
|
24-Jan-1999 |
chuck |
cleanup/reorg: - break anon related functions out of uvm_amap.c and put them in their own file (uvm_anon.c). includes break up uvm_anon_init into an amap and an an anon init function - ensure that only functions within the amap module access amap structure fields (add macros to amap api as needed)
|
#
1.73 |
|
23-Feb-2020 |
ad |
Use rw_lock_op().
|
#
1.72 |
|
23-Feb-2020 |
ad |
UVM locking changes, proposed on tech-kern:
- Change the lock on uvm_object, vm_amap and vm_anon to be a RW lock. - Break v_interlock and vmobjlock apart. v_interlock remains a mutex. - Do partial PV list locking in the x86 pmap. Others to follow later.
|
Revision tags: ad-namecache-base2 ad-namecache-base1
|
#
1.71 |
|
15-Jan-2020 |
ad |
Merge from yamt-pagecache (after much testing):
- Reduce unnecessary page scan in putpages esp. when an object has a ton of pages cached but only a few of them are dirty.
- Reduce the number of pmap operations by tracking page dirtiness more precisely in uvm layer.
|
Revision tags: ad-namecache-base
|
#
1.70 |
|
31-Dec-2019 |
ad |
branches: 1.70.2; - Add and use wrapper functions that take and acquire page interlocks, and pairs of page interlocks. Require that the page interlock be held over calls to uvm_pageactivate(), uvm_pagewire() and similar.
- Solve the concurrency problem with page replacement state. Rather than updating the global state synchronously, set an intended state on individual pages (active, inactive, enqueued, dequeued) while holding the page interlock. After the interlock is released put the pages on a 128 entry per-CPU queue for their state changes to be made real in batch. This results in in a ~400 fold decrease in contention on my test system. Proposed on tech-kern but modified to use the page interlock rather than atomics to synchronise as it's much easier to maintain that way, and cheaper.
|
#
1.69 |
|
13-Dec-2019 |
ad |
Break the global uvm_pageqlock into a per-page identity lock and a private lock for use of the pagedaemon policy code. Discussed on tech-kern.
PR kern/54209: NetBSD 8 large memory performance extremely low PR kern/54210: NetBSD-8 processes presumably not exiting PR kern/54727: writing a large file causes unreasonable system behaviour
|
#
1.68 |
|
02-Dec-2019 |
chs |
fix the build for when UVMHIST is enabled.
|
#
1.67 |
|
01-Dec-2019 |
uwe |
Add missing #include <sys/atomic.h>
|
#
1.66 |
|
01-Dec-2019 |
ad |
Free pages in batch instead of taking uvm_pageqlock for each one.
|
#
1.65 |
|
01-Dec-2019 |
ad |
- Adjust uvmexp.swpgonly with atomics, and make uvm_swap_data_lock static. - A bit more __cacheline_aligned on mutexes.
|
Revision tags: netbsd-9-0-RELEASE netbsd-9-0-RC2 netbsd-9-0-RC1 phil-wifi-20191119 netbsd-9-base phil-wifi-20190609 isaki-audio2-base pgoyette-compat-merge-20190127 pgoyette-compat-20190127 pgoyette-compat-20190118 pgoyette-compat-1226 pgoyette-compat-1126 pgoyette-compat-1020 pgoyette-compat-0930 pgoyette-compat-0906 pgoyette-compat-0728 phil-wifi-base pgoyette-compat-0625 pgoyette-compat-0521 pgoyette-compat-0502 pgoyette-compat-0422 pgoyette-compat-0415 pgoyette-compat-0407 pgoyette-compat-0330 pgoyette-compat-0322 pgoyette-compat-0315 pgoyette-compat-base tls-maxphys-base-20171202
|
#
1.64 |
|
28-Oct-2017 |
pgoyette |
Update the kernhist(9) kernel history code to address issues identified in PR kern/52639, as well as some general cleaning-up...
(As proposed on tech-kern@ with additional changes and enhancements.)
Details of changes:
* All history arguments are now stored as uintmax_t values[1], both in the kernel and in the structures used for exporting the history data to userland via sysctl(9). This avoids problems on some architectures where passing a 64-bit (or larger) value to printf(3) can cause it to process the value as multiple arguments. (This can be particularly problematic when printf()'s format string is not a literal, since in that case the compiler cannot know how large each argument should be.)
* Update the data structures used for exporting kernel history data to include a version number as well as the length of history arguments.
* All [2] existing users of kernhist(9) have had their format strings updated. Each format specifier now includes an explicit length modifier 'j' to refer to numeric values of the size of uintmax_t.
* All [2] existing users of kernhist(9) have had their format strings updated to replace uses of "%p" with "%#jx", and the pointer arguments are now cast to (uintptr_t) before being subsequently cast to (uintmax_t). This is needed to avoid compiler warnings about casting "pointer to integer of a different size."
* All [2] existing users of kernhist(9) have had instances of "%s" or "%c" format strings replaced with numeric formats; several instances of mis-match between format string and argument list have been fixed.
* vmstat(1) has been modified to handle the new size of arguments in the history data as exported by sysctl(9).
* vmstat(1) now provides a warning message if the history requested with the -u option does not exist (previously, this condition was silently ignored, with only a single blank line being printed).
* vmstat(1) now checks the version and argument length included in the data exported via sysctl(9) and exits if they do not match the values with which vmstat was built.
* The kernhist(9) man-page has been updated to note the additional requirements imposed on the format strings, along with several other minor changes and enhancements.
[1] It would have been possible to use an explicit length (for example, uint64_t) for the history arguments. But that would require another "rototill" of all the users in the future when we add support for an architecture that supports a larger size. Also, the printf(3) format specifiers for explicitly-sized values, such as "%"PRIu64, are much more verbose (and less aesthetically appealing, IMHO) than simply using "%ju".
[2] I've tried very hard to find "all [the] existing users of kernhist(9)" but it is possible that I've missed some of them. I would be glad to update any stragglers that anyone identifies.
|
Revision tags: netbsd-7-2-RELEASE netbsd-7-1-2-RELEASE netbsd-7-1-1-RELEASE nick-nhusb-base-20170825 perseant-stdc-iso10646-base netbsd-8-base prg-localcount2-base3 prg-localcount2-base2 prg-localcount2-base1 prg-localcount2-base pgoyette-localcount-20170426 bouyer-socketcan-base1 jdolecek-ncq-base pgoyette-localcount-20170320 netbsd-7-1-RELEASE netbsd-7-1-RC2 nick-nhusb-base-20170204 netbsd-7-nhusb-base-20170116 bouyer-socketcan-base pgoyette-localcount-20170107 netbsd-7-1-RC1 nick-nhusb-base-20161204 pgoyette-localcount-20161104 netbsd-7-0-2-RELEASE nick-nhusb-base-20161004 localcount-20160914 netbsd-7-nhusb-base pgoyette-localcount-20160806 pgoyette-localcount-20160726 pgoyette-localcount-base nick-nhusb-base-20160907 nick-nhusb-base-20160529 netbsd-7-0-1-RELEASE nick-nhusb-base-20160422 nick-nhusb-base-20160319 nick-nhusb-base-20151226 netbsd-7-0-RELEASE nick-nhusb-base-20150921 netbsd-7-0-RC3 netbsd-7-0-RC2 netbsd-7-0-RC1 nick-nhusb-base-20150606 nick-nhusb-base-20150406 nick-nhusb-base netbsd-7-base yamt-pagecache-base9 tls-earlyentropy-base riastradh-xf86-video-intel-2-7-1-pre-2-21-15 riastradh-drm2-base3 rmind-smpnet-nbase rmind-smpnet-base tls-maxphys-base
|
#
1.63 |
|
25-Oct-2013 |
martin |
branches: 1.63.22; Mark a diagnostic-only variable
|
Revision tags: netbsd-6-0-6-RELEASE netbsd-6-1-5-RELEASE netbsd-6-1-4-RELEASE netbsd-6-0-5-RELEASE netbsd-6-1-3-RELEASE netbsd-6-0-4-RELEASE netbsd-6-1-2-RELEASE netbsd-6-0-3-RELEASE netbsd-6-1-1-RELEASE riastradh-drm2-base2 riastradh-drm2-base1 riastradh-drm2-base netbsd-6-0-2-RELEASE netbsd-6-1-RELEASE netbsd-6-1-RC4 netbsd-6-1-RC3 agc-symver-base netbsd-6-1-RC2 netbsd-6-1-RC1 yamt-pagecache-base8 netbsd-6-0-1-RELEASE yamt-pagecache-base7 matt-nb6-plus-nbase yamt-pagecache-base6 netbsd-6-0-RELEASE netbsd-6-0-RC2 matt-nb6-plus-base netbsd-6-0-RC1 jmcneill-usbmp-base10 yamt-pagecache-base5 jmcneill-usbmp-base9 yamt-pagecache-base4 jmcneill-usbmp-base8 jmcneill-usbmp-base7 jmcneill-usbmp-base6 jmcneill-usbmp-base5 jmcneill-usbmp-base4 jmcneill-usbmp-base3 jmcneill-usbmp-pre-base2 jmcneill-usbmp-base2 netbsd-6-base jmcneill-usbmp-base jmcneill-audiomp3-base yamt-pagecache-base3 yamt-pagecache-base2 yamt-pagecache-base
|
#
1.62 |
|
18-Aug-2011 |
yamt |
branches: 1.62.2; 1.62.12; 1.62.16; uvm_anon_release: - don't forget to call uvm_anon_dispose. - simplify code a little.
|
#
1.61 |
|
18-Aug-2011 |
yamt |
uvm_anon_freelst: - clear an_link/an_ref when deferring anon disposal. otherwise others can see bogus an_ref. - fix the code to remove anon from the list.
|
#
1.60 |
|
14-Aug-2011 |
rmind |
uvm_anon_freelst: do not free PG_RELEASED pages (change uvm_anon_dispose() to indicate them with a return value).
|
#
1.59 |
|
06-Aug-2011 |
rmind |
- Rework uvm_anfree() into uvm_anon_freelst(), which always drops the lock. - Free anons in uvm_anon_freelst() without lock held. - Mechanic sync to unused loaning code.
|
#
1.58 |
|
05-Jul-2011 |
yamt |
reduce the number of atomic ops in common cases. it's exceptional for anons to remain longer than amap.
|
#
1.57 |
|
24-Jun-2011 |
rmind |
Fix uvmplock regression - a lock against oneself case in amap_swap_off(). Happens since amap is NULL in uvmfault_anonget(), so uvmfault_unlockall() keeps anon locked, when it should unlock it.
|
#
1.56 |
|
24-Jun-2011 |
yamt |
uvm_anon_release: fix a locking error after the rmind-uvmplock merge
|
#
1.55 |
|
17-Jun-2011 |
rmind |
Improve comments on uvm_anon.c, tidy up slightly. No functional changes.
|
#
1.54 |
|
12-Jun-2011 |
rmind |
Welcome to 5.99.53! Merge rmind-uvmplock branch:
- Reorganize locking in UVM and provide extra serialisation for pmap(9). New lock order: [vmpage-owner-lock] -> pmap-lock.
- Simplify locking in some pmap(9) modules by removing P->V locking.
- Use lock object on vmobjlock (and thus vnode_t::v_interlock) to share the locks amongst UVM objects where necessary (tmpfs, layerfs, unionfs).
- Rewrite and optimise x86 TLB shootdown code, make it simpler and cleaner. Add TLBSTATS option for x86 to collect statistics about TLB shootdowns.
- Unify /dev/mem et al in MI code and provide required locking (removes kernel-lock on some ports). Also, avoid cache-aliasing issues.
Thanks to Andrew Doran and Joerg Sonnenberger, as their initial patches formed the core changes of this branch.
|
Revision tags: rmind-uvmplock-nbase cherry-xenmp-base rmind-uvmplock-base
|
#
1.53 |
|
23-Apr-2011 |
rmind |
branches: 1.53.2; Replace "malloc" in comments, remove unnecessary header inclusions.
|
Revision tags: uebayasi-xip-base7 bouyer-quota2-nbase bouyer-quota2-base
|
#
1.52 |
|
02-Feb-2011 |
chuck |
udpate license clauses on my code to match the new-style BSD licenses. based on diff that rmind@ sent me.
no functional change with this commit.
|
Revision tags: netbsd-5-2-3-RELEASE netbsd-5-1-5-RELEASE netbsd-5-2-2-RELEASE netbsd-5-1-4-RELEASE netbsd-5-2-1-RELEASE netbsd-5-1-3-RELEASE netbsd-5-2-RELEASE netbsd-5-2-RC1 netbsd-5-1-2-RELEASE netbsd-5-1-1-RELEASE jruoho-x86intr-base matt-mips64-premerge-20101231 matt-nb5-mips64-premerge-20101231 matt-nb5-pq3-base uebayasi-xip-base6 uebayasi-xip-base5 netbsd-5-1-RELEASE uebayasi-xip-base4 uebayasi-xip-base3 yamt-nfs-mp-base11 netbsd-5-1-RC4 matt-nb5-mips64-k15 uebayasi-xip-base2 yamt-nfs-mp-base10 netbsd-5-1-RC3 netbsd-5-1-RC2 uebayasi-xip-base1 netbsd-5-1-RC1 yamt-nfs-mp-base9 uebayasi-xip-base netbsd-5-0-2-RELEASE matt-nb5-mips64-premerge-20091211 matt-premerge-20091211 yamt-nfs-mp-base8 matt-nb5-mips64-u2-k2-k4-k7-k8-k9 matt-nb4-mips64-k7-u2a-k9b matt-nb5-mips64-u1-k1-k5 yamt-nfs-mp-base7 netbsd-5-0-1-RELEASE jymxensuspend-base yamt-nfs-mp-base6 yamt-nfs-mp-base5 yamt-nfs-mp-base4 jym-xensuspend-nbase yamt-nfs-mp-base3 nick-hppapmap-base4 nick-hppapmap-base3 netbsd-5-0-RELEASE netbsd-5-0-RC4 netbsd-5-0-RC3 nick-hppapmap-base2 netbsd-5-0-RC2 jym-xensuspend-base netbsd-5-0-RC1 haad-dm-base2 haad-nbase2 ad-audiomp2-base netbsd-5-base nick-hppapmap-base matt-mips64-base2 haad-dm-base1 wrstuden-revivesa-base-4 wrstuden-revivesa-base-3 wrstuden-revivesa-base-2 haad-dm-base wrstuden-revivesa-base-1 simonb-wapbl-nbase yamt-pf42-base4 simonb-wapbl-base yamt-pf42-base3 hpcarm-cleanup-nbase yamt-pf42-baseX yamt-pf42-base2 yamt-nfs-mp-base2 wrstuden-revivesa-base yamt-nfs-mp-base yamt-pf42-base ad-socklock-base1 yamt-lazymbuf-base15 yamt-lazymbuf-base14 keiichi-mipv6-nbase mjf-devfs2-base nick-net80211-sync-base keiichi-mipv6-base bouyer-xeni386-nbase bouyer-xeni386-base matt-armv6-nbase mjf-devfs-base hpcarm-cleanup-base
|
#
1.51 |
|
18-Jan-2008 |
yamt |
branches: 1.51.28; 1.51.32; 1.51.38; 1.51.40; push pmap_clear_reference calls into pdpolicy code, where reference bits actually matter.
|
Revision tags: matt-armv6-base
|
#
1.50 |
|
02-Jan-2008 |
ad |
Merge vmlocking2 to head.
|
Revision tags: vmlocking2-base3
|
#
1.49 |
|
20-Dec-2007 |
ad |
Specify PR_LARGECACHE for anon_cache (which is insanely busy).
|
Revision tags: yamt-kmem-base3 cube-autoconf-base yamt-kmem-base2 yamt-kmem-base vmlocking2-base2 reinoud-bufcleanup-nbase vmlocking2-base1 bouyer-xenamd64-base2 vmlocking-nbase bouyer-xenamd64-base jmcneill-pm-base reinoud-bufcleanup-base
|
#
1.48 |
|
13-Nov-2007 |
yamt |
branches: 1.48.2; 1.48.6; g/c unused uvm_anon_pool.
|
#
1.47 |
|
07-Nov-2007 |
ad |
Merge from vmlocking:
- pool_cache changes. - Debugger/procfs locking fixes. - Other minor changes.
|
Revision tags: jmcneill-base yamt-x86pmap-base4 yamt-x86pmap-base3 vmlocking-base
|
#
1.46 |
|
11-Oct-2007 |
ad |
branches: 1.46.2; 1.46.4; Remove LOCK_ASSERT(!simple_lock_held(&foo));
|
Revision tags: nick-csl-alignment-base5 yamt-x86pmap-base2 yamt-x86pmap-base matt-mips64-base
|
#
1.45 |
|
21-Jul-2007 |
ad |
branches: 1.45.4; 1.45.6; 1.45.8; 1.45.10; Merge unobtrusive locking changes from the vmlocking branch.
|
Revision tags: nick-csl-alignment-base yamt-idlelwp-base8 thorpej-atomic-base mjf-ufs-trans-base
|
#
1.44 |
|
12-Mar-2007 |
ad |
branches: 1.44.8; Pass an ipl argument to pool_init/POOL_INIT to be used when initializing the pool's lock.
|
Revision tags: ad-audiomp-base
|
#
1.43 |
|
22-Feb-2007 |
thorpej |
branches: 1.43.4; TRUE -> true, FALSE -> false
|
#
1.42 |
|
21-Feb-2007 |
thorpej |
Replace the Mach-derived boolean_t type with the C99 bool type. A future commit will replace use of TRUE and FALSE with true and false.
|
Revision tags: netbsd-4-0-1-RELEASE wrstuden-fixsa-newbase wrstuden-fixsa-base-1 netbsd-4-0-RELEASE netbsd-4-0-RC5 matt-nb4-arm-base netbsd-4-0-RC4 netbsd-4-0-RC3 netbsd-4-0-RC2 netbsd-4-0-RC1 wrstuden-fixsa-base post-newlock2-merge newlock2-nbase yamt-splraiseipl-base5 yamt-splraiseipl-base4 yamt-splraiseipl-base3 newlock2-base netbsd-4-base
|
#
1.41 |
|
01-Nov-2006 |
yamt |
branches: 1.41.4; remove some __unused from function parameters.
|
Revision tags: yamt-splraiseipl-base2
|
#
1.40 |
|
12-Oct-2006 |
christos |
- sprinkle __unused on function decls. - fix a couple of unused bugs - no more -Wno-unused for i386
|
Revision tags: yamt-splraiseipl-base
|
#
1.39 |
|
15-Sep-2006 |
yamt |
branches: 1.39.2; merge yamt-pdpolicy branch. - separate page replacement policy from the rest of kernel - implement an alternative replacement policy
|
Revision tags: abandoned-netbsd-4-base yamt-pdpolicy-base9 yamt-pdpolicy-base8 yamt-pdpolicy-base7 yamt-pdpolicy-base6 chap-midi-nbase gdamore-uart-base simonb-timcounters-final yamt-pdpolicy-base5 chap-midi-base yamt-pdpolicy-base4 yamt-pdpolicy-base3 peter-altq-base yamt-pdpolicy-base2 elad-kernelauth-base yamt-pdpolicy-base yamt-uio_vmspace-base5 simonb-timecounters-base rpaulo-netinet-merge-pcb-base
|
#
1.38 |
|
11-Dec-2005 |
christos |
branches: 1.38.8; 1.38.20; merge ktrace-lwp.
|
Revision tags: yamt-readahead-base3 yamt-readahead-base2 yamt-readahead-pervnode yamt-readahead-perfile yamt-readahead-base yamt-vop-base3 yamt-vop-base2 thorpej-vnode-attr-base yamt-vop-base ktrace-lwp-base
|
#
1.37 |
|
13-Sep-2005 |
yamt |
wrap swap related code by #ifdef VMSWAP. always #define VMSWAP for now.
|
#
1.36 |
|
31-Jul-2005 |
yamt |
revert "defflag VMSWAP" changes for now. there seems to be far more people who don't want to edit their kernel config files than i thought.
|
#
1.35 |
|
30-Jul-2005 |
yamt |
defflag VMSWAP.
|
#
1.34 |
|
27-Jun-2005 |
thorpej |
branches: 1.34.2; Use ANSI function decls.
|
#
1.33 |
|
11-May-2005 |
yamt |
allocate anons on-demand, rather than reserving static amount of them on boot/swapon.
|
Revision tags: kent-audio2-base
|
#
1.32 |
|
01-Apr-2005 |
yamt |
merge yamt-km branch. - don't use managed mappings/backing objects for wired memory allocations. save some resources like pv_entry. also fix (most of) PR/27030. - simplify kernel memory management API. - simplify pmap bootstrap of some ports. - some related cleanups.
|
Revision tags: netbsd-3-1-1-RELEASE netbsd-3-0-3-RELEASE netbsd-3-1-RELEASE netbsd-3-0-2-RELEASE netbsd-3-1-RC4 netbsd-3-1-RC3 netbsd-3-1-RC2 netbsd-3-1-RC1 netbsd-3-0-1-RELEASE netbsd-3-0-RELEASE netbsd-3-0-RC6 netbsd-3-0-RC5 netbsd-3-0-RC4 netbsd-3-0-RC3 netbsd-3-0-RC2 netbsd-3-0-RC1 yamt-km-base4 yamt-km-base3 netbsd-3-base yamt-km-base2 yamt-km-base kent-audio1-beforemerge kent-audio1-base
|
#
1.31 |
|
01-Sep-2004 |
yamt |
branches: 1.31.4; 1.31.6; uvm_pagefree: when orphaning an A->K loaned page, - decrement uvmexp.anonpages as it's no longer an anon page. - null out anon->u.an_page as the anon no longer own the page. uvm_anfree: add related assertions.
|
#
1.30 |
|
01-Sep-2004 |
yamt |
uvm_anfree: remove a comment which is no longer true.
|
#
1.29 |
|
05-May-2004 |
yamt |
fix a amap_wirerange deadlock problem by re-introducing PG_RELEASED for anon pages. PR/23171 from Christian Limpach. for details, see discussion filed in the PR database.
uvm_anon_release: a new function to free anon-owned PG_RELEASED page. uvm_anfree: we can't wait for the page here because the caller might hold amap lock. instead, just mark the page as PG_RELEASED. who unbusy the page should check the PG_RELEASED. uvm_aio_aiodone: uvm_anon_release() instead of uvm_page_unbusy() if appropriate. uvmfault_anonget: check PG_RELEASED.
|
Revision tags: netbsd-2-0-base
|
#
1.28 |
|
24-Mar-2004 |
junyoung |
branches: 1.28.2; Nuke __P().
|
#
1.27 |
|
06-Jan-2004 |
chs |
fix lock initialization in uvm_anon_add(). from PR 23831.
|
#
1.26 |
|
28-Aug-2003 |
pk |
When retiring a swap device with marked bad blocks on it we should update the `# swap page in use' and `# swap page only' counters. However, at the time of swap device removal we can no longer figure out how many of the bad swap pages are actually also `swap only' pages.
So, on swap I/O errors arrange things to not include the bad swap pages in the `swpgonly' counter as follows: uvm_swap_markbad() decrements `swpgonly' by the number of bad pages, and the various VM object deallocation routines do not decrement `swpgonly' for swap slots marked as SWSLOT_BAD.
|
#
1.25 |
|
11-Aug-2003 |
pk |
uao_pagein_page() & anon_pagein(): * return failure if the page cannot be retrieved. * wakeup any waiters when releasing a page after successful page in.
|
#
1.24 |
|
11-Aug-2003 |
pk |
Only deactivate pages if their wired count is zero.
|
#
1.23 |
|
11-Aug-2003 |
pk |
Make sure to call uvm_swap_free() and uvm_swap_markbad() with valid (i.e. positive) slot numbers.
|
Revision tags: nathanw_sa_before_merge fvdl_fs64_base gmcgarry_ctxsw_base gmcgarry_ucred_base nathanw_sa_base kqueue-aftermerge kqueue-beforemerge kqueue-base
|
#
1.22 |
|
21-Sep-2002 |
chs |
branches: 1.22.6; add missing anon lock around call to uvm_anon_lockloanpg().
|
Revision tags: netbsd-1-6-PATCH002-RELEASE netbsd-1-6-PATCH002 netbsd-1-6-PATCH002-RC4 netbsd-1-6-PATCH002-RC3 netbsd-1-6-PATCH002-RC2 netbsd-1-6-PATCH002-RC1 netbsd-1-6-PATCH001 netbsd-1-6-PATCH001-RELEASE netbsd-1-6-PATCH001-RC3 netbsd-1-6-PATCH001-RC2 netbsd-1-6-PATCH001-RC1 netbsd-1-6-RELEASE netbsd-1-6-RC3 netbsd-1-6-RC2 netbsd-1-6-RC1 netbsd-1-6-base gehenna-devsw-base eeh-devprop-base newlock-base ifpoll-base thorpej-mips-cache-base
|
#
1.21 |
|
10-Nov-2001 |
lukem |
branches: 1.21.4; add RCSIDs, and in some cases, slightly cleanup #include order
|
#
1.20 |
|
06-Nov-2001 |
chs |
several changes prompted by loaning problems: - fix the loaned case in uvm_pagefree(). - redo uvmexp.swpgonly accounting to work with page loaning. add an assertion before each place we adjust uvmexp.swpgonly. - fix uvm_km_pgremove() to always free any swap space associated with the range being removed. - get rid of UVM_LOAN_WIRED flag. instead, we just make sure that pages loaned to the kernel are never on the page queues. this allows us to assert that pages are not loaned and wired at the same time. - add yet more assertions.
|
#
1.19 |
|
21-Oct-2001 |
chs |
branches: 1.19.2; add some missing spinlocks.
|
Revision tags: thorpej-devvp-base3 thorpej-devvp-base2 post-chs-ubcperf
|
#
1.18 |
|
15-Sep-2001 |
chs |
a whole bunch of changes to improve performance and robustness under load:
- remove special treatment of pager_map mappings in pmaps. this is required now, since I've removed the globals that expose the address range. pager_map now uses pmap_kenter_pa() instead of pmap_enter(), so there's no longer any need to special-case it. - eliminate struct uvm_vnode by moving its fields into struct vnode. - rewrite the pageout path. the pager is now responsible for handling the high-level requests instead of only getting control after a bunch of work has already been done on its behalf. this will allow us to UBCify LFS, which needs tighter control over its pages than other filesystems do. writing a page to disk no longer requires making it read-only, which allows us to write wired pages without causing all kinds of havoc. - use a new PG_PAGEOUT flag to indicate that a page should be freed on behalf of the pagedaemon when it's unlocked. this flag is very similar to PG_RELEASED, but unlike PG_RELEASED, PG_PAGEOUT can be cleared if the pageout fails due to eg. an indirect-block buffer being locked. this allows us to remove the "version" field from struct vm_page, and together with shrinking "loan_count" from 32 bits to 16, struct vm_page is now 4 bytes smaller. - no longer use PG_RELEASED for swap-backed pages. if the page is busy because it's being paged out, we can't release the swap slot to be reallocated until that write is complete, but unlike with vnodes we don't keep a count of in-progress writes so there's no good way to know when the write is done. instead, when we need to free a busy swap-backed page, just sleep until we can get it busy ourselves. - implement a fast-path for extending writes which allows us to avoid zeroing new pages. this substantially reduces cpu usage. - encapsulate the data used by the genfs code in a struct genfs_node, which must be the first element of the filesystem-specific vnode data for filesystems which use genfs_{get,put}pages(). - eliminate many of the UVM pagerops, since they aren't needed anymore now that the pager "put" operation is a higher-level operation. - enhance the genfs code to allow NFS to use the genfs_{get,put}pages instead of a modified copy. - clean up struct vnode by removing all the fields that used to be used by the vfs_cluster.c code (which we don't use anymore with UBC). - remove kmem_object and mb_object since they were useless. instead of allocating pages to these objects, we now just allocate pages with no object. such pages are mapped in the kernel until they are freed, so we can use the mapping to find the page to free it. this allows us to remove splvm() protection in several places.
The sum of all these changes improves write throughput on my decstation 5000/200 to within 1% of the rate of NetBSD 1.5 and reduces the elapsed time for "make release" of a NetBSD 1.5 source tree on my 128MB pc to 10% less than a 1.5 kernel took.
|
Revision tags: pre-chs-ubcperf thorpej-devvp-base
|
#
1.17 |
|
25-May-2001 |
chs |
branches: 1.17.2; 1.17.4; remove trailing whitespace.
|
Revision tags: thorpej_scsipi_beforemerge thorpej_scsipi_nbase thorpej_scsipi_base
|
#
1.16 |
|
10-Mar-2001 |
chs |
eliminate the VM_PAGER_* error codes in favor of the traditional E* codes. the mapping is:
VM_PAGER_OK 0 VM_PAGER_BAD <unused> VM_PAGER_FAIL <unused> VM_PAGER_PEND 0 (see below) VM_PAGER_ERROR EIO VM_PAGER_AGAIN EAGAIN VM_PAGER_UNLOCK EBUSY VM_PAGER_REFAULT ERESTART
for async i/o requests, it used to be possible for the request to be convert to sync, and the pager would return VM_PAGER_OK or VM_PAGER_PEND to indicate whether the caller should perform post-i/o cleanup. this is no longer allowed; pagers must now return 0 to indicate that the async i/o was successfully started, and the caller never needs to worry about doing the post-i/o cleanup.
|
#
1.15 |
|
18-Feb-2001 |
chs |
branches: 1.15.2; clean up DIAGNOSTIC checks, use KASSERT().
|
#
1.14 |
|
28-Jan-2001 |
thorpej |
Page scanner improvements, behavior is actually a bit more like Mach VM's now. Specific changes: - Pages now need not have all of their mappings removed before being put on the inactive list. They only need to have the "referenced" attribute cleared. This makes putting pages onto the inactive list much more efficient. In order to eliminate redundant clearings of "refrenced", callers of uvm_pagedeactivate() must now do this themselves. - When checking the "modified" attribute for a page (for clearing PG_CLEAN), make sure to only do it if PG_CLEAN is currently set on the page (saves a potentially expensive pmap operation). - When scanning the inactive list, if a page is referenced, reactivate it (this part was actually added in uvm_pdaemon.c,v 1.27). This now works properly now that pages on the inactive list are allowed to have mappings. - When scanning the inactive list and considering a page for freeing, remove all mappings, and then check the "modified" attribute if the page is marked PG_CLEAN. - When scanning the active list, if the page was referenced since its last sweep by the scanner, don't deactivate it. (This part was actually added in uvm_pdaemon.c,v 1.28.)
These changes greatly improve interactive performance during moderate to high memory and I/O load.
|
#
1.13 |
|
23-Jan-2001 |
thorpej |
Change uvm_analloc() to return a locked anon, update all callers, and fix an anon locking protocol error in uvm_loanzero().
|
#
1.12 |
|
23-Jan-2001 |
thorpej |
Sprinkle some assertions: amap_free(): Assert that the amap is locked. amap_share_protect(): Assert that the amap is locked. amap_wipeout(): Assert that the amap is locked. uvm_anfree(): Assert that the anon has a reference count of 0 and is not locked. uvm_anon_lockloanpg(): Assert that the anon is locked. anon_pagein(): Assert that the anon is locked. uvmfault_anonget(): Assert that the anon is locked. uvm_pagealloc_strat(): Assert that the uobj or the anon is locked
And fix the problems these have uncovered: amap_cow_now(): Lock the new anon after allocating it, and unref and unlock it (rather than lock!) before freeing it in case of an error condition. This should fix a problem reported by Dan Carosone using cdrecord on an i386 MP kernel. uvm_fault(): Case1B -- Lock the new anon afer allocating it, and unlock it later when we unlock the old anon. Case2 -- Lock the new anon after allocating it, and unlock it later by passing it to uvmfault_unlockall() (we set anon to NULL if we're not doing a promote fault).
|
#
1.11 |
|
27-Dec-2000 |
chs |
when we fail to allocate anons to represent new swap space, just return an error rather than panicing.
|
#
1.10 |
|
25-Nov-2000 |
chs |
lots of cleanup: use queue.h macros and KASSERT(). address amap offsets in pages instead of bytes. make amap_ref() and amap_unref() take an amap, offset and length instead of a vm_map_entry_t. improve whitespace and comments.
|
#
1.9 |
|
06-Aug-2000 |
thorpej |
Do something sane with a DIAGNOSTIC condition in an non-DIAGNOSTIC kernel.
|
#
1.8 |
|
05-Aug-2000 |
thorpej |
Correct a comment about locking wrt. uvmfault_anonget().
|
#
1.7 |
|
27-Jun-2000 |
mrg |
remove include of <vm/vm.h>
|
#
1.6 |
|
26-Jun-2000 |
mrg |
remove/move more mach vm header files:
<vm/pglist.h> -> <uvm/uvm_pglist.h> <vm/vm_inherit.h> -> <uvm/uvm_inherit.h> <vm/vm_kern.h> -> into <uvm/uvm_extern.h> <vm/vm_object.h> -> nothing <vm/vm_pager.h> -> into <uvm/uvm_pager.h>
also includes a bunch of <vm/vm_page.h> include removals (due to redudancy with <vm/vm.h>), and a scattering of other similar headers.
|
Revision tags: netbsd-1-5-base minoura-xpg4dl-base chs-ubc2-newbase
|
#
1.5 |
|
11-Jan-2000 |
chs |
branches: 1.5.4; add support for ``swapctl -d'' (removing swap space). improve handling of i/o errors in swap space.
reviewed by: Chuck Cranor
|
Revision tags: wrstuden-devbsize-19991221 wrstuden-devbsize-base comdex-fall-1999-base fvdl-softdep-base
|
#
1.4 |
|
12-Sep-1999 |
chs |
branches: 1.4.2; eliminate the PMAP_NEW option by making it required for all ports. ports which previously had no support for PMAP_NEW now implement the pmap_k* interfaces as wrappers around the non-k versions.
|
#
1.3 |
|
14-Aug-1999 |
ross |
In uvm_anon_init() and uvm_anon_add(), initialize the ref count lock.
|
Revision tags: netbsd-1-4-PATCH003 netbsd-1-4-PATCH002 kame_141_19991130 netbsd-1-4-PATCH001 kame_14_19990705 kame_14_19990628 chs-ubc2-base netbsd-1-4-RELEASE netbsd-1-4-base
|
#
1.2 |
|
26-Mar-1999 |
chs |
add uvmexp.swpgonly and use it to detect out-of-swap conditions.
|
#
1.1 |
|
24-Jan-1999 |
chuck |
cleanup/reorg: - break anon related functions out of uvm_amap.c and put them in their own file (uvm_anon.c). includes break up uvm_anon_init into an amap and an an anon init function - ensure that only functions within the amap module access amap structure fields (add macros to amap api as needed)
|
#
1.71 |
|
15-Jan-2020 |
ad |
Merge from yamt-pagecache (after much testing):
- Reduce unnecessary page scan in putpages esp. when an object has a ton of pages cached but only a few of them are dirty.
- Reduce the number of pmap operations by tracking page dirtiness more precisely in uvm layer.
|
Revision tags: ad-namecache-base
|
#
1.70 |
|
31-Dec-2019 |
ad |
- Add and use wrapper functions that take and acquire page interlocks, and pairs of page interlocks. Require that the page interlock be held over calls to uvm_pageactivate(), uvm_pagewire() and similar.
- Solve the concurrency problem with page replacement state. Rather than updating the global state synchronously, set an intended state on individual pages (active, inactive, enqueued, dequeued) while holding the page interlock. After the interlock is released put the pages on a 128 entry per-CPU queue for their state changes to be made real in batch. This results in in a ~400 fold decrease in contention on my test system. Proposed on tech-kern but modified to use the page interlock rather than atomics to synchronise as it's much easier to maintain that way, and cheaper.
|
#
1.69 |
|
13-Dec-2019 |
ad |
Break the global uvm_pageqlock into a per-page identity lock and a private lock for use of the pagedaemon policy code. Discussed on tech-kern.
PR kern/54209: NetBSD 8 large memory performance extremely low PR kern/54210: NetBSD-8 processes presumably not exiting PR kern/54727: writing a large file causes unreasonable system behaviour
|
#
1.68 |
|
02-Dec-2019 |
chs |
fix the build for when UVMHIST is enabled.
|
#
1.67 |
|
01-Dec-2019 |
uwe |
Add missing #include <sys/atomic.h>
|
#
1.66 |
|
01-Dec-2019 |
ad |
Free pages in batch instead of taking uvm_pageqlock for each one.
|
#
1.65 |
|
01-Dec-2019 |
ad |
- Adjust uvmexp.swpgonly with atomics, and make uvm_swap_data_lock static. - A bit more __cacheline_aligned on mutexes.
|
Revision tags: netbsd-9-0-RC1 phil-wifi-20191119 netbsd-9-base phil-wifi-20190609 isaki-audio2-base pgoyette-compat-merge-20190127 pgoyette-compat-20190127 pgoyette-compat-20190118 pgoyette-compat-1226 pgoyette-compat-1126 pgoyette-compat-1020 pgoyette-compat-0930 pgoyette-compat-0906 pgoyette-compat-0728 phil-wifi-base pgoyette-compat-0625 pgoyette-compat-0521 pgoyette-compat-0502 pgoyette-compat-0422 pgoyette-compat-0415 pgoyette-compat-0407 pgoyette-compat-0330 pgoyette-compat-0322 pgoyette-compat-0315 pgoyette-compat-base tls-maxphys-base-20171202
|
#
1.64 |
|
28-Oct-2017 |
pgoyette |
Update the kernhist(9) kernel history code to address issues identified in PR kern/52639, as well as some general cleaning-up...
(As proposed on tech-kern@ with additional changes and enhancements.)
Details of changes:
* All history arguments are now stored as uintmax_t values[1], both in the kernel and in the structures used for exporting the history data to userland via sysctl(9). This avoids problems on some architectures where passing a 64-bit (or larger) value to printf(3) can cause it to process the value as multiple arguments. (This can be particularly problematic when printf()'s format string is not a literal, since in that case the compiler cannot know how large each argument should be.)
* Update the data structures used for exporting kernel history data to include a version number as well as the length of history arguments.
* All [2] existing users of kernhist(9) have had their format strings updated. Each format specifier now includes an explicit length modifier 'j' to refer to numeric values of the size of uintmax_t.
* All [2] existing users of kernhist(9) have had their format strings updated to replace uses of "%p" with "%#jx", and the pointer arguments are now cast to (uintptr_t) before being subsequently cast to (uintmax_t). This is needed to avoid compiler warnings about casting "pointer to integer of a different size."
* All [2] existing users of kernhist(9) have had instances of "%s" or "%c" format strings replaced with numeric formats; several instances of mis-match between format string and argument list have been fixed.
* vmstat(1) has been modified to handle the new size of arguments in the history data as exported by sysctl(9).
* vmstat(1) now provides a warning message if the history requested with the -u option does not exist (previously, this condition was silently ignored, with only a single blank line being printed).
* vmstat(1) now checks the version and argument length included in the data exported via sysctl(9) and exits if they do not match the values with which vmstat was built.
* The kernhist(9) man-page has been updated to note the additional requirements imposed on the format strings, along with several other minor changes and enhancements.
[1] It would have been possible to use an explicit length (for example, uint64_t) for the history arguments. But that would require another "rototill" of all the users in the future when we add support for an architecture that supports a larger size. Also, the printf(3) format specifiers for explicitly-sized values, such as "%"PRIu64, are much more verbose (and less aesthetically appealing, IMHO) than simply using "%ju".
[2] I've tried very hard to find "all [the] existing users of kernhist(9)" but it is possible that I've missed some of them. I would be glad to update any stragglers that anyone identifies.
|
Revision tags: netbsd-7-2-RELEASE netbsd-7-1-2-RELEASE netbsd-7-1-1-RELEASE nick-nhusb-base-20170825 perseant-stdc-iso10646-base netbsd-8-base prg-localcount2-base3 prg-localcount2-base2 prg-localcount2-base1 prg-localcount2-base pgoyette-localcount-20170426 bouyer-socketcan-base1 jdolecek-ncq-base pgoyette-localcount-20170320 netbsd-7-1-RELEASE netbsd-7-1-RC2 nick-nhusb-base-20170204 netbsd-7-nhusb-base-20170116 bouyer-socketcan-base pgoyette-localcount-20170107 netbsd-7-1-RC1 nick-nhusb-base-20161204 pgoyette-localcount-20161104 netbsd-7-0-2-RELEASE nick-nhusb-base-20161004 localcount-20160914 netbsd-7-nhusb-base pgoyette-localcount-20160806 pgoyette-localcount-20160726 pgoyette-localcount-base nick-nhusb-base-20160907 nick-nhusb-base-20160529 netbsd-7-0-1-RELEASE nick-nhusb-base-20160422 nick-nhusb-base-20160319 nick-nhusb-base-20151226 netbsd-7-0-RELEASE nick-nhusb-base-20150921 netbsd-7-0-RC3 netbsd-7-0-RC2 netbsd-7-0-RC1 nick-nhusb-base-20150606 nick-nhusb-base-20150406 nick-nhusb-base netbsd-7-base yamt-pagecache-base9 tls-earlyentropy-base riastradh-xf86-video-intel-2-7-1-pre-2-21-15 riastradh-drm2-base3 rmind-smpnet-nbase rmind-smpnet-base tls-maxphys-base
|
#
1.63 |
|
25-Oct-2013 |
martin |
branches: 1.63.22; Mark a diagnostic-only variable
|
Revision tags: netbsd-6-0-6-RELEASE netbsd-6-1-5-RELEASE netbsd-6-1-4-RELEASE netbsd-6-0-5-RELEASE netbsd-6-1-3-RELEASE netbsd-6-0-4-RELEASE netbsd-6-1-2-RELEASE netbsd-6-0-3-RELEASE netbsd-6-1-1-RELEASE riastradh-drm2-base2 riastradh-drm2-base1 riastradh-drm2-base netbsd-6-0-2-RELEASE netbsd-6-1-RELEASE netbsd-6-1-RC4 netbsd-6-1-RC3 agc-symver-base netbsd-6-1-RC2 netbsd-6-1-RC1 yamt-pagecache-base8 netbsd-6-0-1-RELEASE yamt-pagecache-base7 matt-nb6-plus-nbase yamt-pagecache-base6 netbsd-6-0-RELEASE netbsd-6-0-RC2 matt-nb6-plus-base netbsd-6-0-RC1 jmcneill-usbmp-base10 yamt-pagecache-base5 jmcneill-usbmp-base9 yamt-pagecache-base4 jmcneill-usbmp-base8 jmcneill-usbmp-base7 jmcneill-usbmp-base6 jmcneill-usbmp-base5 jmcneill-usbmp-base4 jmcneill-usbmp-base3 jmcneill-usbmp-pre-base2 jmcneill-usbmp-base2 netbsd-6-base jmcneill-usbmp-base jmcneill-audiomp3-base yamt-pagecache-base3 yamt-pagecache-base2 yamt-pagecache-base
|
#
1.62 |
|
18-Aug-2011 |
yamt |
branches: 1.62.2; 1.62.12; 1.62.16; uvm_anon_release: - don't forget to call uvm_anon_dispose. - simplify code a little.
|
#
1.61 |
|
18-Aug-2011 |
yamt |
uvm_anon_freelst: - clear an_link/an_ref when deferring anon disposal. otherwise others can see bogus an_ref. - fix the code to remove anon from the list.
|
#
1.60 |
|
14-Aug-2011 |
rmind |
uvm_anon_freelst: do not free PG_RELEASED pages (change uvm_anon_dispose() to indicate them with a return value).
|
#
1.59 |
|
06-Aug-2011 |
rmind |
- Rework uvm_anfree() into uvm_anon_freelst(), which always drops the lock. - Free anons in uvm_anon_freelst() without lock held. - Mechanic sync to unused loaning code.
|
#
1.58 |
|
05-Jul-2011 |
yamt |
reduce the number of atomic ops in common cases. it's exceptional for anons to remain longer than amap.
|
#
1.57 |
|
24-Jun-2011 |
rmind |
Fix uvmplock regression - a lock against oneself case in amap_swap_off(). Happens since amap is NULL in uvmfault_anonget(), so uvmfault_unlockall() keeps anon locked, when it should unlock it.
|
#
1.56 |
|
24-Jun-2011 |
yamt |
uvm_anon_release: fix a locking error after the rmind-uvmplock merge
|
#
1.55 |
|
17-Jun-2011 |
rmind |
Improve comments on uvm_anon.c, tidy up slightly. No functional changes.
|
#
1.54 |
|
12-Jun-2011 |
rmind |
Welcome to 5.99.53! Merge rmind-uvmplock branch:
- Reorganize locking in UVM and provide extra serialisation for pmap(9). New lock order: [vmpage-owner-lock] -> pmap-lock.
- Simplify locking in some pmap(9) modules by removing P->V locking.
- Use lock object on vmobjlock (and thus vnode_t::v_interlock) to share the locks amongst UVM objects where necessary (tmpfs, layerfs, unionfs).
- Rewrite and optimise x86 TLB shootdown code, make it simpler and cleaner. Add TLBSTATS option for x86 to collect statistics about TLB shootdowns.
- Unify /dev/mem et al in MI code and provide required locking (removes kernel-lock on some ports). Also, avoid cache-aliasing issues.
Thanks to Andrew Doran and Joerg Sonnenberger, as their initial patches formed the core changes of this branch.
|
Revision tags: rmind-uvmplock-nbase cherry-xenmp-base rmind-uvmplock-base
|
#
1.53 |
|
23-Apr-2011 |
rmind |
branches: 1.53.2; Replace "malloc" in comments, remove unnecessary header inclusions.
|
Revision tags: uebayasi-xip-base7 bouyer-quota2-nbase bouyer-quota2-base
|
#
1.52 |
|
02-Feb-2011 |
chuck |
udpate license clauses on my code to match the new-style BSD licenses. based on diff that rmind@ sent me.
no functional change with this commit.
|
Revision tags: netbsd-5-2-3-RELEASE netbsd-5-1-5-RELEASE netbsd-5-2-2-RELEASE netbsd-5-1-4-RELEASE netbsd-5-2-1-RELEASE netbsd-5-1-3-RELEASE netbsd-5-2-RELEASE netbsd-5-2-RC1 netbsd-5-1-2-RELEASE netbsd-5-1-1-RELEASE jruoho-x86intr-base matt-mips64-premerge-20101231 matt-nb5-mips64-premerge-20101231 matt-nb5-pq3-base uebayasi-xip-base6 uebayasi-xip-base5 netbsd-5-1-RELEASE uebayasi-xip-base4 uebayasi-xip-base3 yamt-nfs-mp-base11 netbsd-5-1-RC4 matt-nb5-mips64-k15 uebayasi-xip-base2 yamt-nfs-mp-base10 netbsd-5-1-RC3 netbsd-5-1-RC2 uebayasi-xip-base1 netbsd-5-1-RC1 yamt-nfs-mp-base9 uebayasi-xip-base netbsd-5-0-2-RELEASE matt-nb5-mips64-premerge-20091211 matt-premerge-20091211 yamt-nfs-mp-base8 matt-nb5-mips64-u2-k2-k4-k7-k8-k9 matt-nb4-mips64-k7-u2a-k9b matt-nb5-mips64-u1-k1-k5 yamt-nfs-mp-base7 netbsd-5-0-1-RELEASE jymxensuspend-base yamt-nfs-mp-base6 yamt-nfs-mp-base5 yamt-nfs-mp-base4 jym-xensuspend-nbase yamt-nfs-mp-base3 nick-hppapmap-base4 nick-hppapmap-base3 netbsd-5-0-RELEASE netbsd-5-0-RC4 netbsd-5-0-RC3 nick-hppapmap-base2 netbsd-5-0-RC2 jym-xensuspend-base netbsd-5-0-RC1 haad-dm-base2 haad-nbase2 ad-audiomp2-base netbsd-5-base nick-hppapmap-base matt-mips64-base2 haad-dm-base1 wrstuden-revivesa-base-4 wrstuden-revivesa-base-3 wrstuden-revivesa-base-2 haad-dm-base wrstuden-revivesa-base-1 simonb-wapbl-nbase yamt-pf42-base4 simonb-wapbl-base yamt-pf42-base3 hpcarm-cleanup-nbase yamt-pf42-baseX yamt-pf42-base2 yamt-nfs-mp-base2 wrstuden-revivesa-base yamt-nfs-mp-base yamt-pf42-base ad-socklock-base1 yamt-lazymbuf-base15 yamt-lazymbuf-base14 keiichi-mipv6-nbase mjf-devfs2-base nick-net80211-sync-base keiichi-mipv6-base bouyer-xeni386-nbase bouyer-xeni386-base matt-armv6-nbase mjf-devfs-base hpcarm-cleanup-base
|
#
1.51 |
|
18-Jan-2008 |
yamt |
branches: 1.51.28; 1.51.32; 1.51.38; 1.51.40; push pmap_clear_reference calls into pdpolicy code, where reference bits actually matter.
|
Revision tags: matt-armv6-base
|
#
1.50 |
|
02-Jan-2008 |
ad |
Merge vmlocking2 to head.
|
Revision tags: vmlocking2-base3
|
#
1.49 |
|
20-Dec-2007 |
ad |
Specify PR_LARGECACHE for anon_cache (which is insanely busy).
|
Revision tags: yamt-kmem-base3 cube-autoconf-base yamt-kmem-base2 yamt-kmem-base vmlocking2-base2 reinoud-bufcleanup-nbase vmlocking2-base1 bouyer-xenamd64-base2 vmlocking-nbase bouyer-xenamd64-base jmcneill-pm-base reinoud-bufcleanup-base
|
#
1.48 |
|
13-Nov-2007 |
yamt |
branches: 1.48.2; 1.48.6; g/c unused uvm_anon_pool.
|
#
1.47 |
|
07-Nov-2007 |
ad |
Merge from vmlocking:
- pool_cache changes. - Debugger/procfs locking fixes. - Other minor changes.
|
Revision tags: jmcneill-base yamt-x86pmap-base4 yamt-x86pmap-base3 vmlocking-base
|
#
1.46 |
|
11-Oct-2007 |
ad |
branches: 1.46.2; 1.46.4; Remove LOCK_ASSERT(!simple_lock_held(&foo));
|
Revision tags: nick-csl-alignment-base5 yamt-x86pmap-base2 yamt-x86pmap-base matt-mips64-base
|
#
1.45 |
|
21-Jul-2007 |
ad |
branches: 1.45.4; 1.45.6; 1.45.8; 1.45.10; Merge unobtrusive locking changes from the vmlocking branch.
|
Revision tags: nick-csl-alignment-base yamt-idlelwp-base8 thorpej-atomic-base mjf-ufs-trans-base
|
#
1.44 |
|
12-Mar-2007 |
ad |
branches: 1.44.8; Pass an ipl argument to pool_init/POOL_INIT to be used when initializing the pool's lock.
|
Revision tags: ad-audiomp-base
|
#
1.43 |
|
22-Feb-2007 |
thorpej |
branches: 1.43.4; TRUE -> true, FALSE -> false
|
#
1.42 |
|
21-Feb-2007 |
thorpej |
Replace the Mach-derived boolean_t type with the C99 bool type. A future commit will replace use of TRUE and FALSE with true and false.
|
Revision tags: netbsd-4-0-1-RELEASE wrstuden-fixsa-newbase wrstuden-fixsa-base-1 netbsd-4-0-RELEASE netbsd-4-0-RC5 matt-nb4-arm-base netbsd-4-0-RC4 netbsd-4-0-RC3 netbsd-4-0-RC2 netbsd-4-0-RC1 wrstuden-fixsa-base post-newlock2-merge newlock2-nbase yamt-splraiseipl-base5 yamt-splraiseipl-base4 yamt-splraiseipl-base3 newlock2-base netbsd-4-base
|
#
1.41 |
|
01-Nov-2006 |
yamt |
branches: 1.41.4; remove some __unused from function parameters.
|
Revision tags: yamt-splraiseipl-base2
|
#
1.40 |
|
12-Oct-2006 |
christos |
- sprinkle __unused on function decls. - fix a couple of unused bugs - no more -Wno-unused for i386
|
Revision tags: yamt-splraiseipl-base
|
#
1.39 |
|
15-Sep-2006 |
yamt |
branches: 1.39.2; merge yamt-pdpolicy branch. - separate page replacement policy from the rest of kernel - implement an alternative replacement policy
|
Revision tags: abandoned-netbsd-4-base yamt-pdpolicy-base9 yamt-pdpolicy-base8 yamt-pdpolicy-base7 yamt-pdpolicy-base6 chap-midi-nbase gdamore-uart-base simonb-timcounters-final yamt-pdpolicy-base5 chap-midi-base yamt-pdpolicy-base4 yamt-pdpolicy-base3 peter-altq-base yamt-pdpolicy-base2 elad-kernelauth-base yamt-pdpolicy-base yamt-uio_vmspace-base5 simonb-timecounters-base rpaulo-netinet-merge-pcb-base
|
#
1.38 |
|
11-Dec-2005 |
christos |
branches: 1.38.8; 1.38.20; merge ktrace-lwp.
|
Revision tags: yamt-readahead-base3 yamt-readahead-base2 yamt-readahead-pervnode yamt-readahead-perfile yamt-readahead-base yamt-vop-base3 yamt-vop-base2 thorpej-vnode-attr-base yamt-vop-base ktrace-lwp-base
|
#
1.37 |
|
13-Sep-2005 |
yamt |
wrap swap related code by #ifdef VMSWAP. always #define VMSWAP for now.
|
#
1.36 |
|
31-Jul-2005 |
yamt |
revert "defflag VMSWAP" changes for now. there seems to be far more people who don't want to edit their kernel config files than i thought.
|
#
1.35 |
|
30-Jul-2005 |
yamt |
defflag VMSWAP.
|
#
1.34 |
|
27-Jun-2005 |
thorpej |
branches: 1.34.2; Use ANSI function decls.
|
#
1.33 |
|
11-May-2005 |
yamt |
allocate anons on-demand, rather than reserving static amount of them on boot/swapon.
|
Revision tags: kent-audio2-base
|
#
1.32 |
|
01-Apr-2005 |
yamt |
merge yamt-km branch. - don't use managed mappings/backing objects for wired memory allocations. save some resources like pv_entry. also fix (most of) PR/27030. - simplify kernel memory management API. - simplify pmap bootstrap of some ports. - some related cleanups.
|
Revision tags: netbsd-3-1-1-RELEASE netbsd-3-0-3-RELEASE netbsd-3-1-RELEASE netbsd-3-0-2-RELEASE netbsd-3-1-RC4 netbsd-3-1-RC3 netbsd-3-1-RC2 netbsd-3-1-RC1 netbsd-3-0-1-RELEASE netbsd-3-0-RELEASE netbsd-3-0-RC6 netbsd-3-0-RC5 netbsd-3-0-RC4 netbsd-3-0-RC3 netbsd-3-0-RC2 netbsd-3-0-RC1 yamt-km-base4 yamt-km-base3 netbsd-3-base yamt-km-base2 yamt-km-base kent-audio1-beforemerge kent-audio1-base
|
#
1.31 |
|
01-Sep-2004 |
yamt |
branches: 1.31.4; 1.31.6; uvm_pagefree: when orphaning an A->K loaned page, - decrement uvmexp.anonpages as it's no longer an anon page. - null out anon->u.an_page as the anon no longer own the page. uvm_anfree: add related assertions.
|
#
1.30 |
|
01-Sep-2004 |
yamt |
uvm_anfree: remove a comment which is no longer true.
|
#
1.29 |
|
05-May-2004 |
yamt |
fix a amap_wirerange deadlock problem by re-introducing PG_RELEASED for anon pages. PR/23171 from Christian Limpach. for details, see discussion filed in the PR database.
uvm_anon_release: a new function to free anon-owned PG_RELEASED page. uvm_anfree: we can't wait for the page here because the caller might hold amap lock. instead, just mark the page as PG_RELEASED. who unbusy the page should check the PG_RELEASED. uvm_aio_aiodone: uvm_anon_release() instead of uvm_page_unbusy() if appropriate. uvmfault_anonget: check PG_RELEASED.
|
Revision tags: netbsd-2-0-base
|
#
1.28 |
|
24-Mar-2004 |
junyoung |
branches: 1.28.2; Nuke __P().
|
#
1.27 |
|
06-Jan-2004 |
chs |
fix lock initialization in uvm_anon_add(). from PR 23831.
|
#
1.26 |
|
28-Aug-2003 |
pk |
When retiring a swap device with marked bad blocks on it we should update the `# swap page in use' and `# swap page only' counters. However, at the time of swap device removal we can no longer figure out how many of the bad swap pages are actually also `swap only' pages.
So, on swap I/O errors arrange things to not include the bad swap pages in the `swpgonly' counter as follows: uvm_swap_markbad() decrements `swpgonly' by the number of bad pages, and the various VM object deallocation routines do not decrement `swpgonly' for swap slots marked as SWSLOT_BAD.
|
#
1.25 |
|
11-Aug-2003 |
pk |
uao_pagein_page() & anon_pagein(): * return failure if the page cannot be retrieved. * wakeup any waiters when releasing a page after successful page in.
|
#
1.24 |
|
11-Aug-2003 |
pk |
Only deactivate pages if their wired count is zero.
|
#
1.23 |
|
11-Aug-2003 |
pk |
Make sure to call uvm_swap_free() and uvm_swap_markbad() with valid (i.e. positive) slot numbers.
|
Revision tags: nathanw_sa_before_merge fvdl_fs64_base gmcgarry_ctxsw_base gmcgarry_ucred_base nathanw_sa_base kqueue-aftermerge kqueue-beforemerge kqueue-base
|
#
1.22 |
|
21-Sep-2002 |
chs |
branches: 1.22.6; add missing anon lock around call to uvm_anon_lockloanpg().
|
Revision tags: netbsd-1-6-PATCH002-RELEASE netbsd-1-6-PATCH002 netbsd-1-6-PATCH002-RC4 netbsd-1-6-PATCH002-RC3 netbsd-1-6-PATCH002-RC2 netbsd-1-6-PATCH002-RC1 netbsd-1-6-PATCH001 netbsd-1-6-PATCH001-RELEASE netbsd-1-6-PATCH001-RC3 netbsd-1-6-PATCH001-RC2 netbsd-1-6-PATCH001-RC1 netbsd-1-6-RELEASE netbsd-1-6-RC3 netbsd-1-6-RC2 netbsd-1-6-RC1 netbsd-1-6-base gehenna-devsw-base eeh-devprop-base newlock-base ifpoll-base thorpej-mips-cache-base
|
#
1.21 |
|
10-Nov-2001 |
lukem |
branches: 1.21.4; add RCSIDs, and in some cases, slightly cleanup #include order
|
#
1.20 |
|
06-Nov-2001 |
chs |
several changes prompted by loaning problems: - fix the loaned case in uvm_pagefree(). - redo uvmexp.swpgonly accounting to work with page loaning. add an assertion before each place we adjust uvmexp.swpgonly. - fix uvm_km_pgremove() to always free any swap space associated with the range being removed. - get rid of UVM_LOAN_WIRED flag. instead, we just make sure that pages loaned to the kernel are never on the page queues. this allows us to assert that pages are not loaned and wired at the same time. - add yet more assertions.
|
#
1.19 |
|
21-Oct-2001 |
chs |
branches: 1.19.2; add some missing spinlocks.
|
Revision tags: thorpej-devvp-base3 thorpej-devvp-base2 post-chs-ubcperf
|
#
1.18 |
|
15-Sep-2001 |
chs |
a whole bunch of changes to improve performance and robustness under load:
- remove special treatment of pager_map mappings in pmaps. this is required now, since I've removed the globals that expose the address range. pager_map now uses pmap_kenter_pa() instead of pmap_enter(), so there's no longer any need to special-case it. - eliminate struct uvm_vnode by moving its fields into struct vnode. - rewrite the pageout path. the pager is now responsible for handling the high-level requests instead of only getting control after a bunch of work has already been done on its behalf. this will allow us to UBCify LFS, which needs tighter control over its pages than other filesystems do. writing a page to disk no longer requires making it read-only, which allows us to write wired pages without causing all kinds of havoc. - use a new PG_PAGEOUT flag to indicate that a page should be freed on behalf of the pagedaemon when it's unlocked. this flag is very similar to PG_RELEASED, but unlike PG_RELEASED, PG_PAGEOUT can be cleared if the pageout fails due to eg. an indirect-block buffer being locked. this allows us to remove the "version" field from struct vm_page, and together with shrinking "loan_count" from 32 bits to 16, struct vm_page is now 4 bytes smaller. - no longer use PG_RELEASED for swap-backed pages. if the page is busy because it's being paged out, we can't release the swap slot to be reallocated until that write is complete, but unlike with vnodes we don't keep a count of in-progress writes so there's no good way to know when the write is done. instead, when we need to free a busy swap-backed page, just sleep until we can get it busy ourselves. - implement a fast-path for extending writes which allows us to avoid zeroing new pages. this substantially reduces cpu usage. - encapsulate the data used by the genfs code in a struct genfs_node, which must be the first element of the filesystem-specific vnode data for filesystems which use genfs_{get,put}pages(). - eliminate many of the UVM pagerops, since they aren't needed anymore now that the pager "put" operation is a higher-level operation. - enhance the genfs code to allow NFS to use the genfs_{get,put}pages instead of a modified copy. - clean up struct vnode by removing all the fields that used to be used by the vfs_cluster.c code (which we don't use anymore with UBC). - remove kmem_object and mb_object since they were useless. instead of allocating pages to these objects, we now just allocate pages with no object. such pages are mapped in the kernel until they are freed, so we can use the mapping to find the page to free it. this allows us to remove splvm() protection in several places.
The sum of all these changes improves write throughput on my decstation 5000/200 to within 1% of the rate of NetBSD 1.5 and reduces the elapsed time for "make release" of a NetBSD 1.5 source tree on my 128MB pc to 10% less than a 1.5 kernel took.
|
Revision tags: pre-chs-ubcperf thorpej-devvp-base
|
#
1.17 |
|
25-May-2001 |
chs |
branches: 1.17.2; 1.17.4; remove trailing whitespace.
|
Revision tags: thorpej_scsipi_beforemerge thorpej_scsipi_nbase thorpej_scsipi_base
|
#
1.16 |
|
10-Mar-2001 |
chs |
eliminate the VM_PAGER_* error codes in favor of the traditional E* codes. the mapping is:
VM_PAGER_OK 0 VM_PAGER_BAD <unused> VM_PAGER_FAIL <unused> VM_PAGER_PEND 0 (see below) VM_PAGER_ERROR EIO VM_PAGER_AGAIN EAGAIN VM_PAGER_UNLOCK EBUSY VM_PAGER_REFAULT ERESTART
for async i/o requests, it used to be possible for the request to be convert to sync, and the pager would return VM_PAGER_OK or VM_PAGER_PEND to indicate whether the caller should perform post-i/o cleanup. this is no longer allowed; pagers must now return 0 to indicate that the async i/o was successfully started, and the caller never needs to worry about doing the post-i/o cleanup.
|
#
1.15 |
|
18-Feb-2001 |
chs |
branches: 1.15.2; clean up DIAGNOSTIC checks, use KASSERT().
|
#
1.14 |
|
28-Jan-2001 |
thorpej |
Page scanner improvements, behavior is actually a bit more like Mach VM's now. Specific changes: - Pages now need not have all of their mappings removed before being put on the inactive list. They only need to have the "referenced" attribute cleared. This makes putting pages onto the inactive list much more efficient. In order to eliminate redundant clearings of "refrenced", callers of uvm_pagedeactivate() must now do this themselves. - When checking the "modified" attribute for a page (for clearing PG_CLEAN), make sure to only do it if PG_CLEAN is currently set on the page (saves a potentially expensive pmap operation). - When scanning the inactive list, if a page is referenced, reactivate it (this part was actually added in uvm_pdaemon.c,v 1.27). This now works properly now that pages on the inactive list are allowed to have mappings. - When scanning the inactive list and considering a page for freeing, remove all mappings, and then check the "modified" attribute if the page is marked PG_CLEAN. - When scanning the active list, if the page was referenced since its last sweep by the scanner, don't deactivate it. (This part was actually added in uvm_pdaemon.c,v 1.28.)
These changes greatly improve interactive performance during moderate to high memory and I/O load.
|
#
1.13 |
|
23-Jan-2001 |
thorpej |
Change uvm_analloc() to return a locked anon, update all callers, and fix an anon locking protocol error in uvm_loanzero().
|
#
1.12 |
|
23-Jan-2001 |
thorpej |
Sprinkle some assertions: amap_free(): Assert that the amap is locked. amap_share_protect(): Assert that the amap is locked. amap_wipeout(): Assert that the amap is locked. uvm_anfree(): Assert that the anon has a reference count of 0 and is not locked. uvm_anon_lockloanpg(): Assert that the anon is locked. anon_pagein(): Assert that the anon is locked. uvmfault_anonget(): Assert that the anon is locked. uvm_pagealloc_strat(): Assert that the uobj or the anon is locked
And fix the problems these have uncovered: amap_cow_now(): Lock the new anon after allocating it, and unref and unlock it (rather than lock!) before freeing it in case of an error condition. This should fix a problem reported by Dan Carosone using cdrecord on an i386 MP kernel. uvm_fault(): Case1B -- Lock the new anon afer allocating it, and unlock it later when we unlock the old anon. Case2 -- Lock the new anon after allocating it, and unlock it later by passing it to uvmfault_unlockall() (we set anon to NULL if we're not doing a promote fault).
|
#
1.11 |
|
27-Dec-2000 |
chs |
when we fail to allocate anons to represent new swap space, just return an error rather than panicing.
|
#
1.10 |
|
25-Nov-2000 |
chs |
lots of cleanup: use queue.h macros and KASSERT(). address amap offsets in pages instead of bytes. make amap_ref() and amap_unref() take an amap, offset and length instead of a vm_map_entry_t. improve whitespace and comments.
|
#
1.9 |
|
06-Aug-2000 |
thorpej |
Do something sane with a DIAGNOSTIC condition in an non-DIAGNOSTIC kernel.
|
#
1.8 |
|
05-Aug-2000 |
thorpej |
Correct a comment about locking wrt. uvmfault_anonget().
|
#
1.7 |
|
27-Jun-2000 |
mrg |
remove include of <vm/vm.h>
|
#
1.6 |
|
26-Jun-2000 |
mrg |
remove/move more mach vm header files:
<vm/pglist.h> -> <uvm/uvm_pglist.h> <vm/vm_inherit.h> -> <uvm/uvm_inherit.h> <vm/vm_kern.h> -> into <uvm/uvm_extern.h> <vm/vm_object.h> -> nothing <vm/vm_pager.h> -> into <uvm/uvm_pager.h>
also includes a bunch of <vm/vm_page.h> include removals (due to redudancy with <vm/vm.h>), and a scattering of other similar headers.
|
Revision tags: netbsd-1-5-base minoura-xpg4dl-base chs-ubc2-newbase
|
#
1.5 |
|
11-Jan-2000 |
chs |
branches: 1.5.4; add support for ``swapctl -d'' (removing swap space). improve handling of i/o errors in swap space.
reviewed by: Chuck Cranor
|
Revision tags: wrstuden-devbsize-19991221 wrstuden-devbsize-base comdex-fall-1999-base fvdl-softdep-base
|
#
1.4 |
|
12-Sep-1999 |
chs |
branches: 1.4.2; eliminate the PMAP_NEW option by making it required for all ports. ports which previously had no support for PMAP_NEW now implement the pmap_k* interfaces as wrappers around the non-k versions.
|
#
1.3 |
|
14-Aug-1999 |
ross |
In uvm_anon_init() and uvm_anon_add(), initialize the ref count lock.
|
Revision tags: netbsd-1-4-PATCH003 netbsd-1-4-PATCH002 kame_141_19991130 netbsd-1-4-PATCH001 kame_14_19990705 kame_14_19990628 chs-ubc2-base netbsd-1-4-RELEASE netbsd-1-4-base
|
#
1.2 |
|
26-Mar-1999 |
chs |
add uvmexp.swpgonly and use it to detect out-of-swap conditions.
|
#
1.1 |
|
24-Jan-1999 |
chuck |
cleanup/reorg: - break anon related functions out of uvm_amap.c and put them in their own file (uvm_anon.c). includes break up uvm_anon_init into an amap and an an anon init function - ensure that only functions within the amap module access amap structure fields (add macros to amap api as needed)
|
#
1.70 |
|
31-Dec-2019 |
ad |
- Add and use wrapper functions that take and acquire page interlocks, and pairs of page interlocks. Require that the page interlock be held over calls to uvm_pageactivate(), uvm_pagewire() and similar.
- Solve the concurrency problem with page replacement state. Rather than updating the global state synchronously, set an intended state on individual pages (active, inactive, enqueued, dequeued) while holding the page interlock. After the interlock is released put the pages on a 128 entry per-CPU queue for their state changes to be made real in batch. This results in in a ~400 fold decrease in contention on my test system. Proposed on tech-kern but modified to use the page interlock rather than atomics to synchronise as it's much easier to maintain that way, and cheaper.
|
#
1.69 |
|
13-Dec-2019 |
ad |
Break the global uvm_pageqlock into a per-page identity lock and a private lock for use of the pagedaemon policy code. Discussed on tech-kern.
PR kern/54209: NetBSD 8 large memory performance extremely low PR kern/54210: NetBSD-8 processes presumably not exiting PR kern/54727: writing a large file causes unreasonable system behaviour
|
#
1.68 |
|
02-Dec-2019 |
chs |
fix the build for when UVMHIST is enabled.
|
#
1.67 |
|
01-Dec-2019 |
uwe |
Add missing #include <sys/atomic.h>
|
#
1.66 |
|
01-Dec-2019 |
ad |
Free pages in batch instead of taking uvm_pageqlock for each one.
|
#
1.65 |
|
01-Dec-2019 |
ad |
- Adjust uvmexp.swpgonly with atomics, and make uvm_swap_data_lock static. - A bit more __cacheline_aligned on mutexes.
|
Revision tags: netbsd-9-0-RC1 phil-wifi-20191119 netbsd-9-base phil-wifi-20190609 isaki-audio2-base pgoyette-compat-merge-20190127 pgoyette-compat-20190127 pgoyette-compat-20190118 pgoyette-compat-1226 pgoyette-compat-1126 pgoyette-compat-1020 pgoyette-compat-0930 pgoyette-compat-0906 pgoyette-compat-0728 phil-wifi-base pgoyette-compat-0625 pgoyette-compat-0521 pgoyette-compat-0502 pgoyette-compat-0422 pgoyette-compat-0415 pgoyette-compat-0407 pgoyette-compat-0330 pgoyette-compat-0322 pgoyette-compat-0315 pgoyette-compat-base tls-maxphys-base-20171202
|
#
1.64 |
|
28-Oct-2017 |
pgoyette |
Update the kernhist(9) kernel history code to address issues identified in PR kern/52639, as well as some general cleaning-up...
(As proposed on tech-kern@ with additional changes and enhancements.)
Details of changes:
* All history arguments are now stored as uintmax_t values[1], both in the kernel and in the structures used for exporting the history data to userland via sysctl(9). This avoids problems on some architectures where passing a 64-bit (or larger) value to printf(3) can cause it to process the value as multiple arguments. (This can be particularly problematic when printf()'s format string is not a literal, since in that case the compiler cannot know how large each argument should be.)
* Update the data structures used for exporting kernel history data to include a version number as well as the length of history arguments.
* All [2] existing users of kernhist(9) have had their format strings updated. Each format specifier now includes an explicit length modifier 'j' to refer to numeric values of the size of uintmax_t.
* All [2] existing users of kernhist(9) have had their format strings updated to replace uses of "%p" with "%#jx", and the pointer arguments are now cast to (uintptr_t) before being subsequently cast to (uintmax_t). This is needed to avoid compiler warnings about casting "pointer to integer of a different size."
* All [2] existing users of kernhist(9) have had instances of "%s" or "%c" format strings replaced with numeric formats; several instances of mis-match between format string and argument list have been fixed.
* vmstat(1) has been modified to handle the new size of arguments in the history data as exported by sysctl(9).
* vmstat(1) now provides a warning message if the history requested with the -u option does not exist (previously, this condition was silently ignored, with only a single blank line being printed).
* vmstat(1) now checks the version and argument length included in the data exported via sysctl(9) and exits if they do not match the values with which vmstat was built.
* The kernhist(9) man-page has been updated to note the additional requirements imposed on the format strings, along with several other minor changes and enhancements.
[1] It would have been possible to use an explicit length (for example, uint64_t) for the history arguments. But that would require another "rototill" of all the users in the future when we add support for an architecture that supports a larger size. Also, the printf(3) format specifiers for explicitly-sized values, such as "%"PRIu64, are much more verbose (and less aesthetically appealing, IMHO) than simply using "%ju".
[2] I've tried very hard to find "all [the] existing users of kernhist(9)" but it is possible that I've missed some of them. I would be glad to update any stragglers that anyone identifies.
|
Revision tags: netbsd-7-2-RELEASE netbsd-7-1-2-RELEASE netbsd-7-1-1-RELEASE nick-nhusb-base-20170825 perseant-stdc-iso10646-base netbsd-8-base prg-localcount2-base3 prg-localcount2-base2 prg-localcount2-base1 prg-localcount2-base pgoyette-localcount-20170426 bouyer-socketcan-base1 jdolecek-ncq-base pgoyette-localcount-20170320 netbsd-7-1-RELEASE netbsd-7-1-RC2 nick-nhusb-base-20170204 netbsd-7-nhusb-base-20170116 bouyer-socketcan-base pgoyette-localcount-20170107 netbsd-7-1-RC1 nick-nhusb-base-20161204 pgoyette-localcount-20161104 netbsd-7-0-2-RELEASE nick-nhusb-base-20161004 localcount-20160914 netbsd-7-nhusb-base pgoyette-localcount-20160806 pgoyette-localcount-20160726 pgoyette-localcount-base nick-nhusb-base-20160907 nick-nhusb-base-20160529 netbsd-7-0-1-RELEASE nick-nhusb-base-20160422 nick-nhusb-base-20160319 nick-nhusb-base-20151226 netbsd-7-0-RELEASE nick-nhusb-base-20150921 netbsd-7-0-RC3 netbsd-7-0-RC2 netbsd-7-0-RC1 nick-nhusb-base-20150606 nick-nhusb-base-20150406 nick-nhusb-base netbsd-7-base yamt-pagecache-base9 tls-earlyentropy-base riastradh-xf86-video-intel-2-7-1-pre-2-21-15 riastradh-drm2-base3 rmind-smpnet-nbase rmind-smpnet-base tls-maxphys-base
|
#
1.63 |
|
25-Oct-2013 |
martin |
branches: 1.63.22; Mark a diagnostic-only variable
|
Revision tags: netbsd-6-0-6-RELEASE netbsd-6-1-5-RELEASE netbsd-6-1-4-RELEASE netbsd-6-0-5-RELEASE netbsd-6-1-3-RELEASE netbsd-6-0-4-RELEASE netbsd-6-1-2-RELEASE netbsd-6-0-3-RELEASE netbsd-6-1-1-RELEASE riastradh-drm2-base2 riastradh-drm2-base1 riastradh-drm2-base netbsd-6-0-2-RELEASE netbsd-6-1-RELEASE netbsd-6-1-RC4 netbsd-6-1-RC3 agc-symver-base netbsd-6-1-RC2 netbsd-6-1-RC1 yamt-pagecache-base8 netbsd-6-0-1-RELEASE yamt-pagecache-base7 matt-nb6-plus-nbase yamt-pagecache-base6 netbsd-6-0-RELEASE netbsd-6-0-RC2 matt-nb6-plus-base netbsd-6-0-RC1 jmcneill-usbmp-base10 yamt-pagecache-base5 jmcneill-usbmp-base9 yamt-pagecache-base4 jmcneill-usbmp-base8 jmcneill-usbmp-base7 jmcneill-usbmp-base6 jmcneill-usbmp-base5 jmcneill-usbmp-base4 jmcneill-usbmp-base3 jmcneill-usbmp-pre-base2 jmcneill-usbmp-base2 netbsd-6-base jmcneill-usbmp-base jmcneill-audiomp3-base yamt-pagecache-base3 yamt-pagecache-base2 yamt-pagecache-base
|
#
1.62 |
|
18-Aug-2011 |
yamt |
branches: 1.62.2; 1.62.12; 1.62.16; uvm_anon_release: - don't forget to call uvm_anon_dispose. - simplify code a little.
|
#
1.61 |
|
18-Aug-2011 |
yamt |
uvm_anon_freelst: - clear an_link/an_ref when deferring anon disposal. otherwise others can see bogus an_ref. - fix the code to remove anon from the list.
|
#
1.60 |
|
14-Aug-2011 |
rmind |
uvm_anon_freelst: do not free PG_RELEASED pages (change uvm_anon_dispose() to indicate them with a return value).
|
#
1.59 |
|
06-Aug-2011 |
rmind |
- Rework uvm_anfree() into uvm_anon_freelst(), which always drops the lock. - Free anons in uvm_anon_freelst() without lock held. - Mechanic sync to unused loaning code.
|
#
1.58 |
|
05-Jul-2011 |
yamt |
reduce the number of atomic ops in common cases. it's exceptional for anons to remain longer than amap.
|
#
1.57 |
|
24-Jun-2011 |
rmind |
Fix uvmplock regression - a lock against oneself case in amap_swap_off(). Happens since amap is NULL in uvmfault_anonget(), so uvmfault_unlockall() keeps anon locked, when it should unlock it.
|
#
1.56 |
|
24-Jun-2011 |
yamt |
uvm_anon_release: fix a locking error after the rmind-uvmplock merge
|
#
1.55 |
|
17-Jun-2011 |
rmind |
Improve comments on uvm_anon.c, tidy up slightly. No functional changes.
|
#
1.54 |
|
12-Jun-2011 |
rmind |
Welcome to 5.99.53! Merge rmind-uvmplock branch:
- Reorganize locking in UVM and provide extra serialisation for pmap(9). New lock order: [vmpage-owner-lock] -> pmap-lock.
- Simplify locking in some pmap(9) modules by removing P->V locking.
- Use lock object on vmobjlock (and thus vnode_t::v_interlock) to share the locks amongst UVM objects where necessary (tmpfs, layerfs, unionfs).
- Rewrite and optimise x86 TLB shootdown code, make it simpler and cleaner. Add TLBSTATS option for x86 to collect statistics about TLB shootdowns.
- Unify /dev/mem et al in MI code and provide required locking (removes kernel-lock on some ports). Also, avoid cache-aliasing issues.
Thanks to Andrew Doran and Joerg Sonnenberger, as their initial patches formed the core changes of this branch.
|
Revision tags: rmind-uvmplock-nbase cherry-xenmp-base rmind-uvmplock-base
|
#
1.53 |
|
23-Apr-2011 |
rmind |
branches: 1.53.2; Replace "malloc" in comments, remove unnecessary header inclusions.
|
Revision tags: uebayasi-xip-base7 bouyer-quota2-nbase bouyer-quota2-base
|
#
1.52 |
|
02-Feb-2011 |
chuck |
udpate license clauses on my code to match the new-style BSD licenses. based on diff that rmind@ sent me.
no functional change with this commit.
|
Revision tags: netbsd-5-2-3-RELEASE netbsd-5-1-5-RELEASE netbsd-5-2-2-RELEASE netbsd-5-1-4-RELEASE netbsd-5-2-1-RELEASE netbsd-5-1-3-RELEASE netbsd-5-2-RELEASE netbsd-5-2-RC1 netbsd-5-1-2-RELEASE netbsd-5-1-1-RELEASE jruoho-x86intr-base matt-mips64-premerge-20101231 matt-nb5-mips64-premerge-20101231 matt-nb5-pq3-base uebayasi-xip-base6 uebayasi-xip-base5 netbsd-5-1-RELEASE uebayasi-xip-base4 uebayasi-xip-base3 yamt-nfs-mp-base11 netbsd-5-1-RC4 matt-nb5-mips64-k15 uebayasi-xip-base2 yamt-nfs-mp-base10 netbsd-5-1-RC3 netbsd-5-1-RC2 uebayasi-xip-base1 netbsd-5-1-RC1 yamt-nfs-mp-base9 uebayasi-xip-base netbsd-5-0-2-RELEASE matt-nb5-mips64-premerge-20091211 matt-premerge-20091211 yamt-nfs-mp-base8 matt-nb5-mips64-u2-k2-k4-k7-k8-k9 matt-nb4-mips64-k7-u2a-k9b matt-nb5-mips64-u1-k1-k5 yamt-nfs-mp-base7 netbsd-5-0-1-RELEASE jymxensuspend-base yamt-nfs-mp-base6 yamt-nfs-mp-base5 yamt-nfs-mp-base4 jym-xensuspend-nbase yamt-nfs-mp-base3 nick-hppapmap-base4 nick-hppapmap-base3 netbsd-5-0-RELEASE netbsd-5-0-RC4 netbsd-5-0-RC3 nick-hppapmap-base2 netbsd-5-0-RC2 jym-xensuspend-base netbsd-5-0-RC1 haad-dm-base2 haad-nbase2 ad-audiomp2-base netbsd-5-base nick-hppapmap-base matt-mips64-base2 haad-dm-base1 wrstuden-revivesa-base-4 wrstuden-revivesa-base-3 wrstuden-revivesa-base-2 haad-dm-base wrstuden-revivesa-base-1 simonb-wapbl-nbase yamt-pf42-base4 simonb-wapbl-base yamt-pf42-base3 hpcarm-cleanup-nbase yamt-pf42-baseX yamt-pf42-base2 yamt-nfs-mp-base2 wrstuden-revivesa-base yamt-nfs-mp-base yamt-pf42-base ad-socklock-base1 yamt-lazymbuf-base15 yamt-lazymbuf-base14 keiichi-mipv6-nbase mjf-devfs2-base nick-net80211-sync-base keiichi-mipv6-base bouyer-xeni386-nbase bouyer-xeni386-base matt-armv6-nbase mjf-devfs-base hpcarm-cleanup-base
|
#
1.51 |
|
18-Jan-2008 |
yamt |
branches: 1.51.28; 1.51.32; 1.51.38; 1.51.40; push pmap_clear_reference calls into pdpolicy code, where reference bits actually matter.
|
Revision tags: matt-armv6-base
|
#
1.50 |
|
02-Jan-2008 |
ad |
Merge vmlocking2 to head.
|
Revision tags: vmlocking2-base3
|
#
1.49 |
|
20-Dec-2007 |
ad |
Specify PR_LARGECACHE for anon_cache (which is insanely busy).
|
Revision tags: yamt-kmem-base3 cube-autoconf-base yamt-kmem-base2 yamt-kmem-base vmlocking2-base2 reinoud-bufcleanup-nbase vmlocking2-base1 bouyer-xenamd64-base2 vmlocking-nbase bouyer-xenamd64-base jmcneill-pm-base reinoud-bufcleanup-base
|
#
1.48 |
|
13-Nov-2007 |
yamt |
branches: 1.48.2; 1.48.6; g/c unused uvm_anon_pool.
|
#
1.47 |
|
07-Nov-2007 |
ad |
Merge from vmlocking:
- pool_cache changes. - Debugger/procfs locking fixes. - Other minor changes.
|
Revision tags: jmcneill-base yamt-x86pmap-base4 yamt-x86pmap-base3 vmlocking-base
|
#
1.46 |
|
11-Oct-2007 |
ad |
branches: 1.46.2; 1.46.4; Remove LOCK_ASSERT(!simple_lock_held(&foo));
|
Revision tags: nick-csl-alignment-base5 yamt-x86pmap-base2 yamt-x86pmap-base matt-mips64-base
|
#
1.45 |
|
21-Jul-2007 |
ad |
branches: 1.45.4; 1.45.6; 1.45.8; 1.45.10; Merge unobtrusive locking changes from the vmlocking branch.
|
Revision tags: nick-csl-alignment-base yamt-idlelwp-base8 thorpej-atomic-base mjf-ufs-trans-base
|
#
1.44 |
|
12-Mar-2007 |
ad |
branches: 1.44.8; Pass an ipl argument to pool_init/POOL_INIT to be used when initializing the pool's lock.
|
Revision tags: ad-audiomp-base
|
#
1.43 |
|
22-Feb-2007 |
thorpej |
branches: 1.43.4; TRUE -> true, FALSE -> false
|
#
1.42 |
|
21-Feb-2007 |
thorpej |
Replace the Mach-derived boolean_t type with the C99 bool type. A future commit will replace use of TRUE and FALSE with true and false.
|
Revision tags: netbsd-4-0-1-RELEASE wrstuden-fixsa-newbase wrstuden-fixsa-base-1 netbsd-4-0-RELEASE netbsd-4-0-RC5 matt-nb4-arm-base netbsd-4-0-RC4 netbsd-4-0-RC3 netbsd-4-0-RC2 netbsd-4-0-RC1 wrstuden-fixsa-base post-newlock2-merge newlock2-nbase yamt-splraiseipl-base5 yamt-splraiseipl-base4 yamt-splraiseipl-base3 newlock2-base netbsd-4-base
|
#
1.41 |
|
01-Nov-2006 |
yamt |
branches: 1.41.4; remove some __unused from function parameters.
|
Revision tags: yamt-splraiseipl-base2
|
#
1.40 |
|
12-Oct-2006 |
christos |
- sprinkle __unused on function decls. - fix a couple of unused bugs - no more -Wno-unused for i386
|
Revision tags: yamt-splraiseipl-base
|
#
1.39 |
|
15-Sep-2006 |
yamt |
branches: 1.39.2; merge yamt-pdpolicy branch. - separate page replacement policy from the rest of kernel - implement an alternative replacement policy
|
Revision tags: abandoned-netbsd-4-base yamt-pdpolicy-base9 yamt-pdpolicy-base8 yamt-pdpolicy-base7 yamt-pdpolicy-base6 chap-midi-nbase gdamore-uart-base simonb-timcounters-final yamt-pdpolicy-base5 chap-midi-base yamt-pdpolicy-base4 yamt-pdpolicy-base3 peter-altq-base yamt-pdpolicy-base2 elad-kernelauth-base yamt-pdpolicy-base yamt-uio_vmspace-base5 simonb-timecounters-base rpaulo-netinet-merge-pcb-base
|
#
1.38 |
|
11-Dec-2005 |
christos |
branches: 1.38.8; 1.38.20; merge ktrace-lwp.
|
Revision tags: yamt-readahead-base3 yamt-readahead-base2 yamt-readahead-pervnode yamt-readahead-perfile yamt-readahead-base yamt-vop-base3 yamt-vop-base2 thorpej-vnode-attr-base yamt-vop-base ktrace-lwp-base
|
#
1.37 |
|
13-Sep-2005 |
yamt |
wrap swap related code by #ifdef VMSWAP. always #define VMSWAP for now.
|
#
1.36 |
|
31-Jul-2005 |
yamt |
revert "defflag VMSWAP" changes for now. there seems to be far more people who don't want to edit their kernel config files than i thought.
|
#
1.35 |
|
30-Jul-2005 |
yamt |
defflag VMSWAP.
|
#
1.34 |
|
27-Jun-2005 |
thorpej |
branches: 1.34.2; Use ANSI function decls.
|
#
1.33 |
|
11-May-2005 |
yamt |
allocate anons on-demand, rather than reserving static amount of them on boot/swapon.
|
Revision tags: kent-audio2-base
|
#
1.32 |
|
01-Apr-2005 |
yamt |
merge yamt-km branch. - don't use managed mappings/backing objects for wired memory allocations. save some resources like pv_entry. also fix (most of) PR/27030. - simplify kernel memory management API. - simplify pmap bootstrap of some ports. - some related cleanups.
|
Revision tags: netbsd-3-1-1-RELEASE netbsd-3-0-3-RELEASE netbsd-3-1-RELEASE netbsd-3-0-2-RELEASE netbsd-3-1-RC4 netbsd-3-1-RC3 netbsd-3-1-RC2 netbsd-3-1-RC1 netbsd-3-0-1-RELEASE netbsd-3-0-RELEASE netbsd-3-0-RC6 netbsd-3-0-RC5 netbsd-3-0-RC4 netbsd-3-0-RC3 netbsd-3-0-RC2 netbsd-3-0-RC1 yamt-km-base4 yamt-km-base3 netbsd-3-base yamt-km-base2 yamt-km-base kent-audio1-beforemerge kent-audio1-base
|
#
1.31 |
|
01-Sep-2004 |
yamt |
branches: 1.31.4; 1.31.6; uvm_pagefree: when orphaning an A->K loaned page, - decrement uvmexp.anonpages as it's no longer an anon page. - null out anon->u.an_page as the anon no longer own the page. uvm_anfree: add related assertions.
|
#
1.30 |
|
01-Sep-2004 |
yamt |
uvm_anfree: remove a comment which is no longer true.
|
#
1.29 |
|
05-May-2004 |
yamt |
fix a amap_wirerange deadlock problem by re-introducing PG_RELEASED for anon pages. PR/23171 from Christian Limpach. for details, see discussion filed in the PR database.
uvm_anon_release: a new function to free anon-owned PG_RELEASED page. uvm_anfree: we can't wait for the page here because the caller might hold amap lock. instead, just mark the page as PG_RELEASED. who unbusy the page should check the PG_RELEASED. uvm_aio_aiodone: uvm_anon_release() instead of uvm_page_unbusy() if appropriate. uvmfault_anonget: check PG_RELEASED.
|
Revision tags: netbsd-2-0-base
|
#
1.28 |
|
24-Mar-2004 |
junyoung |
branches: 1.28.2; Nuke __P().
|
#
1.27 |
|
06-Jan-2004 |
chs |
fix lock initialization in uvm_anon_add(). from PR 23831.
|
#
1.26 |
|
28-Aug-2003 |
pk |
When retiring a swap device with marked bad blocks on it we should update the `# swap page in use' and `# swap page only' counters. However, at the time of swap device removal we can no longer figure out how many of the bad swap pages are actually also `swap only' pages.
So, on swap I/O errors arrange things to not include the bad swap pages in the `swpgonly' counter as follows: uvm_swap_markbad() decrements `swpgonly' by the number of bad pages, and the various VM object deallocation routines do not decrement `swpgonly' for swap slots marked as SWSLOT_BAD.
|
#
1.25 |
|
11-Aug-2003 |
pk |
uao_pagein_page() & anon_pagein(): * return failure if the page cannot be retrieved. * wakeup any waiters when releasing a page after successful page in.
|
#
1.24 |
|
11-Aug-2003 |
pk |
Only deactivate pages if their wired count is zero.
|
#
1.23 |
|
11-Aug-2003 |
pk |
Make sure to call uvm_swap_free() and uvm_swap_markbad() with valid (i.e. positive) slot numbers.
|
Revision tags: nathanw_sa_before_merge fvdl_fs64_base gmcgarry_ctxsw_base gmcgarry_ucred_base nathanw_sa_base kqueue-aftermerge kqueue-beforemerge kqueue-base
|
#
1.22 |
|
21-Sep-2002 |
chs |
branches: 1.22.6; add missing anon lock around call to uvm_anon_lockloanpg().
|
Revision tags: netbsd-1-6-PATCH002-RELEASE netbsd-1-6-PATCH002 netbsd-1-6-PATCH002-RC4 netbsd-1-6-PATCH002-RC3 netbsd-1-6-PATCH002-RC2 netbsd-1-6-PATCH002-RC1 netbsd-1-6-PATCH001 netbsd-1-6-PATCH001-RELEASE netbsd-1-6-PATCH001-RC3 netbsd-1-6-PATCH001-RC2 netbsd-1-6-PATCH001-RC1 netbsd-1-6-RELEASE netbsd-1-6-RC3 netbsd-1-6-RC2 netbsd-1-6-RC1 netbsd-1-6-base gehenna-devsw-base eeh-devprop-base newlock-base ifpoll-base thorpej-mips-cache-base
|
#
1.21 |
|
10-Nov-2001 |
lukem |
branches: 1.21.4; add RCSIDs, and in some cases, slightly cleanup #include order
|
#
1.20 |
|
06-Nov-2001 |
chs |
several changes prompted by loaning problems: - fix the loaned case in uvm_pagefree(). - redo uvmexp.swpgonly accounting to work with page loaning. add an assertion before each place we adjust uvmexp.swpgonly. - fix uvm_km_pgremove() to always free any swap space associated with the range being removed. - get rid of UVM_LOAN_WIRED flag. instead, we just make sure that pages loaned to the kernel are never on the page queues. this allows us to assert that pages are not loaned and wired at the same time. - add yet more assertions.
|
#
1.19 |
|
21-Oct-2001 |
chs |
branches: 1.19.2; add some missing spinlocks.
|
Revision tags: thorpej-devvp-base3 thorpej-devvp-base2 post-chs-ubcperf
|
#
1.18 |
|
15-Sep-2001 |
chs |
a whole bunch of changes to improve performance and robustness under load:
- remove special treatment of pager_map mappings in pmaps. this is required now, since I've removed the globals that expose the address range. pager_map now uses pmap_kenter_pa() instead of pmap_enter(), so there's no longer any need to special-case it. - eliminate struct uvm_vnode by moving its fields into struct vnode. - rewrite the pageout path. the pager is now responsible for handling the high-level requests instead of only getting control after a bunch of work has already been done on its behalf. this will allow us to UBCify LFS, which needs tighter control over its pages than other filesystems do. writing a page to disk no longer requires making it read-only, which allows us to write wired pages without causing all kinds of havoc. - use a new PG_PAGEOUT flag to indicate that a page should be freed on behalf of the pagedaemon when it's unlocked. this flag is very similar to PG_RELEASED, but unlike PG_RELEASED, PG_PAGEOUT can be cleared if the pageout fails due to eg. an indirect-block buffer being locked. this allows us to remove the "version" field from struct vm_page, and together with shrinking "loan_count" from 32 bits to 16, struct vm_page is now 4 bytes smaller. - no longer use PG_RELEASED for swap-backed pages. if the page is busy because it's being paged out, we can't release the swap slot to be reallocated until that write is complete, but unlike with vnodes we don't keep a count of in-progress writes so there's no good way to know when the write is done. instead, when we need to free a busy swap-backed page, just sleep until we can get it busy ourselves. - implement a fast-path for extending writes which allows us to avoid zeroing new pages. this substantially reduces cpu usage. - encapsulate the data used by the genfs code in a struct genfs_node, which must be the first element of the filesystem-specific vnode data for filesystems which use genfs_{get,put}pages(). - eliminate many of the UVM pagerops, since they aren't needed anymore now that the pager "put" operation is a higher-level operation. - enhance the genfs code to allow NFS to use the genfs_{get,put}pages instead of a modified copy. - clean up struct vnode by removing all the fields that used to be used by the vfs_cluster.c code (which we don't use anymore with UBC). - remove kmem_object and mb_object since they were useless. instead of allocating pages to these objects, we now just allocate pages with no object. such pages are mapped in the kernel until they are freed, so we can use the mapping to find the page to free it. this allows us to remove splvm() protection in several places.
The sum of all these changes improves write throughput on my decstation 5000/200 to within 1% of the rate of NetBSD 1.5 and reduces the elapsed time for "make release" of a NetBSD 1.5 source tree on my 128MB pc to 10% less than a 1.5 kernel took.
|
Revision tags: pre-chs-ubcperf thorpej-devvp-base
|
#
1.17 |
|
25-May-2001 |
chs |
branches: 1.17.2; 1.17.4; remove trailing whitespace.
|
Revision tags: thorpej_scsipi_beforemerge thorpej_scsipi_nbase thorpej_scsipi_base
|
#
1.16 |
|
10-Mar-2001 |
chs |
eliminate the VM_PAGER_* error codes in favor of the traditional E* codes. the mapping is:
VM_PAGER_OK 0 VM_PAGER_BAD <unused> VM_PAGER_FAIL <unused> VM_PAGER_PEND 0 (see below) VM_PAGER_ERROR EIO VM_PAGER_AGAIN EAGAIN VM_PAGER_UNLOCK EBUSY VM_PAGER_REFAULT ERESTART
for async i/o requests, it used to be possible for the request to be convert to sync, and the pager would return VM_PAGER_OK or VM_PAGER_PEND to indicate whether the caller should perform post-i/o cleanup. this is no longer allowed; pagers must now return 0 to indicate that the async i/o was successfully started, and the caller never needs to worry about doing the post-i/o cleanup.
|
#
1.15 |
|
18-Feb-2001 |
chs |
branches: 1.15.2; clean up DIAGNOSTIC checks, use KASSERT().
|
#
1.14 |
|
28-Jan-2001 |
thorpej |
Page scanner improvements, behavior is actually a bit more like Mach VM's now. Specific changes: - Pages now need not have all of their mappings removed before being put on the inactive list. They only need to have the "referenced" attribute cleared. This makes putting pages onto the inactive list much more efficient. In order to eliminate redundant clearings of "refrenced", callers of uvm_pagedeactivate() must now do this themselves. - When checking the "modified" attribute for a page (for clearing PG_CLEAN), make sure to only do it if PG_CLEAN is currently set on the page (saves a potentially expensive pmap operation). - When scanning the inactive list, if a page is referenced, reactivate it (this part was actually added in uvm_pdaemon.c,v 1.27). This now works properly now that pages on the inactive list are allowed to have mappings. - When scanning the inactive list and considering a page for freeing, remove all mappings, and then check the "modified" attribute if the page is marked PG_CLEAN. - When scanning the active list, if the page was referenced since its last sweep by the scanner, don't deactivate it. (This part was actually added in uvm_pdaemon.c,v 1.28.)
These changes greatly improve interactive performance during moderate to high memory and I/O load.
|
#
1.13 |
|
23-Jan-2001 |
thorpej |
Change uvm_analloc() to return a locked anon, update all callers, and fix an anon locking protocol error in uvm_loanzero().
|
#
1.12 |
|
23-Jan-2001 |
thorpej |
Sprinkle some assertions: amap_free(): Assert that the amap is locked. amap_share_protect(): Assert that the amap is locked. amap_wipeout(): Assert that the amap is locked. uvm_anfree(): Assert that the anon has a reference count of 0 and is not locked. uvm_anon_lockloanpg(): Assert that the anon is locked. anon_pagein(): Assert that the anon is locked. uvmfault_anonget(): Assert that the anon is locked. uvm_pagealloc_strat(): Assert that the uobj or the anon is locked
And fix the problems these have uncovered: amap_cow_now(): Lock the new anon after allocating it, and unref and unlock it (rather than lock!) before freeing it in case of an error condition. This should fix a problem reported by Dan Carosone using cdrecord on an i386 MP kernel. uvm_fault(): Case1B -- Lock the new anon afer allocating it, and unlock it later when we unlock the old anon. Case2 -- Lock the new anon after allocating it, and unlock it later by passing it to uvmfault_unlockall() (we set anon to NULL if we're not doing a promote fault).
|
#
1.11 |
|
27-Dec-2000 |
chs |
when we fail to allocate anons to represent new swap space, just return an error rather than panicing.
|
#
1.10 |
|
25-Nov-2000 |
chs |
lots of cleanup: use queue.h macros and KASSERT(). address amap offsets in pages instead of bytes. make amap_ref() and amap_unref() take an amap, offset and length instead of a vm_map_entry_t. improve whitespace and comments.
|
#
1.9 |
|
06-Aug-2000 |
thorpej |
Do something sane with a DIAGNOSTIC condition in an non-DIAGNOSTIC kernel.
|
#
1.8 |
|
05-Aug-2000 |
thorpej |
Correct a comment about locking wrt. uvmfault_anonget().
|
#
1.7 |
|
27-Jun-2000 |
mrg |
remove include of <vm/vm.h>
|
#
1.6 |
|
26-Jun-2000 |
mrg |
remove/move more mach vm header files:
<vm/pglist.h> -> <uvm/uvm_pglist.h> <vm/vm_inherit.h> -> <uvm/uvm_inherit.h> <vm/vm_kern.h> -> into <uvm/uvm_extern.h> <vm/vm_object.h> -> nothing <vm/vm_pager.h> -> into <uvm/uvm_pager.h>
also includes a bunch of <vm/vm_page.h> include removals (due to redudancy with <vm/vm.h>), and a scattering of other similar headers.
|
Revision tags: netbsd-1-5-base minoura-xpg4dl-base chs-ubc2-newbase
|
#
1.5 |
|
11-Jan-2000 |
chs |
branches: 1.5.4; add support for ``swapctl -d'' (removing swap space). improve handling of i/o errors in swap space.
reviewed by: Chuck Cranor
|
Revision tags: wrstuden-devbsize-19991221 wrstuden-devbsize-base comdex-fall-1999-base fvdl-softdep-base
|
#
1.4 |
|
12-Sep-1999 |
chs |
branches: 1.4.2; eliminate the PMAP_NEW option by making it required for all ports. ports which previously had no support for PMAP_NEW now implement the pmap_k* interfaces as wrappers around the non-k versions.
|
#
1.3 |
|
14-Aug-1999 |
ross |
In uvm_anon_init() and uvm_anon_add(), initialize the ref count lock.
|
Revision tags: netbsd-1-4-PATCH003 netbsd-1-4-PATCH002 kame_141_19991130 netbsd-1-4-PATCH001 kame_14_19990705 kame_14_19990628 chs-ubc2-base netbsd-1-4-RELEASE netbsd-1-4-base
|
#
1.2 |
|
26-Mar-1999 |
chs |
add uvmexp.swpgonly and use it to detect out-of-swap conditions.
|
#
1.1 |
|
24-Jan-1999 |
chuck |
cleanup/reorg: - break anon related functions out of uvm_amap.c and put them in their own file (uvm_anon.c). includes break up uvm_anon_init into an amap and an an anon init function - ensure that only functions within the amap module access amap structure fields (add macros to amap api as needed)
|
#
1.69 |
|
13-Dec-2019 |
ad |
Break the global uvm_pageqlock into a per-page identity lock and a private lock for use of the pagedaemon policy code. Discussed on tech-kern.
PR kern/54209: NetBSD 8 large memory performance extremely low PR kern/54210: NetBSD-8 processes presumably not exiting PR kern/54727: writing a large file causes unreasonable system behaviour
|
#
1.68 |
|
02-Dec-2019 |
chs |
fix the build for when UVMHIST is enabled.
|
#
1.67 |
|
01-Dec-2019 |
uwe |
Add missing #include <sys/atomic.h>
|
#
1.66 |
|
01-Dec-2019 |
ad |
Free pages in batch instead of taking uvm_pageqlock for each one.
|
#
1.65 |
|
01-Dec-2019 |
ad |
- Adjust uvmexp.swpgonly with atomics, and make uvm_swap_data_lock static. - A bit more __cacheline_aligned on mutexes.
|
Revision tags: netbsd-9-0-RC1 phil-wifi-20191119 netbsd-9-base phil-wifi-20190609 isaki-audio2-base pgoyette-compat-merge-20190127 pgoyette-compat-20190127 pgoyette-compat-20190118 pgoyette-compat-1226 pgoyette-compat-1126 pgoyette-compat-1020 pgoyette-compat-0930 pgoyette-compat-0906 pgoyette-compat-0728 phil-wifi-base pgoyette-compat-0625 pgoyette-compat-0521 pgoyette-compat-0502 pgoyette-compat-0422 pgoyette-compat-0415 pgoyette-compat-0407 pgoyette-compat-0330 pgoyette-compat-0322 pgoyette-compat-0315 pgoyette-compat-base tls-maxphys-base-20171202
|
#
1.64 |
|
28-Oct-2017 |
pgoyette |
Update the kernhist(9) kernel history code to address issues identified in PR kern/52639, as well as some general cleaning-up...
(As proposed on tech-kern@ with additional changes and enhancements.)
Details of changes:
* All history arguments are now stored as uintmax_t values[1], both in the kernel and in the structures used for exporting the history data to userland via sysctl(9). This avoids problems on some architectures where passing a 64-bit (or larger) value to printf(3) can cause it to process the value as multiple arguments. (This can be particularly problematic when printf()'s format string is not a literal, since in that case the compiler cannot know how large each argument should be.)
* Update the data structures used for exporting kernel history data to include a version number as well as the length of history arguments.
* All [2] existing users of kernhist(9) have had their format strings updated. Each format specifier now includes an explicit length modifier 'j' to refer to numeric values of the size of uintmax_t.
* All [2] existing users of kernhist(9) have had their format strings updated to replace uses of "%p" with "%#jx", and the pointer arguments are now cast to (uintptr_t) before being subsequently cast to (uintmax_t). This is needed to avoid compiler warnings about casting "pointer to integer of a different size."
* All [2] existing users of kernhist(9) have had instances of "%s" or "%c" format strings replaced with numeric formats; several instances of mis-match between format string and argument list have been fixed.
* vmstat(1) has been modified to handle the new size of arguments in the history data as exported by sysctl(9).
* vmstat(1) now provides a warning message if the history requested with the -u option does not exist (previously, this condition was silently ignored, with only a single blank line being printed).
* vmstat(1) now checks the version and argument length included in the data exported via sysctl(9) and exits if they do not match the values with which vmstat was built.
* The kernhist(9) man-page has been updated to note the additional requirements imposed on the format strings, along with several other minor changes and enhancements.
[1] It would have been possible to use an explicit length (for example, uint64_t) for the history arguments. But that would require another "rototill" of all the users in the future when we add support for an architecture that supports a larger size. Also, the printf(3) format specifiers for explicitly-sized values, such as "%"PRIu64, are much more verbose (and less aesthetically appealing, IMHO) than simply using "%ju".
[2] I've tried very hard to find "all [the] existing users of kernhist(9)" but it is possible that I've missed some of them. I would be glad to update any stragglers that anyone identifies.
|
Revision tags: netbsd-7-2-RELEASE netbsd-7-1-2-RELEASE netbsd-7-1-1-RELEASE nick-nhusb-base-20170825 perseant-stdc-iso10646-base netbsd-8-base prg-localcount2-base3 prg-localcount2-base2 prg-localcount2-base1 prg-localcount2-base pgoyette-localcount-20170426 bouyer-socketcan-base1 jdolecek-ncq-base pgoyette-localcount-20170320 netbsd-7-1-RELEASE netbsd-7-1-RC2 nick-nhusb-base-20170204 netbsd-7-nhusb-base-20170116 bouyer-socketcan-base pgoyette-localcount-20170107 netbsd-7-1-RC1 nick-nhusb-base-20161204 pgoyette-localcount-20161104 netbsd-7-0-2-RELEASE nick-nhusb-base-20161004 localcount-20160914 netbsd-7-nhusb-base pgoyette-localcount-20160806 pgoyette-localcount-20160726 pgoyette-localcount-base nick-nhusb-base-20160907 nick-nhusb-base-20160529 netbsd-7-0-1-RELEASE nick-nhusb-base-20160422 nick-nhusb-base-20160319 nick-nhusb-base-20151226 netbsd-7-0-RELEASE nick-nhusb-base-20150921 netbsd-7-0-RC3 netbsd-7-0-RC2 netbsd-7-0-RC1 nick-nhusb-base-20150606 nick-nhusb-base-20150406 nick-nhusb-base netbsd-7-base yamt-pagecache-base9 tls-earlyentropy-base riastradh-xf86-video-intel-2-7-1-pre-2-21-15 riastradh-drm2-base3 rmind-smpnet-nbase rmind-smpnet-base tls-maxphys-base
|
#
1.63 |
|
25-Oct-2013 |
martin |
branches: 1.63.22; Mark a diagnostic-only variable
|
Revision tags: netbsd-6-0-6-RELEASE netbsd-6-1-5-RELEASE netbsd-6-1-4-RELEASE netbsd-6-0-5-RELEASE netbsd-6-1-3-RELEASE netbsd-6-0-4-RELEASE netbsd-6-1-2-RELEASE netbsd-6-0-3-RELEASE netbsd-6-1-1-RELEASE riastradh-drm2-base2 riastradh-drm2-base1 riastradh-drm2-base netbsd-6-0-2-RELEASE netbsd-6-1-RELEASE netbsd-6-1-RC4 netbsd-6-1-RC3 agc-symver-base netbsd-6-1-RC2 netbsd-6-1-RC1 yamt-pagecache-base8 netbsd-6-0-1-RELEASE yamt-pagecache-base7 matt-nb6-plus-nbase yamt-pagecache-base6 netbsd-6-0-RELEASE netbsd-6-0-RC2 matt-nb6-plus-base netbsd-6-0-RC1 jmcneill-usbmp-base10 yamt-pagecache-base5 jmcneill-usbmp-base9 yamt-pagecache-base4 jmcneill-usbmp-base8 jmcneill-usbmp-base7 jmcneill-usbmp-base6 jmcneill-usbmp-base5 jmcneill-usbmp-base4 jmcneill-usbmp-base3 jmcneill-usbmp-pre-base2 jmcneill-usbmp-base2 netbsd-6-base jmcneill-usbmp-base jmcneill-audiomp3-base yamt-pagecache-base3 yamt-pagecache-base2 yamt-pagecache-base
|
#
1.62 |
|
18-Aug-2011 |
yamt |
branches: 1.62.2; 1.62.12; 1.62.16; uvm_anon_release: - don't forget to call uvm_anon_dispose. - simplify code a little.
|
#
1.61 |
|
18-Aug-2011 |
yamt |
uvm_anon_freelst: - clear an_link/an_ref when deferring anon disposal. otherwise others can see bogus an_ref. - fix the code to remove anon from the list.
|
#
1.60 |
|
14-Aug-2011 |
rmind |
uvm_anon_freelst: do not free PG_RELEASED pages (change uvm_anon_dispose() to indicate them with a return value).
|
#
1.59 |
|
06-Aug-2011 |
rmind |
- Rework uvm_anfree() into uvm_anon_freelst(), which always drops the lock. - Free anons in uvm_anon_freelst() without lock held. - Mechanic sync to unused loaning code.
|
#
1.58 |
|
05-Jul-2011 |
yamt |
reduce the number of atomic ops in common cases. it's exceptional for anons to remain longer than amap.
|
#
1.57 |
|
24-Jun-2011 |
rmind |
Fix uvmplock regression - a lock against oneself case in amap_swap_off(). Happens since amap is NULL in uvmfault_anonget(), so uvmfault_unlockall() keeps anon locked, when it should unlock it.
|
#
1.56 |
|
24-Jun-2011 |
yamt |
uvm_anon_release: fix a locking error after the rmind-uvmplock merge
|
#
1.55 |
|
17-Jun-2011 |
rmind |
Improve comments on uvm_anon.c, tidy up slightly. No functional changes.
|
#
1.54 |
|
12-Jun-2011 |
rmind |
Welcome to 5.99.53! Merge rmind-uvmplock branch:
- Reorganize locking in UVM and provide extra serialisation for pmap(9). New lock order: [vmpage-owner-lock] -> pmap-lock.
- Simplify locking in some pmap(9) modules by removing P->V locking.
- Use lock object on vmobjlock (and thus vnode_t::v_interlock) to share the locks amongst UVM objects where necessary (tmpfs, layerfs, unionfs).
- Rewrite and optimise x86 TLB shootdown code, make it simpler and cleaner. Add TLBSTATS option for x86 to collect statistics about TLB shootdowns.
- Unify /dev/mem et al in MI code and provide required locking (removes kernel-lock on some ports). Also, avoid cache-aliasing issues.
Thanks to Andrew Doran and Joerg Sonnenberger, as their initial patches formed the core changes of this branch.
|
Revision tags: rmind-uvmplock-nbase cherry-xenmp-base rmind-uvmplock-base
|
#
1.53 |
|
23-Apr-2011 |
rmind |
branches: 1.53.2; Replace "malloc" in comments, remove unnecessary header inclusions.
|
Revision tags: uebayasi-xip-base7 bouyer-quota2-nbase bouyer-quota2-base
|
#
1.52 |
|
02-Feb-2011 |
chuck |
udpate license clauses on my code to match the new-style BSD licenses. based on diff that rmind@ sent me.
no functional change with this commit.
|
Revision tags: netbsd-5-2-3-RELEASE netbsd-5-1-5-RELEASE netbsd-5-2-2-RELEASE netbsd-5-1-4-RELEASE netbsd-5-2-1-RELEASE netbsd-5-1-3-RELEASE netbsd-5-2-RELEASE netbsd-5-2-RC1 netbsd-5-1-2-RELEASE netbsd-5-1-1-RELEASE jruoho-x86intr-base matt-mips64-premerge-20101231 matt-nb5-mips64-premerge-20101231 matt-nb5-pq3-base uebayasi-xip-base6 uebayasi-xip-base5 netbsd-5-1-RELEASE uebayasi-xip-base4 uebayasi-xip-base3 yamt-nfs-mp-base11 netbsd-5-1-RC4 matt-nb5-mips64-k15 uebayasi-xip-base2 yamt-nfs-mp-base10 netbsd-5-1-RC3 netbsd-5-1-RC2 uebayasi-xip-base1 netbsd-5-1-RC1 yamt-nfs-mp-base9 uebayasi-xip-base netbsd-5-0-2-RELEASE matt-nb5-mips64-premerge-20091211 matt-premerge-20091211 yamt-nfs-mp-base8 matt-nb5-mips64-u2-k2-k4-k7-k8-k9 matt-nb4-mips64-k7-u2a-k9b matt-nb5-mips64-u1-k1-k5 yamt-nfs-mp-base7 netbsd-5-0-1-RELEASE jymxensuspend-base yamt-nfs-mp-base6 yamt-nfs-mp-base5 yamt-nfs-mp-base4 jym-xensuspend-nbase yamt-nfs-mp-base3 nick-hppapmap-base4 nick-hppapmap-base3 netbsd-5-0-RELEASE netbsd-5-0-RC4 netbsd-5-0-RC3 nick-hppapmap-base2 netbsd-5-0-RC2 jym-xensuspend-base netbsd-5-0-RC1 haad-dm-base2 haad-nbase2 ad-audiomp2-base netbsd-5-base nick-hppapmap-base matt-mips64-base2 haad-dm-base1 wrstuden-revivesa-base-4 wrstuden-revivesa-base-3 wrstuden-revivesa-base-2 haad-dm-base wrstuden-revivesa-base-1 simonb-wapbl-nbase yamt-pf42-base4 simonb-wapbl-base yamt-pf42-base3 hpcarm-cleanup-nbase yamt-pf42-baseX yamt-pf42-base2 yamt-nfs-mp-base2 wrstuden-revivesa-base yamt-nfs-mp-base yamt-pf42-base ad-socklock-base1 yamt-lazymbuf-base15 yamt-lazymbuf-base14 keiichi-mipv6-nbase mjf-devfs2-base nick-net80211-sync-base keiichi-mipv6-base bouyer-xeni386-nbase bouyer-xeni386-base matt-armv6-nbase mjf-devfs-base hpcarm-cleanup-base
|
#
1.51 |
|
18-Jan-2008 |
yamt |
branches: 1.51.28; 1.51.32; 1.51.38; 1.51.40; push pmap_clear_reference calls into pdpolicy code, where reference bits actually matter.
|
Revision tags: matt-armv6-base
|
#
1.50 |
|
02-Jan-2008 |
ad |
Merge vmlocking2 to head.
|
Revision tags: vmlocking2-base3
|
#
1.49 |
|
20-Dec-2007 |
ad |
Specify PR_LARGECACHE for anon_cache (which is insanely busy).
|
Revision tags: yamt-kmem-base3 cube-autoconf-base yamt-kmem-base2 yamt-kmem-base vmlocking2-base2 reinoud-bufcleanup-nbase vmlocking2-base1 bouyer-xenamd64-base2 vmlocking-nbase bouyer-xenamd64-base jmcneill-pm-base reinoud-bufcleanup-base
|
#
1.48 |
|
13-Nov-2007 |
yamt |
branches: 1.48.2; 1.48.6; g/c unused uvm_anon_pool.
|
#
1.47 |
|
07-Nov-2007 |
ad |
Merge from vmlocking:
- pool_cache changes. - Debugger/procfs locking fixes. - Other minor changes.
|
Revision tags: jmcneill-base yamt-x86pmap-base4 yamt-x86pmap-base3 vmlocking-base
|
#
1.46 |
|
11-Oct-2007 |
ad |
branches: 1.46.2; 1.46.4; Remove LOCK_ASSERT(!simple_lock_held(&foo));
|
Revision tags: nick-csl-alignment-base5 yamt-x86pmap-base2 yamt-x86pmap-base matt-mips64-base
|
#
1.45 |
|
21-Jul-2007 |
ad |
branches: 1.45.4; 1.45.6; 1.45.8; 1.45.10; Merge unobtrusive locking changes from the vmlocking branch.
|
Revision tags: nick-csl-alignment-base yamt-idlelwp-base8 thorpej-atomic-base mjf-ufs-trans-base
|
#
1.44 |
|
12-Mar-2007 |
ad |
branches: 1.44.8; Pass an ipl argument to pool_init/POOL_INIT to be used when initializing the pool's lock.
|
Revision tags: ad-audiomp-base
|
#
1.43 |
|
22-Feb-2007 |
thorpej |
branches: 1.43.4; TRUE -> true, FALSE -> false
|
#
1.42 |
|
21-Feb-2007 |
thorpej |
Replace the Mach-derived boolean_t type with the C99 bool type. A future commit will replace use of TRUE and FALSE with true and false.
|
Revision tags: netbsd-4-0-1-RELEASE wrstuden-fixsa-newbase wrstuden-fixsa-base-1 netbsd-4-0-RELEASE netbsd-4-0-RC5 matt-nb4-arm-base netbsd-4-0-RC4 netbsd-4-0-RC3 netbsd-4-0-RC2 netbsd-4-0-RC1 wrstuden-fixsa-base post-newlock2-merge newlock2-nbase yamt-splraiseipl-base5 yamt-splraiseipl-base4 yamt-splraiseipl-base3 newlock2-base netbsd-4-base
|
#
1.41 |
|
01-Nov-2006 |
yamt |
branches: 1.41.4; remove some __unused from function parameters.
|
Revision tags: yamt-splraiseipl-base2
|
#
1.40 |
|
12-Oct-2006 |
christos |
- sprinkle __unused on function decls. - fix a couple of unused bugs - no more -Wno-unused for i386
|
Revision tags: yamt-splraiseipl-base
|
#
1.39 |
|
15-Sep-2006 |
yamt |
branches: 1.39.2; merge yamt-pdpolicy branch. - separate page replacement policy from the rest of kernel - implement an alternative replacement policy
|
Revision tags: abandoned-netbsd-4-base yamt-pdpolicy-base9 yamt-pdpolicy-base8 yamt-pdpolicy-base7 yamt-pdpolicy-base6 chap-midi-nbase gdamore-uart-base simonb-timcounters-final yamt-pdpolicy-base5 chap-midi-base yamt-pdpolicy-base4 yamt-pdpolicy-base3 peter-altq-base yamt-pdpolicy-base2 elad-kernelauth-base yamt-pdpolicy-base yamt-uio_vmspace-base5 simonb-timecounters-base rpaulo-netinet-merge-pcb-base
|
#
1.38 |
|
11-Dec-2005 |
christos |
branches: 1.38.8; 1.38.20; merge ktrace-lwp.
|
Revision tags: yamt-readahead-base3 yamt-readahead-base2 yamt-readahead-pervnode yamt-readahead-perfile yamt-readahead-base yamt-vop-base3 yamt-vop-base2 thorpej-vnode-attr-base yamt-vop-base ktrace-lwp-base
|
#
1.37 |
|
13-Sep-2005 |
yamt |
wrap swap related code by #ifdef VMSWAP. always #define VMSWAP for now.
|
#
1.36 |
|
31-Jul-2005 |
yamt |
revert "defflag VMSWAP" changes for now. there seems to be far more people who don't want to edit their kernel config files than i thought.
|
#
1.35 |
|
30-Jul-2005 |
yamt |
defflag VMSWAP.
|
#
1.34 |
|
27-Jun-2005 |
thorpej |
branches: 1.34.2; Use ANSI function decls.
|
#
1.33 |
|
11-May-2005 |
yamt |
allocate anons on-demand, rather than reserving static amount of them on boot/swapon.
|
Revision tags: kent-audio2-base
|
#
1.32 |
|
01-Apr-2005 |
yamt |
merge yamt-km branch. - don't use managed mappings/backing objects for wired memory allocations. save some resources like pv_entry. also fix (most of) PR/27030. - simplify kernel memory management API. - simplify pmap bootstrap of some ports. - some related cleanups.
|
Revision tags: netbsd-3-1-1-RELEASE netbsd-3-0-3-RELEASE netbsd-3-1-RELEASE netbsd-3-0-2-RELEASE netbsd-3-1-RC4 netbsd-3-1-RC3 netbsd-3-1-RC2 netbsd-3-1-RC1 netbsd-3-0-1-RELEASE netbsd-3-0-RELEASE netbsd-3-0-RC6 netbsd-3-0-RC5 netbsd-3-0-RC4 netbsd-3-0-RC3 netbsd-3-0-RC2 netbsd-3-0-RC1 yamt-km-base4 yamt-km-base3 netbsd-3-base yamt-km-base2 yamt-km-base kent-audio1-beforemerge kent-audio1-base
|
#
1.31 |
|
01-Sep-2004 |
yamt |
branches: 1.31.4; 1.31.6; uvm_pagefree: when orphaning an A->K loaned page, - decrement uvmexp.anonpages as it's no longer an anon page. - null out anon->u.an_page as the anon no longer own the page. uvm_anfree: add related assertions.
|
#
1.30 |
|
01-Sep-2004 |
yamt |
uvm_anfree: remove a comment which is no longer true.
|
#
1.29 |
|
05-May-2004 |
yamt |
fix a amap_wirerange deadlock problem by re-introducing PG_RELEASED for anon pages. PR/23171 from Christian Limpach. for details, see discussion filed in the PR database.
uvm_anon_release: a new function to free anon-owned PG_RELEASED page. uvm_anfree: we can't wait for the page here because the caller might hold amap lock. instead, just mark the page as PG_RELEASED. who unbusy the page should check the PG_RELEASED. uvm_aio_aiodone: uvm_anon_release() instead of uvm_page_unbusy() if appropriate. uvmfault_anonget: check PG_RELEASED.
|
Revision tags: netbsd-2-0-base
|
#
1.28 |
|
24-Mar-2004 |
junyoung |
branches: 1.28.2; Nuke __P().
|
#
1.27 |
|
06-Jan-2004 |
chs |
fix lock initialization in uvm_anon_add(). from PR 23831.
|
#
1.26 |
|
28-Aug-2003 |
pk |
When retiring a swap device with marked bad blocks on it we should update the `# swap page in use' and `# swap page only' counters. However, at the time of swap device removal we can no longer figure out how many of the bad swap pages are actually also `swap only' pages.
So, on swap I/O errors arrange things to not include the bad swap pages in the `swpgonly' counter as follows: uvm_swap_markbad() decrements `swpgonly' by the number of bad pages, and the various VM object deallocation routines do not decrement `swpgonly' for swap slots marked as SWSLOT_BAD.
|
#
1.25 |
|
11-Aug-2003 |
pk |
uao_pagein_page() & anon_pagein(): * return failure if the page cannot be retrieved. * wakeup any waiters when releasing a page after successful page in.
|
#
1.24 |
|
11-Aug-2003 |
pk |
Only deactivate pages if their wired count is zero.
|
#
1.23 |
|
11-Aug-2003 |
pk |
Make sure to call uvm_swap_free() and uvm_swap_markbad() with valid (i.e. positive) slot numbers.
|
Revision tags: nathanw_sa_before_merge fvdl_fs64_base gmcgarry_ctxsw_base gmcgarry_ucred_base nathanw_sa_base kqueue-aftermerge kqueue-beforemerge kqueue-base
|
#
1.22 |
|
21-Sep-2002 |
chs |
branches: 1.22.6; add missing anon lock around call to uvm_anon_lockloanpg().
|
Revision tags: netbsd-1-6-PATCH002-RELEASE netbsd-1-6-PATCH002 netbsd-1-6-PATCH002-RC4 netbsd-1-6-PATCH002-RC3 netbsd-1-6-PATCH002-RC2 netbsd-1-6-PATCH002-RC1 netbsd-1-6-PATCH001 netbsd-1-6-PATCH001-RELEASE netbsd-1-6-PATCH001-RC3 netbsd-1-6-PATCH001-RC2 netbsd-1-6-PATCH001-RC1 netbsd-1-6-RELEASE netbsd-1-6-RC3 netbsd-1-6-RC2 netbsd-1-6-RC1 netbsd-1-6-base gehenna-devsw-base eeh-devprop-base newlock-base ifpoll-base thorpej-mips-cache-base
|
#
1.21 |
|
10-Nov-2001 |
lukem |
branches: 1.21.4; add RCSIDs, and in some cases, slightly cleanup #include order
|
#
1.20 |
|
06-Nov-2001 |
chs |
several changes prompted by loaning problems: - fix the loaned case in uvm_pagefree(). - redo uvmexp.swpgonly accounting to work with page loaning. add an assertion before each place we adjust uvmexp.swpgonly. - fix uvm_km_pgremove() to always free any swap space associated with the range being removed. - get rid of UVM_LOAN_WIRED flag. instead, we just make sure that pages loaned to the kernel are never on the page queues. this allows us to assert that pages are not loaned and wired at the same time. - add yet more assertions.
|
#
1.19 |
|
21-Oct-2001 |
chs |
branches: 1.19.2; add some missing spinlocks.
|
Revision tags: thorpej-devvp-base3 thorpej-devvp-base2 post-chs-ubcperf
|
#
1.18 |
|
15-Sep-2001 |
chs |
a whole bunch of changes to improve performance and robustness under load:
- remove special treatment of pager_map mappings in pmaps. this is required now, since I've removed the globals that expose the address range. pager_map now uses pmap_kenter_pa() instead of pmap_enter(), so there's no longer any need to special-case it. - eliminate struct uvm_vnode by moving its fields into struct vnode. - rewrite the pageout path. the pager is now responsible for handling the high-level requests instead of only getting control after a bunch of work has already been done on its behalf. this will allow us to UBCify LFS, which needs tighter control over its pages than other filesystems do. writing a page to disk no longer requires making it read-only, which allows us to write wired pages without causing all kinds of havoc. - use a new PG_PAGEOUT flag to indicate that a page should be freed on behalf of the pagedaemon when it's unlocked. this flag is very similar to PG_RELEASED, but unlike PG_RELEASED, PG_PAGEOUT can be cleared if the pageout fails due to eg. an indirect-block buffer being locked. this allows us to remove the "version" field from struct vm_page, and together with shrinking "loan_count" from 32 bits to 16, struct vm_page is now 4 bytes smaller. - no longer use PG_RELEASED for swap-backed pages. if the page is busy because it's being paged out, we can't release the swap slot to be reallocated until that write is complete, but unlike with vnodes we don't keep a count of in-progress writes so there's no good way to know when the write is done. instead, when we need to free a busy swap-backed page, just sleep until we can get it busy ourselves. - implement a fast-path for extending writes which allows us to avoid zeroing new pages. this substantially reduces cpu usage. - encapsulate the data used by the genfs code in a struct genfs_node, which must be the first element of the filesystem-specific vnode data for filesystems which use genfs_{get,put}pages(). - eliminate many of the UVM pagerops, since they aren't needed anymore now that the pager "put" operation is a higher-level operation. - enhance the genfs code to allow NFS to use the genfs_{get,put}pages instead of a modified copy. - clean up struct vnode by removing all the fields that used to be used by the vfs_cluster.c code (which we don't use anymore with UBC). - remove kmem_object and mb_object since they were useless. instead of allocating pages to these objects, we now just allocate pages with no object. such pages are mapped in the kernel until they are freed, so we can use the mapping to find the page to free it. this allows us to remove splvm() protection in several places.
The sum of all these changes improves write throughput on my decstation 5000/200 to within 1% of the rate of NetBSD 1.5 and reduces the elapsed time for "make release" of a NetBSD 1.5 source tree on my 128MB pc to 10% less than a 1.5 kernel took.
|
Revision tags: pre-chs-ubcperf thorpej-devvp-base
|
#
1.17 |
|
25-May-2001 |
chs |
branches: 1.17.2; 1.17.4; remove trailing whitespace.
|
Revision tags: thorpej_scsipi_beforemerge thorpej_scsipi_nbase thorpej_scsipi_base
|
#
1.16 |
|
10-Mar-2001 |
chs |
eliminate the VM_PAGER_* error codes in favor of the traditional E* codes. the mapping is:
VM_PAGER_OK 0 VM_PAGER_BAD <unused> VM_PAGER_FAIL <unused> VM_PAGER_PEND 0 (see below) VM_PAGER_ERROR EIO VM_PAGER_AGAIN EAGAIN VM_PAGER_UNLOCK EBUSY VM_PAGER_REFAULT ERESTART
for async i/o requests, it used to be possible for the request to be convert to sync, and the pager would return VM_PAGER_OK or VM_PAGER_PEND to indicate whether the caller should perform post-i/o cleanup. this is no longer allowed; pagers must now return 0 to indicate that the async i/o was successfully started, and the caller never needs to worry about doing the post-i/o cleanup.
|
#
1.15 |
|
18-Feb-2001 |
chs |
branches: 1.15.2; clean up DIAGNOSTIC checks, use KASSERT().
|
#
1.14 |
|
28-Jan-2001 |
thorpej |
Page scanner improvements, behavior is actually a bit more like Mach VM's now. Specific changes: - Pages now need not have all of their mappings removed before being put on the inactive list. They only need to have the "referenced" attribute cleared. This makes putting pages onto the inactive list much more efficient. In order to eliminate redundant clearings of "refrenced", callers of uvm_pagedeactivate() must now do this themselves. - When checking the "modified" attribute for a page (for clearing PG_CLEAN), make sure to only do it if PG_CLEAN is currently set on the page (saves a potentially expensive pmap operation). - When scanning the inactive list, if a page is referenced, reactivate it (this part was actually added in uvm_pdaemon.c,v 1.27). This now works properly now that pages on the inactive list are allowed to have mappings. - When scanning the inactive list and considering a page for freeing, remove all mappings, and then check the "modified" attribute if the page is marked PG_CLEAN. - When scanning the active list, if the page was referenced since its last sweep by the scanner, don't deactivate it. (This part was actually added in uvm_pdaemon.c,v 1.28.)
These changes greatly improve interactive performance during moderate to high memory and I/O load.
|
#
1.13 |
|
23-Jan-2001 |
thorpej |
Change uvm_analloc() to return a locked anon, update all callers, and fix an anon locking protocol error in uvm_loanzero().
|
#
1.12 |
|
23-Jan-2001 |
thorpej |
Sprinkle some assertions: amap_free(): Assert that the amap is locked. amap_share_protect(): Assert that the amap is locked. amap_wipeout(): Assert that the amap is locked. uvm_anfree(): Assert that the anon has a reference count of 0 and is not locked. uvm_anon_lockloanpg(): Assert that the anon is locked. anon_pagein(): Assert that the anon is locked. uvmfault_anonget(): Assert that the anon is locked. uvm_pagealloc_strat(): Assert that the uobj or the anon is locked
And fix the problems these have uncovered: amap_cow_now(): Lock the new anon after allocating it, and unref and unlock it (rather than lock!) before freeing it in case of an error condition. This should fix a problem reported by Dan Carosone using cdrecord on an i386 MP kernel. uvm_fault(): Case1B -- Lock the new anon afer allocating it, and unlock it later when we unlock the old anon. Case2 -- Lock the new anon after allocating it, and unlock it later by passing it to uvmfault_unlockall() (we set anon to NULL if we're not doing a promote fault).
|
#
1.11 |
|
27-Dec-2000 |
chs |
when we fail to allocate anons to represent new swap space, just return an error rather than panicing.
|
#
1.10 |
|
25-Nov-2000 |
chs |
lots of cleanup: use queue.h macros and KASSERT(). address amap offsets in pages instead of bytes. make amap_ref() and amap_unref() take an amap, offset and length instead of a vm_map_entry_t. improve whitespace and comments.
|
#
1.9 |
|
06-Aug-2000 |
thorpej |
Do something sane with a DIAGNOSTIC condition in an non-DIAGNOSTIC kernel.
|
#
1.8 |
|
05-Aug-2000 |
thorpej |
Correct a comment about locking wrt. uvmfault_anonget().
|
#
1.7 |
|
27-Jun-2000 |
mrg |
remove include of <vm/vm.h>
|
#
1.6 |
|
26-Jun-2000 |
mrg |
remove/move more mach vm header files:
<vm/pglist.h> -> <uvm/uvm_pglist.h> <vm/vm_inherit.h> -> <uvm/uvm_inherit.h> <vm/vm_kern.h> -> into <uvm/uvm_extern.h> <vm/vm_object.h> -> nothing <vm/vm_pager.h> -> into <uvm/uvm_pager.h>
also includes a bunch of <vm/vm_page.h> include removals (due to redudancy with <vm/vm.h>), and a scattering of other similar headers.
|
Revision tags: netbsd-1-5-base minoura-xpg4dl-base chs-ubc2-newbase
|
#
1.5 |
|
11-Jan-2000 |
chs |
branches: 1.5.4; add support for ``swapctl -d'' (removing swap space). improve handling of i/o errors in swap space.
reviewed by: Chuck Cranor
|
Revision tags: wrstuden-devbsize-19991221 wrstuden-devbsize-base comdex-fall-1999-base fvdl-softdep-base
|
#
1.4 |
|
12-Sep-1999 |
chs |
branches: 1.4.2; eliminate the PMAP_NEW option by making it required for all ports. ports which previously had no support for PMAP_NEW now implement the pmap_k* interfaces as wrappers around the non-k versions.
|
#
1.3 |
|
14-Aug-1999 |
ross |
In uvm_anon_init() and uvm_anon_add(), initialize the ref count lock.
|
Revision tags: netbsd-1-4-PATCH003 netbsd-1-4-PATCH002 kame_141_19991130 netbsd-1-4-PATCH001 kame_14_19990705 kame_14_19990628 chs-ubc2-base netbsd-1-4-RELEASE netbsd-1-4-base
|
#
1.2 |
|
26-Mar-1999 |
chs |
add uvmexp.swpgonly and use it to detect out-of-swap conditions.
|
#
1.1 |
|
24-Jan-1999 |
chuck |
cleanup/reorg: - break anon related functions out of uvm_amap.c and put them in their own file (uvm_anon.c). includes break up uvm_anon_init into an amap and an an anon init function - ensure that only functions within the amap module access amap structure fields (add macros to amap api as needed)
|
#
1.68 |
|
02-Dec-2019 |
chs |
fix the build for when UVMHIST is enabled.
|
#
1.67 |
|
01-Dec-2019 |
uwe |
Add missing #include <sys/atomic.h>
|
#
1.66 |
|
01-Dec-2019 |
ad |
Free pages in batch instead of taking uvm_pageqlock for each one.
|
#
1.65 |
|
01-Dec-2019 |
ad |
- Adjust uvmexp.swpgonly with atomics, and make uvm_swap_data_lock static. - A bit more __cacheline_aligned on mutexes.
|
Revision tags: netbsd-9-0-RC1 phil-wifi-20191119 netbsd-9-base phil-wifi-20190609 isaki-audio2-base pgoyette-compat-merge-20190127 pgoyette-compat-20190127 pgoyette-compat-20190118 pgoyette-compat-1226 pgoyette-compat-1126 pgoyette-compat-1020 pgoyette-compat-0930 pgoyette-compat-0906 pgoyette-compat-0728 phil-wifi-base pgoyette-compat-0625 pgoyette-compat-0521 pgoyette-compat-0502 pgoyette-compat-0422 pgoyette-compat-0415 pgoyette-compat-0407 pgoyette-compat-0330 pgoyette-compat-0322 pgoyette-compat-0315 pgoyette-compat-base tls-maxphys-base-20171202
|
#
1.64 |
|
28-Oct-2017 |
pgoyette |
Update the kernhist(9) kernel history code to address issues identified in PR kern/52639, as well as some general cleaning-up...
(As proposed on tech-kern@ with additional changes and enhancements.)
Details of changes:
* All history arguments are now stored as uintmax_t values[1], both in the kernel and in the structures used for exporting the history data to userland via sysctl(9). This avoids problems on some architectures where passing a 64-bit (or larger) value to printf(3) can cause it to process the value as multiple arguments. (This can be particularly problematic when printf()'s format string is not a literal, since in that case the compiler cannot know how large each argument should be.)
* Update the data structures used for exporting kernel history data to include a version number as well as the length of history arguments.
* All [2] existing users of kernhist(9) have had their format strings updated. Each format specifier now includes an explicit length modifier 'j' to refer to numeric values of the size of uintmax_t.
* All [2] existing users of kernhist(9) have had their format strings updated to replace uses of "%p" with "%#jx", and the pointer arguments are now cast to (uintptr_t) before being subsequently cast to (uintmax_t). This is needed to avoid compiler warnings about casting "pointer to integer of a different size."
* All [2] existing users of kernhist(9) have had instances of "%s" or "%c" format strings replaced with numeric formats; several instances of mis-match between format string and argument list have been fixed.
* vmstat(1) has been modified to handle the new size of arguments in the history data as exported by sysctl(9).
* vmstat(1) now provides a warning message if the history requested with the -u option does not exist (previously, this condition was silently ignored, with only a single blank line being printed).
* vmstat(1) now checks the version and argument length included in the data exported via sysctl(9) and exits if they do not match the values with which vmstat was built.
* The kernhist(9) man-page has been updated to note the additional requirements imposed on the format strings, along with several other minor changes and enhancements.
[1] It would have been possible to use an explicit length (for example, uint64_t) for the history arguments. But that would require another "rototill" of all the users in the future when we add support for an architecture that supports a larger size. Also, the printf(3) format specifiers for explicitly-sized values, such as "%"PRIu64, are much more verbose (and less aesthetically appealing, IMHO) than simply using "%ju".
[2] I've tried very hard to find "all [the] existing users of kernhist(9)" but it is possible that I've missed some of them. I would be glad to update any stragglers that anyone identifies.
|
Revision tags: netbsd-7-2-RELEASE netbsd-7-1-2-RELEASE netbsd-7-1-1-RELEASE nick-nhusb-base-20170825 perseant-stdc-iso10646-base netbsd-8-base prg-localcount2-base3 prg-localcount2-base2 prg-localcount2-base1 prg-localcount2-base pgoyette-localcount-20170426 bouyer-socketcan-base1 jdolecek-ncq-base pgoyette-localcount-20170320 netbsd-7-1-RELEASE netbsd-7-1-RC2 nick-nhusb-base-20170204 netbsd-7-nhusb-base-20170116 bouyer-socketcan-base pgoyette-localcount-20170107 netbsd-7-1-RC1 nick-nhusb-base-20161204 pgoyette-localcount-20161104 netbsd-7-0-2-RELEASE nick-nhusb-base-20161004 localcount-20160914 netbsd-7-nhusb-base pgoyette-localcount-20160806 pgoyette-localcount-20160726 pgoyette-localcount-base nick-nhusb-base-20160907 nick-nhusb-base-20160529 netbsd-7-0-1-RELEASE nick-nhusb-base-20160422 nick-nhusb-base-20160319 nick-nhusb-base-20151226 netbsd-7-0-RELEASE nick-nhusb-base-20150921 netbsd-7-0-RC3 netbsd-7-0-RC2 netbsd-7-0-RC1 nick-nhusb-base-20150606 nick-nhusb-base-20150406 nick-nhusb-base netbsd-7-base yamt-pagecache-base9 tls-earlyentropy-base riastradh-xf86-video-intel-2-7-1-pre-2-21-15 riastradh-drm2-base3 rmind-smpnet-nbase rmind-smpnet-base tls-maxphys-base
|
#
1.63 |
|
25-Oct-2013 |
martin |
branches: 1.63.22; Mark a diagnostic-only variable
|
Revision tags: netbsd-6-0-6-RELEASE netbsd-6-1-5-RELEASE netbsd-6-1-4-RELEASE netbsd-6-0-5-RELEASE netbsd-6-1-3-RELEASE netbsd-6-0-4-RELEASE netbsd-6-1-2-RELEASE netbsd-6-0-3-RELEASE netbsd-6-1-1-RELEASE riastradh-drm2-base2 riastradh-drm2-base1 riastradh-drm2-base netbsd-6-0-2-RELEASE netbsd-6-1-RELEASE netbsd-6-1-RC4 netbsd-6-1-RC3 agc-symver-base netbsd-6-1-RC2 netbsd-6-1-RC1 yamt-pagecache-base8 netbsd-6-0-1-RELEASE yamt-pagecache-base7 matt-nb6-plus-nbase yamt-pagecache-base6 netbsd-6-0-RELEASE netbsd-6-0-RC2 matt-nb6-plus-base netbsd-6-0-RC1 jmcneill-usbmp-base10 yamt-pagecache-base5 jmcneill-usbmp-base9 yamt-pagecache-base4 jmcneill-usbmp-base8 jmcneill-usbmp-base7 jmcneill-usbmp-base6 jmcneill-usbmp-base5 jmcneill-usbmp-base4 jmcneill-usbmp-base3 jmcneill-usbmp-pre-base2 jmcneill-usbmp-base2 netbsd-6-base jmcneill-usbmp-base jmcneill-audiomp3-base yamt-pagecache-base3 yamt-pagecache-base2 yamt-pagecache-base
|
#
1.62 |
|
18-Aug-2011 |
yamt |
branches: 1.62.2; 1.62.12; 1.62.16; uvm_anon_release: - don't forget to call uvm_anon_dispose. - simplify code a little.
|
#
1.61 |
|
18-Aug-2011 |
yamt |
uvm_anon_freelst: - clear an_link/an_ref when deferring anon disposal. otherwise others can see bogus an_ref. - fix the code to remove anon from the list.
|
#
1.60 |
|
14-Aug-2011 |
rmind |
uvm_anon_freelst: do not free PG_RELEASED pages (change uvm_anon_dispose() to indicate them with a return value).
|
#
1.59 |
|
06-Aug-2011 |
rmind |
- Rework uvm_anfree() into uvm_anon_freelst(), which always drops the lock. - Free anons in uvm_anon_freelst() without lock held. - Mechanic sync to unused loaning code.
|
#
1.58 |
|
05-Jul-2011 |
yamt |
reduce the number of atomic ops in common cases. it's exceptional for anons to remain longer than amap.
|
#
1.57 |
|
24-Jun-2011 |
rmind |
Fix uvmplock regression - a lock against oneself case in amap_swap_off(). Happens since amap is NULL in uvmfault_anonget(), so uvmfault_unlockall() keeps anon locked, when it should unlock it.
|
#
1.56 |
|
24-Jun-2011 |
yamt |
uvm_anon_release: fix a locking error after the rmind-uvmplock merge
|
#
1.55 |
|
17-Jun-2011 |
rmind |
Improve comments on uvm_anon.c, tidy up slightly. No functional changes.
|
#
1.54 |
|
12-Jun-2011 |
rmind |
Welcome to 5.99.53! Merge rmind-uvmplock branch:
- Reorganize locking in UVM and provide extra serialisation for pmap(9). New lock order: [vmpage-owner-lock] -> pmap-lock.
- Simplify locking in some pmap(9) modules by removing P->V locking.
- Use lock object on vmobjlock (and thus vnode_t::v_interlock) to share the locks amongst UVM objects where necessary (tmpfs, layerfs, unionfs).
- Rewrite and optimise x86 TLB shootdown code, make it simpler and cleaner. Add TLBSTATS option for x86 to collect statistics about TLB shootdowns.
- Unify /dev/mem et al in MI code and provide required locking (removes kernel-lock on some ports). Also, avoid cache-aliasing issues.
Thanks to Andrew Doran and Joerg Sonnenberger, as their initial patches formed the core changes of this branch.
|
Revision tags: rmind-uvmplock-nbase cherry-xenmp-base rmind-uvmplock-base
|
#
1.53 |
|
23-Apr-2011 |
rmind |
branches: 1.53.2; Replace "malloc" in comments, remove unnecessary header inclusions.
|
Revision tags: uebayasi-xip-base7 bouyer-quota2-nbase bouyer-quota2-base
|
#
1.52 |
|
02-Feb-2011 |
chuck |
udpate license clauses on my code to match the new-style BSD licenses. based on diff that rmind@ sent me.
no functional change with this commit.
|
Revision tags: netbsd-5-2-3-RELEASE netbsd-5-1-5-RELEASE netbsd-5-2-2-RELEASE netbsd-5-1-4-RELEASE netbsd-5-2-1-RELEASE netbsd-5-1-3-RELEASE netbsd-5-2-RELEASE netbsd-5-2-RC1 netbsd-5-1-2-RELEASE netbsd-5-1-1-RELEASE jruoho-x86intr-base matt-mips64-premerge-20101231 matt-nb5-mips64-premerge-20101231 matt-nb5-pq3-base uebayasi-xip-base6 uebayasi-xip-base5 netbsd-5-1-RELEASE uebayasi-xip-base4 uebayasi-xip-base3 yamt-nfs-mp-base11 netbsd-5-1-RC4 matt-nb5-mips64-k15 uebayasi-xip-base2 yamt-nfs-mp-base10 netbsd-5-1-RC3 netbsd-5-1-RC2 uebayasi-xip-base1 netbsd-5-1-RC1 yamt-nfs-mp-base9 uebayasi-xip-base netbsd-5-0-2-RELEASE matt-nb5-mips64-premerge-20091211 matt-premerge-20091211 yamt-nfs-mp-base8 matt-nb5-mips64-u2-k2-k4-k7-k8-k9 matt-nb4-mips64-k7-u2a-k9b matt-nb5-mips64-u1-k1-k5 yamt-nfs-mp-base7 netbsd-5-0-1-RELEASE jymxensuspend-base yamt-nfs-mp-base6 yamt-nfs-mp-base5 yamt-nfs-mp-base4 jym-xensuspend-nbase yamt-nfs-mp-base3 nick-hppapmap-base4 nick-hppapmap-base3 netbsd-5-0-RELEASE netbsd-5-0-RC4 netbsd-5-0-RC3 nick-hppapmap-base2 netbsd-5-0-RC2 jym-xensuspend-base netbsd-5-0-RC1 haad-dm-base2 haad-nbase2 ad-audiomp2-base netbsd-5-base nick-hppapmap-base matt-mips64-base2 haad-dm-base1 wrstuden-revivesa-base-4 wrstuden-revivesa-base-3 wrstuden-revivesa-base-2 haad-dm-base wrstuden-revivesa-base-1 simonb-wapbl-nbase yamt-pf42-base4 simonb-wapbl-base yamt-pf42-base3 hpcarm-cleanup-nbase yamt-pf42-baseX yamt-pf42-base2 yamt-nfs-mp-base2 wrstuden-revivesa-base yamt-nfs-mp-base yamt-pf42-base ad-socklock-base1 yamt-lazymbuf-base15 yamt-lazymbuf-base14 keiichi-mipv6-nbase mjf-devfs2-base nick-net80211-sync-base keiichi-mipv6-base bouyer-xeni386-nbase bouyer-xeni386-base matt-armv6-nbase mjf-devfs-base hpcarm-cleanup-base
|
#
1.51 |
|
18-Jan-2008 |
yamt |
branches: 1.51.28; 1.51.32; 1.51.38; 1.51.40; push pmap_clear_reference calls into pdpolicy code, where reference bits actually matter.
|
Revision tags: matt-armv6-base
|
#
1.50 |
|
02-Jan-2008 |
ad |
Merge vmlocking2 to head.
|
Revision tags: vmlocking2-base3
|
#
1.49 |
|
20-Dec-2007 |
ad |
Specify PR_LARGECACHE for anon_cache (which is insanely busy).
|
Revision tags: yamt-kmem-base3 cube-autoconf-base yamt-kmem-base2 yamt-kmem-base vmlocking2-base2 reinoud-bufcleanup-nbase vmlocking2-base1 bouyer-xenamd64-base2 vmlocking-nbase bouyer-xenamd64-base jmcneill-pm-base reinoud-bufcleanup-base
|
#
1.48 |
|
13-Nov-2007 |
yamt |
branches: 1.48.2; 1.48.6; g/c unused uvm_anon_pool.
|
#
1.47 |
|
07-Nov-2007 |
ad |
Merge from vmlocking:
- pool_cache changes. - Debugger/procfs locking fixes. - Other minor changes.
|
Revision tags: jmcneill-base yamt-x86pmap-base4 yamt-x86pmap-base3 vmlocking-base
|
#
1.46 |
|
11-Oct-2007 |
ad |
branches: 1.46.2; 1.46.4; Remove LOCK_ASSERT(!simple_lock_held(&foo));
|
Revision tags: nick-csl-alignment-base5 yamt-x86pmap-base2 yamt-x86pmap-base matt-mips64-base
|
#
1.45 |
|
21-Jul-2007 |
ad |
branches: 1.45.4; 1.45.6; 1.45.8; 1.45.10; Merge unobtrusive locking changes from the vmlocking branch.
|
Revision tags: nick-csl-alignment-base yamt-idlelwp-base8 thorpej-atomic-base mjf-ufs-trans-base
|
#
1.44 |
|
12-Mar-2007 |
ad |
branches: 1.44.8; Pass an ipl argument to pool_init/POOL_INIT to be used when initializing the pool's lock.
|
Revision tags: ad-audiomp-base
|
#
1.43 |
|
22-Feb-2007 |
thorpej |
branches: 1.43.4; TRUE -> true, FALSE -> false
|
#
1.42 |
|
21-Feb-2007 |
thorpej |
Replace the Mach-derived boolean_t type with the C99 bool type. A future commit will replace use of TRUE and FALSE with true and false.
|
Revision tags: netbsd-4-0-1-RELEASE wrstuden-fixsa-newbase wrstuden-fixsa-base-1 netbsd-4-0-RELEASE netbsd-4-0-RC5 matt-nb4-arm-base netbsd-4-0-RC4 netbsd-4-0-RC3 netbsd-4-0-RC2 netbsd-4-0-RC1 wrstuden-fixsa-base post-newlock2-merge newlock2-nbase yamt-splraiseipl-base5 yamt-splraiseipl-base4 yamt-splraiseipl-base3 newlock2-base netbsd-4-base
|
#
1.41 |
|
01-Nov-2006 |
yamt |
branches: 1.41.4; remove some __unused from function parameters.
|
Revision tags: yamt-splraiseipl-base2
|
#
1.40 |
|
12-Oct-2006 |
christos |
- sprinkle __unused on function decls. - fix a couple of unused bugs - no more -Wno-unused for i386
|
Revision tags: yamt-splraiseipl-base
|
#
1.39 |
|
15-Sep-2006 |
yamt |
branches: 1.39.2; merge yamt-pdpolicy branch. - separate page replacement policy from the rest of kernel - implement an alternative replacement policy
|
Revision tags: abandoned-netbsd-4-base yamt-pdpolicy-base9 yamt-pdpolicy-base8 yamt-pdpolicy-base7 yamt-pdpolicy-base6 chap-midi-nbase gdamore-uart-base simonb-timcounters-final yamt-pdpolicy-base5 chap-midi-base yamt-pdpolicy-base4 yamt-pdpolicy-base3 peter-altq-base yamt-pdpolicy-base2 elad-kernelauth-base yamt-pdpolicy-base yamt-uio_vmspace-base5 simonb-timecounters-base rpaulo-netinet-merge-pcb-base
|
#
1.38 |
|
11-Dec-2005 |
christos |
branches: 1.38.8; 1.38.20; merge ktrace-lwp.
|
Revision tags: yamt-readahead-base3 yamt-readahead-base2 yamt-readahead-pervnode yamt-readahead-perfile yamt-readahead-base yamt-vop-base3 yamt-vop-base2 thorpej-vnode-attr-base yamt-vop-base ktrace-lwp-base
|
#
1.37 |
|
13-Sep-2005 |
yamt |
wrap swap related code by #ifdef VMSWAP. always #define VMSWAP for now.
|
#
1.36 |
|
31-Jul-2005 |
yamt |
revert "defflag VMSWAP" changes for now. there seems to be far more people who don't want to edit their kernel config files than i thought.
|
#
1.35 |
|
30-Jul-2005 |
yamt |
defflag VMSWAP.
|
#
1.34 |
|
27-Jun-2005 |
thorpej |
branches: 1.34.2; Use ANSI function decls.
|
#
1.33 |
|
11-May-2005 |
yamt |
allocate anons on-demand, rather than reserving static amount of them on boot/swapon.
|
Revision tags: kent-audio2-base
|
#
1.32 |
|
01-Apr-2005 |
yamt |
merge yamt-km branch. - don't use managed mappings/backing objects for wired memory allocations. save some resources like pv_entry. also fix (most of) PR/27030. - simplify kernel memory management API. - simplify pmap bootstrap of some ports. - some related cleanups.
|
Revision tags: netbsd-3-1-1-RELEASE netbsd-3-0-3-RELEASE netbsd-3-1-RELEASE netbsd-3-0-2-RELEASE netbsd-3-1-RC4 netbsd-3-1-RC3 netbsd-3-1-RC2 netbsd-3-1-RC1 netbsd-3-0-1-RELEASE netbsd-3-0-RELEASE netbsd-3-0-RC6 netbsd-3-0-RC5 netbsd-3-0-RC4 netbsd-3-0-RC3 netbsd-3-0-RC2 netbsd-3-0-RC1 yamt-km-base4 yamt-km-base3 netbsd-3-base yamt-km-base2 yamt-km-base kent-audio1-beforemerge kent-audio1-base
|
#
1.31 |
|
01-Sep-2004 |
yamt |
branches: 1.31.4; 1.31.6; uvm_pagefree: when orphaning an A->K loaned page, - decrement uvmexp.anonpages as it's no longer an anon page. - null out anon->u.an_page as the anon no longer own the page. uvm_anfree: add related assertions.
|
#
1.30 |
|
01-Sep-2004 |
yamt |
uvm_anfree: remove a comment which is no longer true.
|
#
1.29 |
|
05-May-2004 |
yamt |
fix a amap_wirerange deadlock problem by re-introducing PG_RELEASED for anon pages. PR/23171 from Christian Limpach. for details, see discussion filed in the PR database.
uvm_anon_release: a new function to free anon-owned PG_RELEASED page. uvm_anfree: we can't wait for the page here because the caller might hold amap lock. instead, just mark the page as PG_RELEASED. who unbusy the page should check the PG_RELEASED. uvm_aio_aiodone: uvm_anon_release() instead of uvm_page_unbusy() if appropriate. uvmfault_anonget: check PG_RELEASED.
|
Revision tags: netbsd-2-0-base
|
#
1.28 |
|
24-Mar-2004 |
junyoung |
branches: 1.28.2; Nuke __P().
|
#
1.27 |
|
06-Jan-2004 |
chs |
fix lock initialization in uvm_anon_add(). from PR 23831.
|
#
1.26 |
|
28-Aug-2003 |
pk |
When retiring a swap device with marked bad blocks on it we should update the `# swap page in use' and `# swap page only' counters. However, at the time of swap device removal we can no longer figure out how many of the bad swap pages are actually also `swap only' pages.
So, on swap I/O errors arrange things to not include the bad swap pages in the `swpgonly' counter as follows: uvm_swap_markbad() decrements `swpgonly' by the number of bad pages, and the various VM object deallocation routines do not decrement `swpgonly' for swap slots marked as SWSLOT_BAD.
|
#
1.25 |
|
11-Aug-2003 |
pk |
uao_pagein_page() & anon_pagein(): * return failure if the page cannot be retrieved. * wakeup any waiters when releasing a page after successful page in.
|
#
1.24 |
|
11-Aug-2003 |
pk |
Only deactivate pages if their wired count is zero.
|
#
1.23 |
|
11-Aug-2003 |
pk |
Make sure to call uvm_swap_free() and uvm_swap_markbad() with valid (i.e. positive) slot numbers.
|
Revision tags: nathanw_sa_before_merge fvdl_fs64_base gmcgarry_ctxsw_base gmcgarry_ucred_base nathanw_sa_base kqueue-aftermerge kqueue-beforemerge kqueue-base
|
#
1.22 |
|
21-Sep-2002 |
chs |
branches: 1.22.6; add missing anon lock around call to uvm_anon_lockloanpg().
|
Revision tags: netbsd-1-6-PATCH002-RELEASE netbsd-1-6-PATCH002 netbsd-1-6-PATCH002-RC4 netbsd-1-6-PATCH002-RC3 netbsd-1-6-PATCH002-RC2 netbsd-1-6-PATCH002-RC1 netbsd-1-6-PATCH001 netbsd-1-6-PATCH001-RELEASE netbsd-1-6-PATCH001-RC3 netbsd-1-6-PATCH001-RC2 netbsd-1-6-PATCH001-RC1 netbsd-1-6-RELEASE netbsd-1-6-RC3 netbsd-1-6-RC2 netbsd-1-6-RC1 netbsd-1-6-base gehenna-devsw-base eeh-devprop-base newlock-base ifpoll-base thorpej-mips-cache-base
|
#
1.21 |
|
10-Nov-2001 |
lukem |
branches: 1.21.4; add RCSIDs, and in some cases, slightly cleanup #include order
|
#
1.20 |
|
06-Nov-2001 |
chs |
several changes prompted by loaning problems: - fix the loaned case in uvm_pagefree(). - redo uvmexp.swpgonly accounting to work with page loaning. add an assertion before each place we adjust uvmexp.swpgonly. - fix uvm_km_pgremove() to always free any swap space associated with the range being removed. - get rid of UVM_LOAN_WIRED flag. instead, we just make sure that pages loaned to the kernel are never on the page queues. this allows us to assert that pages are not loaned and wired at the same time. - add yet more assertions.
|
#
1.19 |
|
21-Oct-2001 |
chs |
branches: 1.19.2; add some missing spinlocks.
|
Revision tags: thorpej-devvp-base3 thorpej-devvp-base2 post-chs-ubcperf
|
#
1.18 |
|
15-Sep-2001 |
chs |
a whole bunch of changes to improve performance and robustness under load:
- remove special treatment of pager_map mappings in pmaps. this is required now, since I've removed the globals that expose the address range. pager_map now uses pmap_kenter_pa() instead of pmap_enter(), so there's no longer any need to special-case it. - eliminate struct uvm_vnode by moving its fields into struct vnode. - rewrite the pageout path. the pager is now responsible for handling the high-level requests instead of only getting control after a bunch of work has already been done on its behalf. this will allow us to UBCify LFS, which needs tighter control over its pages than other filesystems do. writing a page to disk no longer requires making it read-only, which allows us to write wired pages without causing all kinds of havoc. - use a new PG_PAGEOUT flag to indicate that a page should be freed on behalf of the pagedaemon when it's unlocked. this flag is very similar to PG_RELEASED, but unlike PG_RELEASED, PG_PAGEOUT can be cleared if the pageout fails due to eg. an indirect-block buffer being locked. this allows us to remove the "version" field from struct vm_page, and together with shrinking "loan_count" from 32 bits to 16, struct vm_page is now 4 bytes smaller. - no longer use PG_RELEASED for swap-backed pages. if the page is busy because it's being paged out, we can't release the swap slot to be reallocated until that write is complete, but unlike with vnodes we don't keep a count of in-progress writes so there's no good way to know when the write is done. instead, when we need to free a busy swap-backed page, just sleep until we can get it busy ourselves. - implement a fast-path for extending writes which allows us to avoid zeroing new pages. this substantially reduces cpu usage. - encapsulate the data used by the genfs code in a struct genfs_node, which must be the first element of the filesystem-specific vnode data for filesystems which use genfs_{get,put}pages(). - eliminate many of the UVM pagerops, since they aren't needed anymore now that the pager "put" operation is a higher-level operation. - enhance the genfs code to allow NFS to use the genfs_{get,put}pages instead of a modified copy. - clean up struct vnode by removing all the fields that used to be used by the vfs_cluster.c code (which we don't use anymore with UBC). - remove kmem_object and mb_object since they were useless. instead of allocating pages to these objects, we now just allocate pages with no object. such pages are mapped in the kernel until they are freed, so we can use the mapping to find the page to free it. this allows us to remove splvm() protection in several places.
The sum of all these changes improves write throughput on my decstation 5000/200 to within 1% of the rate of NetBSD 1.5 and reduces the elapsed time for "make release" of a NetBSD 1.5 source tree on my 128MB pc to 10% less than a 1.5 kernel took.
|
Revision tags: pre-chs-ubcperf thorpej-devvp-base
|
#
1.17 |
|
25-May-2001 |
chs |
branches: 1.17.2; 1.17.4; remove trailing whitespace.
|
Revision tags: thorpej_scsipi_beforemerge thorpej_scsipi_nbase thorpej_scsipi_base
|
#
1.16 |
|
10-Mar-2001 |
chs |
eliminate the VM_PAGER_* error codes in favor of the traditional E* codes. the mapping is:
VM_PAGER_OK 0 VM_PAGER_BAD <unused> VM_PAGER_FAIL <unused> VM_PAGER_PEND 0 (see below) VM_PAGER_ERROR EIO VM_PAGER_AGAIN EAGAIN VM_PAGER_UNLOCK EBUSY VM_PAGER_REFAULT ERESTART
for async i/o requests, it used to be possible for the request to be convert to sync, and the pager would return VM_PAGER_OK or VM_PAGER_PEND to indicate whether the caller should perform post-i/o cleanup. this is no longer allowed; pagers must now return 0 to indicate that the async i/o was successfully started, and the caller never needs to worry about doing the post-i/o cleanup.
|
#
1.15 |
|
18-Feb-2001 |
chs |
branches: 1.15.2; clean up DIAGNOSTIC checks, use KASSERT().
|
#
1.14 |
|
28-Jan-2001 |
thorpej |
Page scanner improvements, behavior is actually a bit more like Mach VM's now. Specific changes: - Pages now need not have all of their mappings removed before being put on the inactive list. They only need to have the "referenced" attribute cleared. This makes putting pages onto the inactive list much more efficient. In order to eliminate redundant clearings of "refrenced", callers of uvm_pagedeactivate() must now do this themselves. - When checking the "modified" attribute for a page (for clearing PG_CLEAN), make sure to only do it if PG_CLEAN is currently set on the page (saves a potentially expensive pmap operation). - When scanning the inactive list, if a page is referenced, reactivate it (this part was actually added in uvm_pdaemon.c,v 1.27). This now works properly now that pages on the inactive list are allowed to have mappings. - When scanning the inactive list and considering a page for freeing, remove all mappings, and then check the "modified" attribute if the page is marked PG_CLEAN. - When scanning the active list, if the page was referenced since its last sweep by the scanner, don't deactivate it. (This part was actually added in uvm_pdaemon.c,v 1.28.)
These changes greatly improve interactive performance during moderate to high memory and I/O load.
|
#
1.13 |
|
23-Jan-2001 |
thorpej |
Change uvm_analloc() to return a locked anon, update all callers, and fix an anon locking protocol error in uvm_loanzero().
|
#
1.12 |
|
23-Jan-2001 |
thorpej |
Sprinkle some assertions: amap_free(): Assert that the amap is locked. amap_share_protect(): Assert that the amap is locked. amap_wipeout(): Assert that the amap is locked. uvm_anfree(): Assert that the anon has a reference count of 0 and is not locked. uvm_anon_lockloanpg(): Assert that the anon is locked. anon_pagein(): Assert that the anon is locked. uvmfault_anonget(): Assert that the anon is locked. uvm_pagealloc_strat(): Assert that the uobj or the anon is locked
And fix the problems these have uncovered: amap_cow_now(): Lock the new anon after allocating it, and unref and unlock it (rather than lock!) before freeing it in case of an error condition. This should fix a problem reported by Dan Carosone using cdrecord on an i386 MP kernel. uvm_fault(): Case1B -- Lock the new anon afer allocating it, and unlock it later when we unlock the old anon. Case2 -- Lock the new anon after allocating it, and unlock it later by passing it to uvmfault_unlockall() (we set anon to NULL if we're not doing a promote fault).
|
#
1.11 |
|
27-Dec-2000 |
chs |
when we fail to allocate anons to represent new swap space, just return an error rather than panicing.
|
#
1.10 |
|
25-Nov-2000 |
chs |
lots of cleanup: use queue.h macros and KASSERT(). address amap offsets in pages instead of bytes. make amap_ref() and amap_unref() take an amap, offset and length instead of a vm_map_entry_t. improve whitespace and comments.
|
#
1.9 |
|
06-Aug-2000 |
thorpej |
Do something sane with a DIAGNOSTIC condition in an non-DIAGNOSTIC kernel.
|
#
1.8 |
|
05-Aug-2000 |
thorpej |
Correct a comment about locking wrt. uvmfault_anonget().
|
#
1.7 |
|
27-Jun-2000 |
mrg |
remove include of <vm/vm.h>
|
#
1.6 |
|
26-Jun-2000 |
mrg |
remove/move more mach vm header files:
<vm/pglist.h> -> <uvm/uvm_pglist.h> <vm/vm_inherit.h> -> <uvm/uvm_inherit.h> <vm/vm_kern.h> -> into <uvm/uvm_extern.h> <vm/vm_object.h> -> nothing <vm/vm_pager.h> -> into <uvm/uvm_pager.h>
also includes a bunch of <vm/vm_page.h> include removals (due to redudancy with <vm/vm.h>), and a scattering of other similar headers.
|
Revision tags: netbsd-1-5-base minoura-xpg4dl-base chs-ubc2-newbase
|
#
1.5 |
|
11-Jan-2000 |
chs |
branches: 1.5.4; add support for ``swapctl -d'' (removing swap space). improve handling of i/o errors in swap space.
reviewed by: Chuck Cranor
|
Revision tags: wrstuden-devbsize-19991221 wrstuden-devbsize-base comdex-fall-1999-base fvdl-softdep-base
|
#
1.4 |
|
12-Sep-1999 |
chs |
branches: 1.4.2; eliminate the PMAP_NEW option by making it required for all ports. ports which previously had no support for PMAP_NEW now implement the pmap_k* interfaces as wrappers around the non-k versions.
|
#
1.3 |
|
14-Aug-1999 |
ross |
In uvm_anon_init() and uvm_anon_add(), initialize the ref count lock.
|
Revision tags: netbsd-1-4-PATCH003 netbsd-1-4-PATCH002 kame_141_19991130 netbsd-1-4-PATCH001 kame_14_19990705 kame_14_19990628 chs-ubc2-base netbsd-1-4-RELEASE netbsd-1-4-base
|
#
1.2 |
|
26-Mar-1999 |
chs |
add uvmexp.swpgonly and use it to detect out-of-swap conditions.
|
#
1.1 |
|
24-Jan-1999 |
chuck |
cleanup/reorg: - break anon related functions out of uvm_amap.c and put them in their own file (uvm_anon.c). includes break up uvm_anon_init into an amap and an an anon init function - ensure that only functions within the amap module access amap structure fields (add macros to amap api as needed)
|
#
1.67 |
|
01-Dec-2019 |
uwe |
Add missing #include <sys/atomic.h>
|
#
1.66 |
|
01-Dec-2019 |
ad |
Free pages in batch instead of taking uvm_pageqlock for each one.
|
#
1.65 |
|
01-Dec-2019 |
ad |
- Adjust uvmexp.swpgonly with atomics, and make uvm_swap_data_lock static. - A bit more __cacheline_aligned on mutexes.
|
Revision tags: netbsd-9-0-RC1 phil-wifi-20191119 netbsd-9-base phil-wifi-20190609 isaki-audio2-base pgoyette-compat-merge-20190127 pgoyette-compat-20190127 pgoyette-compat-20190118 pgoyette-compat-1226 pgoyette-compat-1126 pgoyette-compat-1020 pgoyette-compat-0930 pgoyette-compat-0906 pgoyette-compat-0728 phil-wifi-base pgoyette-compat-0625 pgoyette-compat-0521 pgoyette-compat-0502 pgoyette-compat-0422 pgoyette-compat-0415 pgoyette-compat-0407 pgoyette-compat-0330 pgoyette-compat-0322 pgoyette-compat-0315 pgoyette-compat-base tls-maxphys-base-20171202
|
#
1.64 |
|
28-Oct-2017 |
pgoyette |
Update the kernhist(9) kernel history code to address issues identified in PR kern/52639, as well as some general cleaning-up...
(As proposed on tech-kern@ with additional changes and enhancements.)
Details of changes:
* All history arguments are now stored as uintmax_t values[1], both in the kernel and in the structures used for exporting the history data to userland via sysctl(9). This avoids problems on some architectures where passing a 64-bit (or larger) value to printf(3) can cause it to process the value as multiple arguments. (This can be particularly problematic when printf()'s format string is not a literal, since in that case the compiler cannot know how large each argument should be.)
* Update the data structures used for exporting kernel history data to include a version number as well as the length of history arguments.
* All [2] existing users of kernhist(9) have had their format strings updated. Each format specifier now includes an explicit length modifier 'j' to refer to numeric values of the size of uintmax_t.
* All [2] existing users of kernhist(9) have had their format strings updated to replace uses of "%p" with "%#jx", and the pointer arguments are now cast to (uintptr_t) before being subsequently cast to (uintmax_t). This is needed to avoid compiler warnings about casting "pointer to integer of a different size."
* All [2] existing users of kernhist(9) have had instances of "%s" or "%c" format strings replaced with numeric formats; several instances of mis-match between format string and argument list have been fixed.
* vmstat(1) has been modified to handle the new size of arguments in the history data as exported by sysctl(9).
* vmstat(1) now provides a warning message if the history requested with the -u option does not exist (previously, this condition was silently ignored, with only a single blank line being printed).
* vmstat(1) now checks the version and argument length included in the data exported via sysctl(9) and exits if they do not match the values with which vmstat was built.
* The kernhist(9) man-page has been updated to note the additional requirements imposed on the format strings, along with several other minor changes and enhancements.
[1] It would have been possible to use an explicit length (for example, uint64_t) for the history arguments. But that would require another "rototill" of all the users in the future when we add support for an architecture that supports a larger size. Also, the printf(3) format specifiers for explicitly-sized values, such as "%"PRIu64, are much more verbose (and less aesthetically appealing, IMHO) than simply using "%ju".
[2] I've tried very hard to find "all [the] existing users of kernhist(9)" but it is possible that I've missed some of them. I would be glad to update any stragglers that anyone identifies.
|
Revision tags: netbsd-7-2-RELEASE netbsd-7-1-2-RELEASE netbsd-7-1-1-RELEASE nick-nhusb-base-20170825 perseant-stdc-iso10646-base netbsd-8-base prg-localcount2-base3 prg-localcount2-base2 prg-localcount2-base1 prg-localcount2-base pgoyette-localcount-20170426 bouyer-socketcan-base1 jdolecek-ncq-base pgoyette-localcount-20170320 netbsd-7-1-RELEASE netbsd-7-1-RC2 nick-nhusb-base-20170204 netbsd-7-nhusb-base-20170116 bouyer-socketcan-base pgoyette-localcount-20170107 netbsd-7-1-RC1 nick-nhusb-base-20161204 pgoyette-localcount-20161104 netbsd-7-0-2-RELEASE nick-nhusb-base-20161004 localcount-20160914 netbsd-7-nhusb-base pgoyette-localcount-20160806 pgoyette-localcount-20160726 pgoyette-localcount-base nick-nhusb-base-20160907 nick-nhusb-base-20160529 netbsd-7-0-1-RELEASE nick-nhusb-base-20160422 nick-nhusb-base-20160319 nick-nhusb-base-20151226 netbsd-7-0-RELEASE nick-nhusb-base-20150921 netbsd-7-0-RC3 netbsd-7-0-RC2 netbsd-7-0-RC1 nick-nhusb-base-20150606 nick-nhusb-base-20150406 nick-nhusb-base netbsd-7-base yamt-pagecache-base9 tls-earlyentropy-base riastradh-xf86-video-intel-2-7-1-pre-2-21-15 riastradh-drm2-base3 rmind-smpnet-nbase rmind-smpnet-base tls-maxphys-base
|
#
1.63 |
|
25-Oct-2013 |
martin |
branches: 1.63.22; Mark a diagnostic-only variable
|
Revision tags: netbsd-6-0-6-RELEASE netbsd-6-1-5-RELEASE netbsd-6-1-4-RELEASE netbsd-6-0-5-RELEASE netbsd-6-1-3-RELEASE netbsd-6-0-4-RELEASE netbsd-6-1-2-RELEASE netbsd-6-0-3-RELEASE netbsd-6-1-1-RELEASE riastradh-drm2-base2 riastradh-drm2-base1 riastradh-drm2-base netbsd-6-0-2-RELEASE netbsd-6-1-RELEASE netbsd-6-1-RC4 netbsd-6-1-RC3 agc-symver-base netbsd-6-1-RC2 netbsd-6-1-RC1 yamt-pagecache-base8 netbsd-6-0-1-RELEASE yamt-pagecache-base7 matt-nb6-plus-nbase yamt-pagecache-base6 netbsd-6-0-RELEASE netbsd-6-0-RC2 matt-nb6-plus-base netbsd-6-0-RC1 jmcneill-usbmp-base10 yamt-pagecache-base5 jmcneill-usbmp-base9 yamt-pagecache-base4 jmcneill-usbmp-base8 jmcneill-usbmp-base7 jmcneill-usbmp-base6 jmcneill-usbmp-base5 jmcneill-usbmp-base4 jmcneill-usbmp-base3 jmcneill-usbmp-pre-base2 jmcneill-usbmp-base2 netbsd-6-base jmcneill-usbmp-base jmcneill-audiomp3-base yamt-pagecache-base3 yamt-pagecache-base2 yamt-pagecache-base
|
#
1.62 |
|
18-Aug-2011 |
yamt |
branches: 1.62.2; 1.62.12; 1.62.16; uvm_anon_release: - don't forget to call uvm_anon_dispose. - simplify code a little.
|
#
1.61 |
|
18-Aug-2011 |
yamt |
uvm_anon_freelst: - clear an_link/an_ref when deferring anon disposal. otherwise others can see bogus an_ref. - fix the code to remove anon from the list.
|
#
1.60 |
|
14-Aug-2011 |
rmind |
uvm_anon_freelst: do not free PG_RELEASED pages (change uvm_anon_dispose() to indicate them with a return value).
|
#
1.59 |
|
06-Aug-2011 |
rmind |
- Rework uvm_anfree() into uvm_anon_freelst(), which always drops the lock. - Free anons in uvm_anon_freelst() without lock held. - Mechanic sync to unused loaning code.
|
#
1.58 |
|
05-Jul-2011 |
yamt |
reduce the number of atomic ops in common cases. it's exceptional for anons to remain longer than amap.
|
#
1.57 |
|
24-Jun-2011 |
rmind |
Fix uvmplock regression - a lock against oneself case in amap_swap_off(). Happens since amap is NULL in uvmfault_anonget(), so uvmfault_unlockall() keeps anon locked, when it should unlock it.
|
#
1.56 |
|
24-Jun-2011 |
yamt |
uvm_anon_release: fix a locking error after the rmind-uvmplock merge
|
#
1.55 |
|
17-Jun-2011 |
rmind |
Improve comments on uvm_anon.c, tidy up slightly. No functional changes.
|
#
1.54 |
|
12-Jun-2011 |
rmind |
Welcome to 5.99.53! Merge rmind-uvmplock branch:
- Reorganize locking in UVM and provide extra serialisation for pmap(9). New lock order: [vmpage-owner-lock] -> pmap-lock.
- Simplify locking in some pmap(9) modules by removing P->V locking.
- Use lock object on vmobjlock (and thus vnode_t::v_interlock) to share the locks amongst UVM objects where necessary (tmpfs, layerfs, unionfs).
- Rewrite and optimise x86 TLB shootdown code, make it simpler and cleaner. Add TLBSTATS option for x86 to collect statistics about TLB shootdowns.
- Unify /dev/mem et al in MI code and provide required locking (removes kernel-lock on some ports). Also, avoid cache-aliasing issues.
Thanks to Andrew Doran and Joerg Sonnenberger, as their initial patches formed the core changes of this branch.
|
Revision tags: rmind-uvmplock-nbase cherry-xenmp-base rmind-uvmplock-base
|
#
1.53 |
|
23-Apr-2011 |
rmind |
branches: 1.53.2; Replace "malloc" in comments, remove unnecessary header inclusions.
|
Revision tags: uebayasi-xip-base7 bouyer-quota2-nbase bouyer-quota2-base
|
#
1.52 |
|
02-Feb-2011 |
chuck |
udpate license clauses on my code to match the new-style BSD licenses. based on diff that rmind@ sent me.
no functional change with this commit.
|
Revision tags: netbsd-5-2-3-RELEASE netbsd-5-1-5-RELEASE netbsd-5-2-2-RELEASE netbsd-5-1-4-RELEASE netbsd-5-2-1-RELEASE netbsd-5-1-3-RELEASE netbsd-5-2-RELEASE netbsd-5-2-RC1 netbsd-5-1-2-RELEASE netbsd-5-1-1-RELEASE jruoho-x86intr-base matt-mips64-premerge-20101231 matt-nb5-mips64-premerge-20101231 matt-nb5-pq3-base uebayasi-xip-base6 uebayasi-xip-base5 netbsd-5-1-RELEASE uebayasi-xip-base4 uebayasi-xip-base3 yamt-nfs-mp-base11 netbsd-5-1-RC4 matt-nb5-mips64-k15 uebayasi-xip-base2 yamt-nfs-mp-base10 netbsd-5-1-RC3 netbsd-5-1-RC2 uebayasi-xip-base1 netbsd-5-1-RC1 yamt-nfs-mp-base9 uebayasi-xip-base netbsd-5-0-2-RELEASE matt-nb5-mips64-premerge-20091211 matt-premerge-20091211 yamt-nfs-mp-base8 matt-nb5-mips64-u2-k2-k4-k7-k8-k9 matt-nb4-mips64-k7-u2a-k9b matt-nb5-mips64-u1-k1-k5 yamt-nfs-mp-base7 netbsd-5-0-1-RELEASE jymxensuspend-base yamt-nfs-mp-base6 yamt-nfs-mp-base5 yamt-nfs-mp-base4 jym-xensuspend-nbase yamt-nfs-mp-base3 nick-hppapmap-base4 nick-hppapmap-base3 netbsd-5-0-RELEASE netbsd-5-0-RC4 netbsd-5-0-RC3 nick-hppapmap-base2 netbsd-5-0-RC2 jym-xensuspend-base netbsd-5-0-RC1 haad-dm-base2 haad-nbase2 ad-audiomp2-base netbsd-5-base nick-hppapmap-base matt-mips64-base2 haad-dm-base1 wrstuden-revivesa-base-4 wrstuden-revivesa-base-3 wrstuden-revivesa-base-2 haad-dm-base wrstuden-revivesa-base-1 simonb-wapbl-nbase yamt-pf42-base4 simonb-wapbl-base yamt-pf42-base3 hpcarm-cleanup-nbase yamt-pf42-baseX yamt-pf42-base2 yamt-nfs-mp-base2 wrstuden-revivesa-base yamt-nfs-mp-base yamt-pf42-base ad-socklock-base1 yamt-lazymbuf-base15 yamt-lazymbuf-base14 keiichi-mipv6-nbase mjf-devfs2-base nick-net80211-sync-base keiichi-mipv6-base bouyer-xeni386-nbase bouyer-xeni386-base matt-armv6-nbase mjf-devfs-base hpcarm-cleanup-base
|
#
1.51 |
|
18-Jan-2008 |
yamt |
branches: 1.51.28; 1.51.32; 1.51.38; 1.51.40; push pmap_clear_reference calls into pdpolicy code, where reference bits actually matter.
|
Revision tags: matt-armv6-base
|
#
1.50 |
|
02-Jan-2008 |
ad |
Merge vmlocking2 to head.
|
Revision tags: vmlocking2-base3
|
#
1.49 |
|
20-Dec-2007 |
ad |
Specify PR_LARGECACHE for anon_cache (which is insanely busy).
|
Revision tags: yamt-kmem-base3 cube-autoconf-base yamt-kmem-base2 yamt-kmem-base vmlocking2-base2 reinoud-bufcleanup-nbase vmlocking2-base1 bouyer-xenamd64-base2 vmlocking-nbase bouyer-xenamd64-base jmcneill-pm-base reinoud-bufcleanup-base
|
#
1.48 |
|
13-Nov-2007 |
yamt |
branches: 1.48.2; 1.48.6; g/c unused uvm_anon_pool.
|
#
1.47 |
|
07-Nov-2007 |
ad |
Merge from vmlocking:
- pool_cache changes. - Debugger/procfs locking fixes. - Other minor changes.
|
Revision tags: jmcneill-base yamt-x86pmap-base4 yamt-x86pmap-base3 vmlocking-base
|
#
1.46 |
|
11-Oct-2007 |
ad |
branches: 1.46.2; 1.46.4; Remove LOCK_ASSERT(!simple_lock_held(&foo));
|
Revision tags: nick-csl-alignment-base5 yamt-x86pmap-base2 yamt-x86pmap-base matt-mips64-base
|
#
1.45 |
|
21-Jul-2007 |
ad |
branches: 1.45.4; 1.45.6; 1.45.8; 1.45.10; Merge unobtrusive locking changes from the vmlocking branch.
|
Revision tags: nick-csl-alignment-base yamt-idlelwp-base8 thorpej-atomic-base mjf-ufs-trans-base
|
#
1.44 |
|
12-Mar-2007 |
ad |
branches: 1.44.8; Pass an ipl argument to pool_init/POOL_INIT to be used when initializing the pool's lock.
|
Revision tags: ad-audiomp-base
|
#
1.43 |
|
22-Feb-2007 |
thorpej |
branches: 1.43.4; TRUE -> true, FALSE -> false
|
#
1.42 |
|
21-Feb-2007 |
thorpej |
Replace the Mach-derived boolean_t type with the C99 bool type. A future commit will replace use of TRUE and FALSE with true and false.
|
Revision tags: netbsd-4-0-1-RELEASE wrstuden-fixsa-newbase wrstuden-fixsa-base-1 netbsd-4-0-RELEASE netbsd-4-0-RC5 matt-nb4-arm-base netbsd-4-0-RC4 netbsd-4-0-RC3 netbsd-4-0-RC2 netbsd-4-0-RC1 wrstuden-fixsa-base post-newlock2-merge newlock2-nbase yamt-splraiseipl-base5 yamt-splraiseipl-base4 yamt-splraiseipl-base3 newlock2-base netbsd-4-base
|
#
1.41 |
|
01-Nov-2006 |
yamt |
branches: 1.41.4; remove some __unused from function parameters.
|
Revision tags: yamt-splraiseipl-base2
|
#
1.40 |
|
12-Oct-2006 |
christos |
- sprinkle __unused on function decls. - fix a couple of unused bugs - no more -Wno-unused for i386
|
Revision tags: yamt-splraiseipl-base
|
#
1.39 |
|
15-Sep-2006 |
yamt |
branches: 1.39.2; merge yamt-pdpolicy branch. - separate page replacement policy from the rest of kernel - implement an alternative replacement policy
|
Revision tags: abandoned-netbsd-4-base yamt-pdpolicy-base9 yamt-pdpolicy-base8 yamt-pdpolicy-base7 yamt-pdpolicy-base6 chap-midi-nbase gdamore-uart-base simonb-timcounters-final yamt-pdpolicy-base5 chap-midi-base yamt-pdpolicy-base4 yamt-pdpolicy-base3 peter-altq-base yamt-pdpolicy-base2 elad-kernelauth-base yamt-pdpolicy-base yamt-uio_vmspace-base5 simonb-timecounters-base rpaulo-netinet-merge-pcb-base
|
#
1.38 |
|
11-Dec-2005 |
christos |
branches: 1.38.8; 1.38.20; merge ktrace-lwp.
|
Revision tags: yamt-readahead-base3 yamt-readahead-base2 yamt-readahead-pervnode yamt-readahead-perfile yamt-readahead-base yamt-vop-base3 yamt-vop-base2 thorpej-vnode-attr-base yamt-vop-base ktrace-lwp-base
|
#
1.37 |
|
13-Sep-2005 |
yamt |
wrap swap related code by #ifdef VMSWAP. always #define VMSWAP for now.
|
#
1.36 |
|
31-Jul-2005 |
yamt |
revert "defflag VMSWAP" changes for now. there seems to be far more people who don't want to edit their kernel config files than i thought.
|
#
1.35 |
|
30-Jul-2005 |
yamt |
defflag VMSWAP.
|
#
1.34 |
|
27-Jun-2005 |
thorpej |
branches: 1.34.2; Use ANSI function decls.
|
#
1.33 |
|
11-May-2005 |
yamt |
allocate anons on-demand, rather than reserving static amount of them on boot/swapon.
|
Revision tags: kent-audio2-base
|
#
1.32 |
|
01-Apr-2005 |
yamt |
merge yamt-km branch. - don't use managed mappings/backing objects for wired memory allocations. save some resources like pv_entry. also fix (most of) PR/27030. - simplify kernel memory management API. - simplify pmap bootstrap of some ports. - some related cleanups.
|
Revision tags: netbsd-3-1-1-RELEASE netbsd-3-0-3-RELEASE netbsd-3-1-RELEASE netbsd-3-0-2-RELEASE netbsd-3-1-RC4 netbsd-3-1-RC3 netbsd-3-1-RC2 netbsd-3-1-RC1 netbsd-3-0-1-RELEASE netbsd-3-0-RELEASE netbsd-3-0-RC6 netbsd-3-0-RC5 netbsd-3-0-RC4 netbsd-3-0-RC3 netbsd-3-0-RC2 netbsd-3-0-RC1 yamt-km-base4 yamt-km-base3 netbsd-3-base yamt-km-base2 yamt-km-base kent-audio1-beforemerge kent-audio1-base
|
#
1.31 |
|
01-Sep-2004 |
yamt |
branches: 1.31.4; 1.31.6; uvm_pagefree: when orphaning an A->K loaned page, - decrement uvmexp.anonpages as it's no longer an anon page. - null out anon->u.an_page as the anon no longer own the page. uvm_anfree: add related assertions.
|
#
1.30 |
|
01-Sep-2004 |
yamt |
uvm_anfree: remove a comment which is no longer true.
|
#
1.29 |
|
05-May-2004 |
yamt |
fix a amap_wirerange deadlock problem by re-introducing PG_RELEASED for anon pages. PR/23171 from Christian Limpach. for details, see discussion filed in the PR database.
uvm_anon_release: a new function to free anon-owned PG_RELEASED page. uvm_anfree: we can't wait for the page here because the caller might hold amap lock. instead, just mark the page as PG_RELEASED. who unbusy the page should check the PG_RELEASED. uvm_aio_aiodone: uvm_anon_release() instead of uvm_page_unbusy() if appropriate. uvmfault_anonget: check PG_RELEASED.
|
Revision tags: netbsd-2-0-base
|
#
1.28 |
|
24-Mar-2004 |
junyoung |
branches: 1.28.2; Nuke __P().
|
#
1.27 |
|
06-Jan-2004 |
chs |
fix lock initialization in uvm_anon_add(). from PR 23831.
|
#
1.26 |
|
28-Aug-2003 |
pk |
When retiring a swap device with marked bad blocks on it we should update the `# swap page in use' and `# swap page only' counters. However, at the time of swap device removal we can no longer figure out how many of the bad swap pages are actually also `swap only' pages.
So, on swap I/O errors arrange things to not include the bad swap pages in the `swpgonly' counter as follows: uvm_swap_markbad() decrements `swpgonly' by the number of bad pages, and the various VM object deallocation routines do not decrement `swpgonly' for swap slots marked as SWSLOT_BAD.
|
#
1.25 |
|
11-Aug-2003 |
pk |
uao_pagein_page() & anon_pagein(): * return failure if the page cannot be retrieved. * wakeup any waiters when releasing a page after successful page in.
|
#
1.24 |
|
11-Aug-2003 |
pk |
Only deactivate pages if their wired count is zero.
|
#
1.23 |
|
11-Aug-2003 |
pk |
Make sure to call uvm_swap_free() and uvm_swap_markbad() with valid (i.e. positive) slot numbers.
|
Revision tags: nathanw_sa_before_merge fvdl_fs64_base gmcgarry_ctxsw_base gmcgarry_ucred_base nathanw_sa_base kqueue-aftermerge kqueue-beforemerge kqueue-base
|
#
1.22 |
|
21-Sep-2002 |
chs |
branches: 1.22.6; add missing anon lock around call to uvm_anon_lockloanpg().
|
Revision tags: netbsd-1-6-PATCH002-RELEASE netbsd-1-6-PATCH002 netbsd-1-6-PATCH002-RC4 netbsd-1-6-PATCH002-RC3 netbsd-1-6-PATCH002-RC2 netbsd-1-6-PATCH002-RC1 netbsd-1-6-PATCH001 netbsd-1-6-PATCH001-RELEASE netbsd-1-6-PATCH001-RC3 netbsd-1-6-PATCH001-RC2 netbsd-1-6-PATCH001-RC1 netbsd-1-6-RELEASE netbsd-1-6-RC3 netbsd-1-6-RC2 netbsd-1-6-RC1 netbsd-1-6-base gehenna-devsw-base eeh-devprop-base newlock-base ifpoll-base thorpej-mips-cache-base
|
#
1.21 |
|
10-Nov-2001 |
lukem |
branches: 1.21.4; add RCSIDs, and in some cases, slightly cleanup #include order
|
#
1.20 |
|
06-Nov-2001 |
chs |
several changes prompted by loaning problems: - fix the loaned case in uvm_pagefree(). - redo uvmexp.swpgonly accounting to work with page loaning. add an assertion before each place we adjust uvmexp.swpgonly. - fix uvm_km_pgremove() to always free any swap space associated with the range being removed. - get rid of UVM_LOAN_WIRED flag. instead, we just make sure that pages loaned to the kernel are never on the page queues. this allows us to assert that pages are not loaned and wired at the same time. - add yet more assertions.
|
#
1.19 |
|
21-Oct-2001 |
chs |
branches: 1.19.2; add some missing spinlocks.
|
Revision tags: thorpej-devvp-base3 thorpej-devvp-base2 post-chs-ubcperf
|
#
1.18 |
|
15-Sep-2001 |
chs |
a whole bunch of changes to improve performance and robustness under load:
- remove special treatment of pager_map mappings in pmaps. this is required now, since I've removed the globals that expose the address range. pager_map now uses pmap_kenter_pa() instead of pmap_enter(), so there's no longer any need to special-case it. - eliminate struct uvm_vnode by moving its fields into struct vnode. - rewrite the pageout path. the pager is now responsible for handling the high-level requests instead of only getting control after a bunch of work has already been done on its behalf. this will allow us to UBCify LFS, which needs tighter control over its pages than other filesystems do. writing a page to disk no longer requires making it read-only, which allows us to write wired pages without causing all kinds of havoc. - use a new PG_PAGEOUT flag to indicate that a page should be freed on behalf of the pagedaemon when it's unlocked. this flag is very similar to PG_RELEASED, but unlike PG_RELEASED, PG_PAGEOUT can be cleared if the pageout fails due to eg. an indirect-block buffer being locked. this allows us to remove the "version" field from struct vm_page, and together with shrinking "loan_count" from 32 bits to 16, struct vm_page is now 4 bytes smaller. - no longer use PG_RELEASED for swap-backed pages. if the page is busy because it's being paged out, we can't release the swap slot to be reallocated until that write is complete, but unlike with vnodes we don't keep a count of in-progress writes so there's no good way to know when the write is done. instead, when we need to free a busy swap-backed page, just sleep until we can get it busy ourselves. - implement a fast-path for extending writes which allows us to avoid zeroing new pages. this substantially reduces cpu usage. - encapsulate the data used by the genfs code in a struct genfs_node, which must be the first element of the filesystem-specific vnode data for filesystems which use genfs_{get,put}pages(). - eliminate many of the UVM pagerops, since they aren't needed anymore now that the pager "put" operation is a higher-level operation. - enhance the genfs code to allow NFS to use the genfs_{get,put}pages instead of a modified copy. - clean up struct vnode by removing all the fields that used to be used by the vfs_cluster.c code (which we don't use anymore with UBC). - remove kmem_object and mb_object since they were useless. instead of allocating pages to these objects, we now just allocate pages with no object. such pages are mapped in the kernel until they are freed, so we can use the mapping to find the page to free it. this allows us to remove splvm() protection in several places.
The sum of all these changes improves write throughput on my decstation 5000/200 to within 1% of the rate of NetBSD 1.5 and reduces the elapsed time for "make release" of a NetBSD 1.5 source tree on my 128MB pc to 10% less than a 1.5 kernel took.
|
Revision tags: pre-chs-ubcperf thorpej-devvp-base
|
#
1.17 |
|
25-May-2001 |
chs |
branches: 1.17.2; 1.17.4; remove trailing whitespace.
|
Revision tags: thorpej_scsipi_beforemerge thorpej_scsipi_nbase thorpej_scsipi_base
|
#
1.16 |
|
10-Mar-2001 |
chs |
eliminate the VM_PAGER_* error codes in favor of the traditional E* codes. the mapping is:
VM_PAGER_OK 0 VM_PAGER_BAD <unused> VM_PAGER_FAIL <unused> VM_PAGER_PEND 0 (see below) VM_PAGER_ERROR EIO VM_PAGER_AGAIN EAGAIN VM_PAGER_UNLOCK EBUSY VM_PAGER_REFAULT ERESTART
for async i/o requests, it used to be possible for the request to be convert to sync, and the pager would return VM_PAGER_OK or VM_PAGER_PEND to indicate whether the caller should perform post-i/o cleanup. this is no longer allowed; pagers must now return 0 to indicate that the async i/o was successfully started, and the caller never needs to worry about doing the post-i/o cleanup.
|
#
1.15 |
|
18-Feb-2001 |
chs |
branches: 1.15.2; clean up DIAGNOSTIC checks, use KASSERT().
|
#
1.14 |
|
28-Jan-2001 |
thorpej |
Page scanner improvements, behavior is actually a bit more like Mach VM's now. Specific changes: - Pages now need not have all of their mappings removed before being put on the inactive list. They only need to have the "referenced" attribute cleared. This makes putting pages onto the inactive list much more efficient. In order to eliminate redundant clearings of "refrenced", callers of uvm_pagedeactivate() must now do this themselves. - When checking the "modified" attribute for a page (for clearing PG_CLEAN), make sure to only do it if PG_CLEAN is currently set on the page (saves a potentially expensive pmap operation). - When scanning the inactive list, if a page is referenced, reactivate it (this part was actually added in uvm_pdaemon.c,v 1.27). This now works properly now that pages on the inactive list are allowed to have mappings. - When scanning the inactive list and considering a page for freeing, remove all mappings, and then check the "modified" attribute if the page is marked PG_CLEAN. - When scanning the active list, if the page was referenced since its last sweep by the scanner, don't deactivate it. (This part was actually added in uvm_pdaemon.c,v 1.28.)
These changes greatly improve interactive performance during moderate to high memory and I/O load.
|
#
1.13 |
|
23-Jan-2001 |
thorpej |
Change uvm_analloc() to return a locked anon, update all callers, and fix an anon locking protocol error in uvm_loanzero().
|
#
1.12 |
|
23-Jan-2001 |
thorpej |
Sprinkle some assertions: amap_free(): Assert that the amap is locked. amap_share_protect(): Assert that the amap is locked. amap_wipeout(): Assert that the amap is locked. uvm_anfree(): Assert that the anon has a reference count of 0 and is not locked. uvm_anon_lockloanpg(): Assert that the anon is locked. anon_pagein(): Assert that the anon is locked. uvmfault_anonget(): Assert that the anon is locked. uvm_pagealloc_strat(): Assert that the uobj or the anon is locked
And fix the problems these have uncovered: amap_cow_now(): Lock the new anon after allocating it, and unref and unlock it (rather than lock!) before freeing it in case of an error condition. This should fix a problem reported by Dan Carosone using cdrecord on an i386 MP kernel. uvm_fault(): Case1B -- Lock the new anon afer allocating it, and unlock it later when we unlock the old anon. Case2 -- Lock the new anon after allocating it, and unlock it later by passing it to uvmfault_unlockall() (we set anon to NULL if we're not doing a promote fault).
|
#
1.11 |
|
27-Dec-2000 |
chs |
when we fail to allocate anons to represent new swap space, just return an error rather than panicing.
|
#
1.10 |
|
25-Nov-2000 |
chs |
lots of cleanup: use queue.h macros and KASSERT(). address amap offsets in pages instead of bytes. make amap_ref() and amap_unref() take an amap, offset and length instead of a vm_map_entry_t. improve whitespace and comments.
|
#
1.9 |
|
06-Aug-2000 |
thorpej |
Do something sane with a DIAGNOSTIC condition in an non-DIAGNOSTIC kernel.
|
#
1.8 |
|
05-Aug-2000 |
thorpej |
Correct a comment about locking wrt. uvmfault_anonget().
|
#
1.7 |
|
27-Jun-2000 |
mrg |
remove include of <vm/vm.h>
|
#
1.6 |
|
26-Jun-2000 |
mrg |
remove/move more mach vm header files:
<vm/pglist.h> -> <uvm/uvm_pglist.h> <vm/vm_inherit.h> -> <uvm/uvm_inherit.h> <vm/vm_kern.h> -> into <uvm/uvm_extern.h> <vm/vm_object.h> -> nothing <vm/vm_pager.h> -> into <uvm/uvm_pager.h>
also includes a bunch of <vm/vm_page.h> include removals (due to redudancy with <vm/vm.h>), and a scattering of other similar headers.
|
Revision tags: netbsd-1-5-base minoura-xpg4dl-base chs-ubc2-newbase
|
#
1.5 |
|
11-Jan-2000 |
chs |
branches: 1.5.4; add support for ``swapctl -d'' (removing swap space). improve handling of i/o errors in swap space.
reviewed by: Chuck Cranor
|
Revision tags: wrstuden-devbsize-19991221 wrstuden-devbsize-base comdex-fall-1999-base fvdl-softdep-base
|
#
1.4 |
|
12-Sep-1999 |
chs |
branches: 1.4.2; eliminate the PMAP_NEW option by making it required for all ports. ports which previously had no support for PMAP_NEW now implement the pmap_k* interfaces as wrappers around the non-k versions.
|
#
1.3 |
|
14-Aug-1999 |
ross |
In uvm_anon_init() and uvm_anon_add(), initialize the ref count lock.
|
Revision tags: netbsd-1-4-PATCH003 netbsd-1-4-PATCH002 kame_141_19991130 netbsd-1-4-PATCH001 kame_14_19990705 kame_14_19990628 chs-ubc2-base netbsd-1-4-RELEASE netbsd-1-4-base
|
#
1.2 |
|
26-Mar-1999 |
chs |
add uvmexp.swpgonly and use it to detect out-of-swap conditions.
|
#
1.1 |
|
24-Jan-1999 |
chuck |
cleanup/reorg: - break anon related functions out of uvm_amap.c and put them in their own file (uvm_anon.c). includes break up uvm_anon_init into an amap and an an anon init function - ensure that only functions within the amap module access amap structure fields (add macros to amap api as needed)
|
#
1.64 |
|
28-Oct-2017 |
pgoyette |
Update the kernhist(9) kernel history code to address issues identified in PR kern/52639, as well as some general cleaning-up...
(As proposed on tech-kern@ with additional changes and enhancements.)
Details of changes:
* All history arguments are now stored as uintmax_t values[1], both in the kernel and in the structures used for exporting the history data to userland via sysctl(9). This avoids problems on some architectures where passing a 64-bit (or larger) value to printf(3) can cause it to process the value as multiple arguments. (This can be particularly problematic when printf()'s format string is not a literal, since in that case the compiler cannot know how large each argument should be.)
* Update the data structures used for exporting kernel history data to include a version number as well as the length of history arguments.
* All [2] existing users of kernhist(9) have had their format strings updated. Each format specifier now includes an explicit length modifier 'j' to refer to numeric values of the size of uintmax_t.
* All [2] existing users of kernhist(9) have had their format strings updated to replace uses of "%p" with "%#jx", and the pointer arguments are now cast to (uintptr_t) before being subsequently cast to (uintmax_t). This is needed to avoid compiler warnings about casting "pointer to integer of a different size."
* All [2] existing users of kernhist(9) have had instances of "%s" or "%c" format strings replaced with numeric formats; several instances of mis-match between format string and argument list have been fixed.
* vmstat(1) has been modified to handle the new size of arguments in the history data as exported by sysctl(9).
* vmstat(1) now provides a warning message if the history requested with the -u option does not exist (previously, this condition was silently ignored, with only a single blank line being printed).
* vmstat(1) now checks the version and argument length included in the data exported via sysctl(9) and exits if they do not match the values with which vmstat was built.
* The kernhist(9) man-page has been updated to note the additional requirements imposed on the format strings, along with several other minor changes and enhancements.
[1] It would have been possible to use an explicit length (for example, uint64_t) for the history arguments. But that would require another "rototill" of all the users in the future when we add support for an architecture that supports a larger size. Also, the printf(3) format specifiers for explicitly-sized values, such as "%"PRIu64, are much more verbose (and less aesthetically appealing, IMHO) than simply using "%ju".
[2] I've tried very hard to find "all [the] existing users of kernhist(9)" but it is possible that I've missed some of them. I would be glad to update any stragglers that anyone identifies.
|
Revision tags: nick-nhusb-base-20170825 perseant-stdc-iso10646-base netbsd-8-base prg-localcount2-base3 prg-localcount2-base2 prg-localcount2-base1 prg-localcount2-base pgoyette-localcount-20170426 bouyer-socketcan-base1 jdolecek-ncq-base pgoyette-localcount-20170320 netbsd-7-1-RELEASE netbsd-7-1-RC2 nick-nhusb-base-20170204 netbsd-7-nhusb-base-20170116 bouyer-socketcan-base pgoyette-localcount-20170107 netbsd-7-1-RC1 nick-nhusb-base-20161204 pgoyette-localcount-20161104 netbsd-7-0-2-RELEASE nick-nhusb-base-20161004 localcount-20160914 netbsd-7-nhusb-base pgoyette-localcount-20160806 pgoyette-localcount-20160726 pgoyette-localcount-base nick-nhusb-base-20160907 nick-nhusb-base-20160529 netbsd-7-0-1-RELEASE nick-nhusb-base-20160422 nick-nhusb-base-20160319 nick-nhusb-base-20151226 netbsd-7-0-RELEASE nick-nhusb-base-20150921 netbsd-7-0-RC3 netbsd-7-0-RC2 netbsd-7-0-RC1 nick-nhusb-base-20150606 nick-nhusb-base-20150406 nick-nhusb-base netbsd-7-base yamt-pagecache-base9 tls-earlyentropy-base riastradh-xf86-video-intel-2-7-1-pre-2-21-15 riastradh-drm2-base3 rmind-smpnet-nbase rmind-smpnet-base tls-maxphys-base
|
#
1.63 |
|
25-Oct-2013 |
martin |
branches: 1.63.22; Mark a diagnostic-only variable
|
Revision tags: netbsd-6-0-6-RELEASE netbsd-6-1-5-RELEASE netbsd-6-1-4-RELEASE netbsd-6-0-5-RELEASE netbsd-6-1-3-RELEASE netbsd-6-0-4-RELEASE netbsd-6-1-2-RELEASE netbsd-6-0-3-RELEASE netbsd-6-1-1-RELEASE riastradh-drm2-base2 riastradh-drm2-base1 riastradh-drm2-base netbsd-6-0-2-RELEASE netbsd-6-1-RELEASE netbsd-6-1-RC4 netbsd-6-1-RC3 agc-symver-base netbsd-6-1-RC2 netbsd-6-1-RC1 yamt-pagecache-base8 netbsd-6-0-1-RELEASE yamt-pagecache-base7 matt-nb6-plus-nbase yamt-pagecache-base6 netbsd-6-0-RELEASE netbsd-6-0-RC2 matt-nb6-plus-base netbsd-6-0-RC1 jmcneill-usbmp-base10 yamt-pagecache-base5 jmcneill-usbmp-base9 yamt-pagecache-base4 jmcneill-usbmp-base8 jmcneill-usbmp-base7 jmcneill-usbmp-base6 jmcneill-usbmp-base5 jmcneill-usbmp-base4 jmcneill-usbmp-base3 jmcneill-usbmp-pre-base2 jmcneill-usbmp-base2 netbsd-6-base jmcneill-usbmp-base jmcneill-audiomp3-base yamt-pagecache-base3 yamt-pagecache-base2 yamt-pagecache-base
|
#
1.62 |
|
18-Aug-2011 |
yamt |
branches: 1.62.2; 1.62.12; 1.62.16; uvm_anon_release: - don't forget to call uvm_anon_dispose. - simplify code a little.
|
#
1.61 |
|
18-Aug-2011 |
yamt |
uvm_anon_freelst: - clear an_link/an_ref when deferring anon disposal. otherwise others can see bogus an_ref. - fix the code to remove anon from the list.
|
#
1.60 |
|
14-Aug-2011 |
rmind |
uvm_anon_freelst: do not free PG_RELEASED pages (change uvm_anon_dispose() to indicate them with a return value).
|
#
1.59 |
|
06-Aug-2011 |
rmind |
- Rework uvm_anfree() into uvm_anon_freelst(), which always drops the lock. - Free anons in uvm_anon_freelst() without lock held. - Mechanic sync to unused loaning code.
|
#
1.58 |
|
05-Jul-2011 |
yamt |
reduce the number of atomic ops in common cases. it's exceptional for anons to remain longer than amap.
|
#
1.57 |
|
24-Jun-2011 |
rmind |
Fix uvmplock regression - a lock against oneself case in amap_swap_off(). Happens since amap is NULL in uvmfault_anonget(), so uvmfault_unlockall() keeps anon locked, when it should unlock it.
|
#
1.56 |
|
24-Jun-2011 |
yamt |
uvm_anon_release: fix a locking error after the rmind-uvmplock merge
|
#
1.55 |
|
17-Jun-2011 |
rmind |
Improve comments on uvm_anon.c, tidy up slightly. No functional changes.
|
#
1.54 |
|
12-Jun-2011 |
rmind |
Welcome to 5.99.53! Merge rmind-uvmplock branch:
- Reorganize locking in UVM and provide extra serialisation for pmap(9). New lock order: [vmpage-owner-lock] -> pmap-lock.
- Simplify locking in some pmap(9) modules by removing P->V locking.
- Use lock object on vmobjlock (and thus vnode_t::v_interlock) to share the locks amongst UVM objects where necessary (tmpfs, layerfs, unionfs).
- Rewrite and optimise x86 TLB shootdown code, make it simpler and cleaner. Add TLBSTATS option for x86 to collect statistics about TLB shootdowns.
- Unify /dev/mem et al in MI code and provide required locking (removes kernel-lock on some ports). Also, avoid cache-aliasing issues.
Thanks to Andrew Doran and Joerg Sonnenberger, as their initial patches formed the core changes of this branch.
|
Revision tags: rmind-uvmplock-nbase cherry-xenmp-base rmind-uvmplock-base
|
#
1.53 |
|
23-Apr-2011 |
rmind |
branches: 1.53.2; Replace "malloc" in comments, remove unnecessary header inclusions.
|
Revision tags: uebayasi-xip-base7 bouyer-quota2-nbase bouyer-quota2-base
|
#
1.52 |
|
02-Feb-2011 |
chuck |
udpate license clauses on my code to match the new-style BSD licenses. based on diff that rmind@ sent me.
no functional change with this commit.
|
Revision tags: netbsd-5-2-3-RELEASE netbsd-5-1-5-RELEASE netbsd-5-2-2-RELEASE netbsd-5-1-4-RELEASE netbsd-5-2-1-RELEASE netbsd-5-1-3-RELEASE netbsd-5-2-RELEASE netbsd-5-2-RC1 netbsd-5-1-2-RELEASE netbsd-5-1-1-RELEASE jruoho-x86intr-base matt-mips64-premerge-20101231 matt-nb5-mips64-premerge-20101231 matt-nb5-pq3-base uebayasi-xip-base6 uebayasi-xip-base5 netbsd-5-1-RELEASE uebayasi-xip-base4 uebayasi-xip-base3 yamt-nfs-mp-base11 netbsd-5-1-RC4 matt-nb5-mips64-k15 uebayasi-xip-base2 yamt-nfs-mp-base10 netbsd-5-1-RC3 netbsd-5-1-RC2 uebayasi-xip-base1 netbsd-5-1-RC1 yamt-nfs-mp-base9 uebayasi-xip-base netbsd-5-0-2-RELEASE matt-nb5-mips64-premerge-20091211 matt-premerge-20091211 yamt-nfs-mp-base8 matt-nb5-mips64-u2-k2-k4-k7-k8-k9 matt-nb4-mips64-k7-u2a-k9b matt-nb5-mips64-u1-k1-k5 yamt-nfs-mp-base7 netbsd-5-0-1-RELEASE jymxensuspend-base yamt-nfs-mp-base6 yamt-nfs-mp-base5 yamt-nfs-mp-base4 jym-xensuspend-nbase yamt-nfs-mp-base3 nick-hppapmap-base4 nick-hppapmap-base3 netbsd-5-0-RELEASE netbsd-5-0-RC4 netbsd-5-0-RC3 nick-hppapmap-base2 netbsd-5-0-RC2 jym-xensuspend-base netbsd-5-0-RC1 haad-dm-base2 haad-nbase2 ad-audiomp2-base netbsd-5-base nick-hppapmap-base matt-mips64-base2 haad-dm-base1 wrstuden-revivesa-base-4 wrstuden-revivesa-base-3 wrstuden-revivesa-base-2 haad-dm-base wrstuden-revivesa-base-1 simonb-wapbl-nbase yamt-pf42-base4 simonb-wapbl-base yamt-pf42-base3 hpcarm-cleanup-nbase yamt-pf42-baseX yamt-pf42-base2 yamt-nfs-mp-base2 wrstuden-revivesa-base yamt-nfs-mp-base yamt-pf42-base ad-socklock-base1 yamt-lazymbuf-base15 yamt-lazymbuf-base14 keiichi-mipv6-nbase mjf-devfs2-base nick-net80211-sync-base keiichi-mipv6-base bouyer-xeni386-nbase bouyer-xeni386-base matt-armv6-nbase mjf-devfs-base hpcarm-cleanup-base
|
#
1.51 |
|
18-Jan-2008 |
yamt |
branches: 1.51.28; 1.51.32; 1.51.38; 1.51.40; push pmap_clear_reference calls into pdpolicy code, where reference bits actually matter.
|
Revision tags: matt-armv6-base
|
#
1.50 |
|
02-Jan-2008 |
ad |
Merge vmlocking2 to head.
|
Revision tags: vmlocking2-base3
|
#
1.49 |
|
20-Dec-2007 |
ad |
Specify PR_LARGECACHE for anon_cache (which is insanely busy).
|
Revision tags: yamt-kmem-base3 cube-autoconf-base yamt-kmem-base2 yamt-kmem-base vmlocking2-base2 reinoud-bufcleanup-nbase vmlocking2-base1 bouyer-xenamd64-base2 vmlocking-nbase bouyer-xenamd64-base jmcneill-pm-base reinoud-bufcleanup-base
|
#
1.48 |
|
13-Nov-2007 |
yamt |
branches: 1.48.2; 1.48.6; g/c unused uvm_anon_pool.
|
#
1.47 |
|
07-Nov-2007 |
ad |
Merge from vmlocking:
- pool_cache changes. - Debugger/procfs locking fixes. - Other minor changes.
|
Revision tags: jmcneill-base yamt-x86pmap-base4 yamt-x86pmap-base3 vmlocking-base
|
#
1.46 |
|
11-Oct-2007 |
ad |
branches: 1.46.2; 1.46.4; Remove LOCK_ASSERT(!simple_lock_held(&foo));
|
Revision tags: nick-csl-alignment-base5 yamt-x86pmap-base2 yamt-x86pmap-base matt-mips64-base
|
#
1.45 |
|
21-Jul-2007 |
ad |
branches: 1.45.4; 1.45.6; 1.45.8; 1.45.10; Merge unobtrusive locking changes from the vmlocking branch.
|
Revision tags: nick-csl-alignment-base yamt-idlelwp-base8 thorpej-atomic-base mjf-ufs-trans-base
|
#
1.44 |
|
12-Mar-2007 |
ad |
branches: 1.44.8; Pass an ipl argument to pool_init/POOL_INIT to be used when initializing the pool's lock.
|
Revision tags: ad-audiomp-base
|
#
1.43 |
|
22-Feb-2007 |
thorpej |
branches: 1.43.4; TRUE -> true, FALSE -> false
|
#
1.42 |
|
21-Feb-2007 |
thorpej |
Replace the Mach-derived boolean_t type with the C99 bool type. A future commit will replace use of TRUE and FALSE with true and false.
|
Revision tags: netbsd-4-0-1-RELEASE wrstuden-fixsa-newbase wrstuden-fixsa-base-1 netbsd-4-0-RELEASE netbsd-4-0-RC5 matt-nb4-arm-base netbsd-4-0-RC4 netbsd-4-0-RC3 netbsd-4-0-RC2 netbsd-4-0-RC1 wrstuden-fixsa-base post-newlock2-merge newlock2-nbase yamt-splraiseipl-base5 yamt-splraiseipl-base4 yamt-splraiseipl-base3 newlock2-base netbsd-4-base
|
#
1.41 |
|
01-Nov-2006 |
yamt |
branches: 1.41.4; remove some __unused from function parameters.
|
Revision tags: yamt-splraiseipl-base2
|
#
1.40 |
|
12-Oct-2006 |
christos |
- sprinkle __unused on function decls. - fix a couple of unused bugs - no more -Wno-unused for i386
|
Revision tags: yamt-splraiseipl-base
|
#
1.39 |
|
15-Sep-2006 |
yamt |
branches: 1.39.2; merge yamt-pdpolicy branch. - separate page replacement policy from the rest of kernel - implement an alternative replacement policy
|
Revision tags: abandoned-netbsd-4-base yamt-pdpolicy-base9 yamt-pdpolicy-base8 yamt-pdpolicy-base7 yamt-pdpolicy-base6 chap-midi-nbase gdamore-uart-base simonb-timcounters-final yamt-pdpolicy-base5 chap-midi-base yamt-pdpolicy-base4 yamt-pdpolicy-base3 peter-altq-base yamt-pdpolicy-base2 elad-kernelauth-base yamt-pdpolicy-base yamt-uio_vmspace-base5 simonb-timecounters-base rpaulo-netinet-merge-pcb-base
|
#
1.38 |
|
11-Dec-2005 |
christos |
branches: 1.38.8; 1.38.20; merge ktrace-lwp.
|
Revision tags: yamt-readahead-base3 yamt-readahead-base2 yamt-readahead-pervnode yamt-readahead-perfile yamt-readahead-base yamt-vop-base3 yamt-vop-base2 thorpej-vnode-attr-base yamt-vop-base ktrace-lwp-base
|
#
1.37 |
|
13-Sep-2005 |
yamt |
wrap swap related code by #ifdef VMSWAP. always #define VMSWAP for now.
|
#
1.36 |
|
31-Jul-2005 |
yamt |
revert "defflag VMSWAP" changes for now. there seems to be far more people who don't want to edit their kernel config files than i thought.
|
#
1.35 |
|
30-Jul-2005 |
yamt |
defflag VMSWAP.
|
#
1.34 |
|
27-Jun-2005 |
thorpej |
branches: 1.34.2; Use ANSI function decls.
|
#
1.33 |
|
11-May-2005 |
yamt |
allocate anons on-demand, rather than reserving static amount of them on boot/swapon.
|
Revision tags: kent-audio2-base
|
#
1.32 |
|
01-Apr-2005 |
yamt |
merge yamt-km branch. - don't use managed mappings/backing objects for wired memory allocations. save some resources like pv_entry. also fix (most of) PR/27030. - simplify kernel memory management API. - simplify pmap bootstrap of some ports. - some related cleanups.
|
Revision tags: netbsd-3-1-1-RELEASE netbsd-3-0-3-RELEASE netbsd-3-1-RELEASE netbsd-3-0-2-RELEASE netbsd-3-1-RC4 netbsd-3-1-RC3 netbsd-3-1-RC2 netbsd-3-1-RC1 netbsd-3-0-1-RELEASE netbsd-3-0-RELEASE netbsd-3-0-RC6 netbsd-3-0-RC5 netbsd-3-0-RC4 netbsd-3-0-RC3 netbsd-3-0-RC2 netbsd-3-0-RC1 yamt-km-base4 yamt-km-base3 netbsd-3-base yamt-km-base2 yamt-km-base kent-audio1-beforemerge kent-audio1-base
|
#
1.31 |
|
01-Sep-2004 |
yamt |
branches: 1.31.4; 1.31.6; uvm_pagefree: when orphaning an A->K loaned page, - decrement uvmexp.anonpages as it's no longer an anon page. - null out anon->u.an_page as the anon no longer own the page. uvm_anfree: add related assertions.
|
#
1.30 |
|
01-Sep-2004 |
yamt |
uvm_anfree: remove a comment which is no longer true.
|
#
1.29 |
|
05-May-2004 |
yamt |
fix a amap_wirerange deadlock problem by re-introducing PG_RELEASED for anon pages. PR/23171 from Christian Limpach. for details, see discussion filed in the PR database.
uvm_anon_release: a new function to free anon-owned PG_RELEASED page. uvm_anfree: we can't wait for the page here because the caller might hold amap lock. instead, just mark the page as PG_RELEASED. who unbusy the page should check the PG_RELEASED. uvm_aio_aiodone: uvm_anon_release() instead of uvm_page_unbusy() if appropriate. uvmfault_anonget: check PG_RELEASED.
|
Revision tags: netbsd-2-0-base
|
#
1.28 |
|
24-Mar-2004 |
junyoung |
branches: 1.28.2; Nuke __P().
|
#
1.27 |
|
06-Jan-2004 |
chs |
fix lock initialization in uvm_anon_add(). from PR 23831.
|
#
1.26 |
|
28-Aug-2003 |
pk |
When retiring a swap device with marked bad blocks on it we should update the `# swap page in use' and `# swap page only' counters. However, at the time of swap device removal we can no longer figure out how many of the bad swap pages are actually also `swap only' pages.
So, on swap I/O errors arrange things to not include the bad swap pages in the `swpgonly' counter as follows: uvm_swap_markbad() decrements `swpgonly' by the number of bad pages, and the various VM object deallocation routines do not decrement `swpgonly' for swap slots marked as SWSLOT_BAD.
|
#
1.25 |
|
11-Aug-2003 |
pk |
uao_pagein_page() & anon_pagein(): * return failure if the page cannot be retrieved. * wakeup any waiters when releasing a page after successful page in.
|
#
1.24 |
|
11-Aug-2003 |
pk |
Only deactivate pages if their wired count is zero.
|
#
1.23 |
|
11-Aug-2003 |
pk |
Make sure to call uvm_swap_free() and uvm_swap_markbad() with valid (i.e. positive) slot numbers.
|
Revision tags: nathanw_sa_before_merge fvdl_fs64_base gmcgarry_ctxsw_base gmcgarry_ucred_base nathanw_sa_base kqueue-aftermerge kqueue-beforemerge kqueue-base
|
#
1.22 |
|
21-Sep-2002 |
chs |
branches: 1.22.6; add missing anon lock around call to uvm_anon_lockloanpg().
|
Revision tags: netbsd-1-6-PATCH002-RELEASE netbsd-1-6-PATCH002 netbsd-1-6-PATCH002-RC4 netbsd-1-6-PATCH002-RC3 netbsd-1-6-PATCH002-RC2 netbsd-1-6-PATCH002-RC1 netbsd-1-6-PATCH001 netbsd-1-6-PATCH001-RELEASE netbsd-1-6-PATCH001-RC3 netbsd-1-6-PATCH001-RC2 netbsd-1-6-PATCH001-RC1 netbsd-1-6-RELEASE netbsd-1-6-RC3 netbsd-1-6-RC2 netbsd-1-6-RC1 netbsd-1-6-base gehenna-devsw-base eeh-devprop-base newlock-base ifpoll-base thorpej-mips-cache-base
|
#
1.21 |
|
10-Nov-2001 |
lukem |
branches: 1.21.4; add RCSIDs, and in some cases, slightly cleanup #include order
|
#
1.20 |
|
06-Nov-2001 |
chs |
several changes prompted by loaning problems: - fix the loaned case in uvm_pagefree(). - redo uvmexp.swpgonly accounting to work with page loaning. add an assertion before each place we adjust uvmexp.swpgonly. - fix uvm_km_pgremove() to always free any swap space associated with the range being removed. - get rid of UVM_LOAN_WIRED flag. instead, we just make sure that pages loaned to the kernel are never on the page queues. this allows us to assert that pages are not loaned and wired at the same time. - add yet more assertions.
|
#
1.19 |
|
21-Oct-2001 |
chs |
branches: 1.19.2; add some missing spinlocks.
|
Revision tags: thorpej-devvp-base3 thorpej-devvp-base2 post-chs-ubcperf
|
#
1.18 |
|
15-Sep-2001 |
chs |
a whole bunch of changes to improve performance and robustness under load:
- remove special treatment of pager_map mappings in pmaps. this is required now, since I've removed the globals that expose the address range. pager_map now uses pmap_kenter_pa() instead of pmap_enter(), so there's no longer any need to special-case it. - eliminate struct uvm_vnode by moving its fields into struct vnode. - rewrite the pageout path. the pager is now responsible for handling the high-level requests instead of only getting control after a bunch of work has already been done on its behalf. this will allow us to UBCify LFS, which needs tighter control over its pages than other filesystems do. writing a page to disk no longer requires making it read-only, which allows us to write wired pages without causing all kinds of havoc. - use a new PG_PAGEOUT flag to indicate that a page should be freed on behalf of the pagedaemon when it's unlocked. this flag is very similar to PG_RELEASED, but unlike PG_RELEASED, PG_PAGEOUT can be cleared if the pageout fails due to eg. an indirect-block buffer being locked. this allows us to remove the "version" field from struct vm_page, and together with shrinking "loan_count" from 32 bits to 16, struct vm_page is now 4 bytes smaller. - no longer use PG_RELEASED for swap-backed pages. if the page is busy because it's being paged out, we can't release the swap slot to be reallocated until that write is complete, but unlike with vnodes we don't keep a count of in-progress writes so there's no good way to know when the write is done. instead, when we need to free a busy swap-backed page, just sleep until we can get it busy ourselves. - implement a fast-path for extending writes which allows us to avoid zeroing new pages. this substantially reduces cpu usage. - encapsulate the data used by the genfs code in a struct genfs_node, which must be the first element of the filesystem-specific vnode data for filesystems which use genfs_{get,put}pages(). - eliminate many of the UVM pagerops, since they aren't needed anymore now that the pager "put" operation is a higher-level operation. - enhance the genfs code to allow NFS to use the genfs_{get,put}pages instead of a modified copy. - clean up struct vnode by removing all the fields that used to be used by the vfs_cluster.c code (which we don't use anymore with UBC). - remove kmem_object and mb_object since they were useless. instead of allocating pages to these objects, we now just allocate pages with no object. such pages are mapped in the kernel until they are freed, so we can use the mapping to find the page to free it. this allows us to remove splvm() protection in several places.
The sum of all these changes improves write throughput on my decstation 5000/200 to within 1% of the rate of NetBSD 1.5 and reduces the elapsed time for "make release" of a NetBSD 1.5 source tree on my 128MB pc to 10% less than a 1.5 kernel took.
|
Revision tags: pre-chs-ubcperf thorpej-devvp-base
|
#
1.17 |
|
25-May-2001 |
chs |
branches: 1.17.2; 1.17.4; remove trailing whitespace.
|
Revision tags: thorpej_scsipi_beforemerge thorpej_scsipi_nbase thorpej_scsipi_base
|
#
1.16 |
|
10-Mar-2001 |
chs |
eliminate the VM_PAGER_* error codes in favor of the traditional E* codes. the mapping is:
VM_PAGER_OK 0 VM_PAGER_BAD <unused> VM_PAGER_FAIL <unused> VM_PAGER_PEND 0 (see below) VM_PAGER_ERROR EIO VM_PAGER_AGAIN EAGAIN VM_PAGER_UNLOCK EBUSY VM_PAGER_REFAULT ERESTART
for async i/o requests, it used to be possible for the request to be convert to sync, and the pager would return VM_PAGER_OK or VM_PAGER_PEND to indicate whether the caller should perform post-i/o cleanup. this is no longer allowed; pagers must now return 0 to indicate that the async i/o was successfully started, and the caller never needs to worry about doing the post-i/o cleanup.
|
#
1.15 |
|
18-Feb-2001 |
chs |
branches: 1.15.2; clean up DIAGNOSTIC checks, use KASSERT().
|
#
1.14 |
|
28-Jan-2001 |
thorpej |
Page scanner improvements, behavior is actually a bit more like Mach VM's now. Specific changes: - Pages now need not have all of their mappings removed before being put on the inactive list. They only need to have the "referenced" attribute cleared. This makes putting pages onto the inactive list much more efficient. In order to eliminate redundant clearings of "refrenced", callers of uvm_pagedeactivate() must now do this themselves. - When checking the "modified" attribute for a page (for clearing PG_CLEAN), make sure to only do it if PG_CLEAN is currently set on the page (saves a potentially expensive pmap operation). - When scanning the inactive list, if a page is referenced, reactivate it (this part was actually added in uvm_pdaemon.c,v 1.27). This now works properly now that pages on the inactive list are allowed to have mappings. - When scanning the inactive list and considering a page for freeing, remove all mappings, and then check the "modified" attribute if the page is marked PG_CLEAN. - When scanning the active list, if the page was referenced since its last sweep by the scanner, don't deactivate it. (This part was actually added in uvm_pdaemon.c,v 1.28.)
These changes greatly improve interactive performance during moderate to high memory and I/O load.
|
#
1.13 |
|
23-Jan-2001 |
thorpej |
Change uvm_analloc() to return a locked anon, update all callers, and fix an anon locking protocol error in uvm_loanzero().
|
#
1.12 |
|
23-Jan-2001 |
thorpej |
Sprinkle some assertions: amap_free(): Assert that the amap is locked. amap_share_protect(): Assert that the amap is locked. amap_wipeout(): Assert that the amap is locked. uvm_anfree(): Assert that the anon has a reference count of 0 and is not locked. uvm_anon_lockloanpg(): Assert that the anon is locked. anon_pagein(): Assert that the anon is locked. uvmfault_anonget(): Assert that the anon is locked. uvm_pagealloc_strat(): Assert that the uobj or the anon is locked
And fix the problems these have uncovered: amap_cow_now(): Lock the new anon after allocating it, and unref and unlock it (rather than lock!) before freeing it in case of an error condition. This should fix a problem reported by Dan Carosone using cdrecord on an i386 MP kernel. uvm_fault(): Case1B -- Lock the new anon afer allocating it, and unlock it later when we unlock the old anon. Case2 -- Lock the new anon after allocating it, and unlock it later by passing it to uvmfault_unlockall() (we set anon to NULL if we're not doing a promote fault).
|
#
1.11 |
|
27-Dec-2000 |
chs |
when we fail to allocate anons to represent new swap space, just return an error rather than panicing.
|
#
1.10 |
|
25-Nov-2000 |
chs |
lots of cleanup: use queue.h macros and KASSERT(). address amap offsets in pages instead of bytes. make amap_ref() and amap_unref() take an amap, offset and length instead of a vm_map_entry_t. improve whitespace and comments.
|
#
1.9 |
|
06-Aug-2000 |
thorpej |
Do something sane with a DIAGNOSTIC condition in an non-DIAGNOSTIC kernel.
|
#
1.8 |
|
05-Aug-2000 |
thorpej |
Correct a comment about locking wrt. uvmfault_anonget().
|
#
1.7 |
|
27-Jun-2000 |
mrg |
remove include of <vm/vm.h>
|
#
1.6 |
|
26-Jun-2000 |
mrg |
remove/move more mach vm header files:
<vm/pglist.h> -> <uvm/uvm_pglist.h> <vm/vm_inherit.h> -> <uvm/uvm_inherit.h> <vm/vm_kern.h> -> into <uvm/uvm_extern.h> <vm/vm_object.h> -> nothing <vm/vm_pager.h> -> into <uvm/uvm_pager.h>
also includes a bunch of <vm/vm_page.h> include removals (due to redudancy with <vm/vm.h>), and a scattering of other similar headers.
|
Revision tags: netbsd-1-5-base minoura-xpg4dl-base chs-ubc2-newbase
|
#
1.5 |
|
11-Jan-2000 |
chs |
branches: 1.5.4; add support for ``swapctl -d'' (removing swap space). improve handling of i/o errors in swap space.
reviewed by: Chuck Cranor
|
Revision tags: wrstuden-devbsize-19991221 wrstuden-devbsize-base comdex-fall-1999-base fvdl-softdep-base
|
#
1.4 |
|
12-Sep-1999 |
chs |
branches: 1.4.2; eliminate the PMAP_NEW option by making it required for all ports. ports which previously had no support for PMAP_NEW now implement the pmap_k* interfaces as wrappers around the non-k versions.
|
#
1.3 |
|
14-Aug-1999 |
ross |
In uvm_anon_init() and uvm_anon_add(), initialize the ref count lock.
|
Revision tags: netbsd-1-4-PATCH003 netbsd-1-4-PATCH002 kame_141_19991130 netbsd-1-4-PATCH001 kame_14_19990705 kame_14_19990628 chs-ubc2-base netbsd-1-4-RELEASE netbsd-1-4-base
|
#
1.2 |
|
26-Mar-1999 |
chs |
add uvmexp.swpgonly and use it to detect out-of-swap conditions.
|
#
1.1 |
|
24-Jan-1999 |
chuck |
cleanup/reorg: - break anon related functions out of uvm_amap.c and put them in their own file (uvm_anon.c). includes break up uvm_anon_init into an amap and an an anon init function - ensure that only functions within the amap module access amap structure fields (add macros to amap api as needed)
|