head 1.32; access; symbols netbsd-10-0-RC6:1.32 netbsd-10-0-RC5:1.32 netbsd-10-0-RC4:1.32 netbsd-10-0-RC3:1.32 netbsd-10-0-RC2:1.32 thorpej-ifq:1.32.0.26 thorpej-ifq-base:1.32 thorpej-altq-separation:1.32.0.24 thorpej-altq-separation-base:1.32 netbsd-10-0-RC1:1.32 netbsd-10:1.32.0.22 netbsd-10-base:1.32 bouyer-sunxi-drm:1.32.0.20 bouyer-sunxi-drm-base:1.32 netbsd-9-3-RELEASE:1.30 thorpej-i2c-spi-conf2:1.32.0.18 thorpej-i2c-spi-conf2-base:1.32 thorpej-futex2:1.32.0.16 thorpej-futex2-base:1.32 thorpej-cfargs2:1.32.0.14 thorpej-cfargs2-base:1.32 cjep_sun2x-base1:1.32 cjep_sun2x:1.32.0.12 cjep_sun2x-base:1.32 cjep_staticlib_x-base1:1.32 netbsd-9-2-RELEASE:1.30 cjep_staticlib_x:1.32.0.10 cjep_staticlib_x-base:1.32 thorpej-i2c-spi-conf:1.32.0.8 thorpej-i2c-spi-conf-base:1.32 thorpej-cfargs:1.32.0.6 thorpej-cfargs-base:1.32 thorpej-futex:1.32.0.4 thorpej-futex-base:1.32 netbsd-9-1-RELEASE:1.30 bouyer-xenpvh-base2:1.32 phil-wifi-20200421:1.32 bouyer-xenpvh-base1:1.32 phil-wifi-20200411:1.32 bouyer-xenpvh:1.32.0.2 bouyer-xenpvh-base:1.32 is-mlppp:1.31.0.2 is-mlppp-base:1.31 phil-wifi-20200406:1.32 netbsd-8-2-RELEASE:1.30 ad-namecache-base3:1.31 netbsd-9-0-RELEASE:1.30 netbsd-9-0-RC2:1.30 ad-namecache-base2:1.30 ad-namecache-base1:1.30 ad-namecache:1.30.0.60 ad-namecache-base:1.30 netbsd-9-0-RC1:1.30 phil-wifi-20191119:1.30 netbsd-9:1.30.0.58 netbsd-9-base:1.30 phil-wifi-20190609:1.30 netbsd-8-1-RELEASE:1.30 netbsd-8-1-RC1:1.30 isaki-audio2:1.30.0.56 isaki-audio2-base:1.30 pgoyette-compat-merge-20190127:1.30 pgoyette-compat-20190127:1.30 pgoyette-compat-20190118:1.30 pgoyette-compat-1226:1.30 pgoyette-compat-1126:1.30 pgoyette-compat-1020:1.30 pgoyette-compat-0930:1.30 pgoyette-compat-0906:1.30 netbsd-7-2-RELEASE:1.30 pgoyette-compat-0728:1.30 netbsd-8-0-RELEASE:1.30 phil-wifi:1.30.0.54 phil-wifi-base:1.30 pgoyette-compat-0625:1.30 netbsd-8-0-RC2:1.30 pgoyette-compat-0521:1.30 pgoyette-compat-0502:1.30 pgoyette-compat-0422:1.30 netbsd-8-0-RC1:1.30 pgoyette-compat-0415:1.30 pgoyette-compat-0407:1.30 pgoyette-compat-0330:1.30 pgoyette-compat-0322:1.30 pgoyette-compat-0315:1.30 netbsd-7-1-2-RELEASE:1.30 pgoyette-compat:1.30.0.52 pgoyette-compat-base:1.30 netbsd-7-1-1-RELEASE:1.30 tls-maxphys-base-20171202:1.30 matt-nb8-mediatek:1.30.0.50 matt-nb8-mediatek-base:1.30 nick-nhusb-base-20170825:1.30 perseant-stdc-iso10646:1.30.0.48 perseant-stdc-iso10646-base:1.30 netbsd-8:1.30.0.46 netbsd-8-base:1.30 prg-localcount2-base3:1.30 prg-localcount2-base2:1.30 prg-localcount2-base1:1.30 prg-localcount2:1.30.0.44 prg-localcount2-base:1.30 pgoyette-localcount-20170426:1.30 bouyer-socketcan-base1:1.30 jdolecek-ncq:1.30.0.42 jdolecek-ncq-base:1.30 pgoyette-localcount-20170320:1.30 netbsd-7-1:1.30.0.40 netbsd-7-1-RELEASE:1.30 netbsd-7-1-RC2:1.30 nick-nhusb-base-20170204:1.30 netbsd-7-nhusb-base-20170116:1.30 bouyer-socketcan:1.30.0.38 bouyer-socketcan-base:1.30 pgoyette-localcount-20170107:1.30 netbsd-7-1-RC1:1.30 nick-nhusb-base-20161204:1.30 pgoyette-localcount-20161104:1.30 netbsd-7-0-2-RELEASE:1.30 nick-nhusb-base-20161004:1.30 localcount-20160914:1.30 netbsd-7-nhusb:1.30.0.36 netbsd-7-nhusb-base:1.30 pgoyette-localcount-20160806:1.30 pgoyette-localcount-20160726:1.30 pgoyette-localcount:1.30.0.34 pgoyette-localcount-base:1.30 nick-nhusb-base-20160907:1.30 nick-nhusb-base-20160529:1.30 netbsd-7-0-1-RELEASE:1.30 nick-nhusb-base-20160422:1.30 nick-nhusb-base-20160319:1.30 nick-nhusb-base-20151226:1.30 netbsd-7-0:1.30.0.32 netbsd-7-0-RELEASE:1.30 nick-nhusb-base-20150921:1.30 netbsd-7-0-RC3:1.30 netbsd-7-0-RC2:1.30 netbsd-7-0-RC1:1.30 nick-nhusb-base-20150606:1.30 nick-nhusb-base-20150406:1.30 nick-nhusb:1.30.0.30 nick-nhusb-base:1.30 netbsd-5-2-3-RELEASE:1.25 netbsd-5-1-5-RELEASE:1.25 netbsd-6-0-6-RELEASE:1.30 netbsd-6-1-5-RELEASE:1.30 netbsd-7:1.30.0.28 netbsd-7-base:1.30 yamt-pagecache-base9:1.30 yamt-pagecache-tag8:1.30 netbsd-6-1-4-RELEASE:1.30 netbsd-6-0-5-RELEASE:1.30 tls-earlyentropy:1.30.0.26 tls-earlyentropy-base:1.30 riastradh-xf86-video-intel-2-7-1-pre-2-21-15:1.30 riastradh-drm2-base3:1.30 netbsd-6-1-3-RELEASE:1.30 netbsd-6-0-4-RELEASE:1.30 netbsd-5-2-2-RELEASE:1.25 netbsd-5-1-4-RELEASE:1.25 netbsd-6-1-2-RELEASE:1.30 netbsd-6-0-3-RELEASE:1.30 netbsd-5-2-1-RELEASE:1.25 netbsd-5-1-3-RELEASE:1.25 rmind-smpnet-nbase:1.30 netbsd-6-1-1-RELEASE:1.30 riastradh-drm2-base2:1.30 riastradh-drm2-base1:1.30 riastradh-drm2:1.30.0.24 riastradh-drm2-base:1.30 rmind-smpnet:1.30.0.16 rmind-smpnet-base:1.30 netbsd-6-1:1.30.0.22 netbsd-6-0-2-RELEASE:1.30 netbsd-6-1-RELEASE:1.30 khorben-n900:1.30.0.20 netbsd-6-1-RC4:1.30 netbsd-6-1-RC3:1.30 agc-symver:1.30.0.18 agc-symver-base:1.30 netbsd-6-1-RC2:1.30 netbsd-6-1-RC1:1.30 yamt-pagecache-base8:1.30 netbsd-5-2:1.25.0.34 netbsd-6-0-1-RELEASE:1.30 yamt-pagecache-base7:1.30 netbsd-5-2-RELEASE:1.25 netbsd-5-2-RC1:1.25 matt-nb6-plus-nbase:1.30 yamt-pagecache-base6:1.30 netbsd-6-0:1.30.0.14 netbsd-6-0-RELEASE:1.30 netbsd-6-0-RC2:1.30 tls-maxphys:1.30.0.12 tls-maxphys-base:1.30 matt-nb6-plus:1.30.0.10 matt-nb6-plus-base:1.30 netbsd-6-0-RC1:1.30 jmcneill-usbmp-base10:1.30 yamt-pagecache-base5:1.30 jmcneill-usbmp-base9:1.30 yamt-pagecache-base4:1.30 jmcneill-usbmp-base8:1.30 jmcneill-usbmp-base7:1.30 jmcneill-usbmp-base6:1.30 jmcneill-usbmp-base5:1.30 jmcneill-usbmp-base4:1.30 jmcneill-usbmp-base3:1.30 jmcneill-usbmp-pre-base2:1.30 jmcneill-usbmp-base2:1.30 netbsd-6:1.30.0.8 netbsd-6-base:1.30 netbsd-5-1-2-RELEASE:1.25 netbsd-5-1-1-RELEASE:1.25 jmcneill-usbmp:1.30.0.6 jmcneill-usbmp-base:1.30 jmcneill-audiomp3:1.30.0.4 jmcneill-audiomp3-base:1.30 yamt-pagecache-base3:1.30 yamt-pagecache-base2:1.30 yamt-pagecache:1.30.0.2 yamt-pagecache-base:1.30 rmind-uvmplock-nbase:1.27 cherry-xenmp:1.27.0.2 cherry-xenmp-base:1.27 uebayasi-xip-base7:1.27 bouyer-quota2-nbase:1.27 bouyer-quota2:1.26.0.8 bouyer-quota2-base:1.27 jruoho-x86intr:1.26.0.6 jruoho-x86intr-base:1.26 matt-mips64-premerge-20101231:1.26 matt-nb5-mips64-premerge-20101231:1.25 matt-nb5-pq3:1.25.0.32 matt-nb5-pq3-base:1.25 netbsd-5-1:1.25.0.30 uebayasi-xip-base6:1.26 uebayasi-xip-base5:1.26 netbsd-5-1-RELEASE:1.25 uebayasi-xip-base4:1.26 uebayasi-xip-base3:1.26 yamt-nfs-mp-base11:1.26 netbsd-5-1-RC4:1.25 matt-nb5-mips64-k15:1.25 uebayasi-xip-base2:1.26 yamt-nfs-mp-base10:1.26 netbsd-5-1-RC3:1.25 netbsd-5-1-RC2:1.25 uebayasi-xip-base1:1.26 netbsd-5-1-RC1:1.25 rmind-uvmplock:1.26.0.4 rmind-uvmplock-base:1.27 yamt-nfs-mp-base9:1.26 uebayasi-xip:1.26.0.2 uebayasi-xip-base:1.26 netbsd-5-0-2-RELEASE:1.25 matt-nb5-mips64-premerge-20091211:1.25 matt-premerge-20091211:1.26 yamt-nfs-mp-base8:1.26 matt-nb5-mips64-u2-k2-k4-k7-k8-k9:1.25 matt-nb4-mips64-k7-u2a-k9b:1.25 matt-nb5-mips64-u1-k1-k5:1.25 yamt-nfs-mp-base7:1.26 matt-nb5-mips64:1.25.0.28 netbsd-5-0-1-RELEASE:1.25 jymxensuspend-base:1.26 yamt-nfs-mp-base6:1.26 yamt-nfs-mp-base5:1.26 yamt-nfs-mp-base4:1.25 jym-xensuspend-nbase:1.26 yamt-nfs-mp-base3:1.25 nick-hppapmap-base4:1.25 nick-hppapmap-base3:1.25 netbsd-5-0:1.25.0.26 netbsd-5-0-RELEASE:1.25 netbsd-5-0-RC4:1.25 netbsd-5-0-RC3:1.25 nick-hppapmap-base2:1.25 netbsd-5-0-RC2:1.25 jym-xensuspend:1.25.0.24 jym-xensuspend-base:1.25 netbsd-5-0-RC1:1.25 haad-dm-base2:1.25 haad-nbase2:1.25 ad-audiomp2:1.25.0.22 ad-audiomp2-base:1.25 netbsd-5:1.25.0.20 netbsd-5-base:1.25 nick-hppapmap:1.25.0.18 nick-hppapmap-base:1.25 matt-mips64-base2:1.25 matt-mips64:1.24.0.34 haad-dm-base1:1.25 wrstuden-revivesa-base-4:1.25 netbsd-4-0-1-RELEASE:1.23 wrstuden-revivesa-base-3:1.25 wrstuden-revivesa-base-2:1.25 wrstuden-fixsa-newbase:1.23 nick-csl-alignment-base5:1.24 haad-dm:1.25.0.16 haad-dm-base:1.25 wrstuden-revivesa-base-1:1.25 simonb-wapbl-nbase:1.25 yamt-pf42-base4:1.25 simonb-wapbl:1.25.0.14 simonb-wapbl-base:1.25 yamt-pf42-base3:1.25 hpcarm-cleanup-nbase:1.25 yamt-pf42-baseX:1.25 yamt-pf42-base2:1.25 yamt-nfs-mp-base2:1.25 wrstuden-revivesa:1.25.0.12 wrstuden-revivesa-base:1.25 yamt-nfs-mp:1.25.0.10 yamt-nfs-mp-base:1.25 yamt-pf42:1.25.0.8 yamt-pf42-base:1.25 ad-socklock-base1:1.25 yamt-lazymbuf-base15:1.25 yamt-lazymbuf-base14:1.25 keiichi-mipv6-nbase:1.25 mjf-devfs2:1.25.0.6 mjf-devfs2-base:1.25 nick-net80211-sync:1.25.0.4 nick-net80211-sync-base:1.25 keiichi-mipv6:1.25.0.2 keiichi-mipv6-base:1.25 bouyer-xeni386-merge1:1.24.30.1 matt-armv6-prevmlocking:1.24 wrstuden-fixsa-base-1:1.23 vmlocking2-base3:1.24 netbsd-4-0:1.23.0.32 netbsd-4-0-RELEASE:1.23 bouyer-xeni386-nbase:1.25 yamt-kmem-base3:1.24 cube-autoconf:1.24.0.32 cube-autoconf-base:1.24 yamt-kmem-base2:1.24 bouyer-xeni386:1.24.0.30 bouyer-xeni386-base:1.25 yamt-kmem:1.24.0.28 yamt-kmem-base:1.24 vmlocking2-base2:1.24 reinoud-bufcleanup-nbase:1.24 vmlocking2:1.24.0.26 vmlocking2-base1:1.24 netbsd-4-0-RC5:1.23 matt-nb4-arm:1.23.0.30 matt-nb4-arm-base:1.23 matt-armv6-nbase:1.25 jmcneill-base:1.24 netbsd-4-0-RC4:1.23 mjf-devfs:1.24.0.24 mjf-devfs-base:1.25 bouyer-xenamd64-base2:1.24 vmlocking-nbase:1.24 yamt-x86pmap-base4:1.24 bouyer-xenamd64:1.24.0.22 bouyer-xenamd64-base:1.24 netbsd-4-0-RC3:1.23 yamt-x86pmap-base3:1.24 yamt-x86pmap-base2:1.24 netbsd-4-0-RC2:1.23 yamt-x86pmap:1.24.0.20 yamt-x86pmap-base:1.24 netbsd-4-0-RC1:1.23 matt-armv6:1.24.0.18 matt-armv6-base:1.25 matt-mips64-base:1.24 jmcneill-pm:1.24.0.16 jmcneill-pm-base:1.24 hpcarm-cleanup:1.24.0.14 hpcarm-cleanup-base:1.25 nick-csl-alignment:1.24.0.12 nick-csl-alignment-base:1.24 netbsd-3-1-1-RELEASE:1.17 netbsd-3-0-3-RELEASE:1.17 yamt-idlelwp-base8:1.24 wrstuden-fixsa:1.23.0.28 wrstuden-fixsa-base:1.23 thorpej-atomic:1.24.0.10 thorpej-atomic-base:1.24 reinoud-bufcleanup:1.24.0.8 reinoud-bufcleanup-base:1.24 mjf-ufs-trans:1.24.0.6 mjf-ufs-trans-base:1.24 vmlocking:1.24.0.4 vmlocking-base:1.24 ad-audiomp:1.24.0.2 ad-audiomp-base:1.24 yamt-idlelwp:1.23.0.26 post-newlock2-merge:1.23 newlock2-nbase:1.23 yamt-splraiseipl-base5:1.23 yamt-splraiseipl-base4:1.23 yamt-splraiseipl-base3:1.23 abandoned-netbsd-4-base:1.23 abandoned-netbsd-4:1.23.0.18 netbsd-3-1:1.17.0.14 netbsd-3-1-RELEASE:1.17 netbsd-3-0-2-RELEASE:1.17 yamt-splraiseipl-base2:1.23 netbsd-3-1-RC4:1.17 yamt-splraiseipl:1.23.0.22 yamt-splraiseipl-base:1.23 netbsd-3-1-RC3:1.17 yamt-pdpolicy-base9:1.23 newlock2:1.23.0.20 newlock2-base:1.23 yamt-pdpolicy-base8:1.23 netbsd-3-1-RC2:1.17 netbsd-3-1-RC1:1.17 yamt-pdpolicy-base7:1.23 netbsd-4:1.23.0.24 netbsd-4-base:1.23 yamt-pdpolicy-base6:1.23 chap-midi-nbase:1.23 netbsd-3-0-1-RELEASE:1.17 gdamore-uart:1.23.0.16 gdamore-uart-base:1.23 simonb-timcounters-final:1.23 yamt-pdpolicy-base5:1.23 chap-midi:1.23.0.14 chap-midi-base:1.23 yamt-pdpolicy-base4:1.23 yamt-pdpolicy-base3:1.23 peter-altq-base:1.23 peter-altq:1.23.0.12 yamt-pdpolicy-base2:1.23 elad-kernelauth-base:1.23 elad-kernelauth:1.23.0.10 yamt-pdpolicy:1.23.0.8 yamt-pdpolicy-base:1.23 yamt-uio_vmspace-base5:1.23 simonb-timecounters:1.23.0.6 simonb-timecounters-base:1.23 rpaulo-netinet-merge-pcb:1.23.0.4 rpaulo-netinet-merge-pcb-base:1.23 yamt-uio_vmspace:1.23.0.2 netbsd-3-0:1.17.0.12 netbsd-3-0-RELEASE:1.17 netbsd-3-0-RC6:1.17 yamt-readahead-base3:1.22 netbsd-3-0-RC5:1.17 netbsd-3-0-RC4:1.17 netbsd-3-0-RC3:1.17 yamt-readahead-base2:1.22 netbsd-3-0-RC2:1.17 yamt-readahead-pervnode:1.22 yamt-readahead-perfile:1.22 yamt-readahead:1.22.0.6 yamt-readahead-base:1.22 netbsd-3-0-RC1:1.17 yamt-vop-base3:1.22 netbsd-2-0-3-RELEASE:1.16.2.1 netbsd-2-1:1.16.2.1.0.4 yamt-vop-base2:1.22 thorpej-vnode-attr:1.22.0.4 thorpej-vnode-attr-base:1.22 netbsd-2-1-RELEASE:1.16.2.1 yamt-vop:1.22.0.2 yamt-vop-base:1.22 netbsd-2-1-RC6:1.16.2.1 netbsd-2-1-RC5:1.16.2.1 netbsd-2-1-RC4:1.16.2.1 netbsd-2-1-RC3:1.16.2.1 netbsd-2-1-RC2:1.16.2.1 netbsd-2-1-RC1:1.16.2.1 yamt-lazymbuf:1.18.0.2 yamt-km-base4:1.17 netbsd-2-0-2-RELEASE:1.16.2.1 yamt-km-base3:1.17 netbsd-3:1.17.0.10 netbsd-3-base:1.17 yamt-km-base2:1.17 yamt-km:1.17.0.6 yamt-km-base:1.17 kent-audio2:1.17.0.4 kent-audio2-base:1.17 netbsd-2-0-1-RELEASE:1.16.2.1 kent-audio1-beforemerge:1.17 netbsd-2:1.16.2.1.0.2 netbsd-2-base:1.16.2.1 kent-audio1:1.17.0.2 kent-audio1-base:1.17 netbsd-2-0-RELEASE:1.16.2.1 netbsd-2-0-RC5:1.16.2.1 netbsd-2-0-RC4:1.16.2.1 netbsd-2-0-RC3:1.16.2.1 netbsd-2-0-RC2:1.16.2.1 netbsd-2-0-RC1:1.16.2.1 netbsd-2-0:1.16.0.2 netbsd-2-0-base:1.16 netbsd-1-6-PATCH002-RELEASE:1.15 netbsd-1-6-PATCH002:1.15 netbsd-1-6-PATCH002-RC4:1.15 netbsd-1-6-PATCH002-RC3:1.15 netbsd-1-6-PATCH002-RC2:1.15 netbsd-1-6-PATCH002-RC1:1.15 ktrace-lwp:1.15.0.22 ktrace-lwp-base:1.22 netbsd-1-6-PATCH001:1.15 netbsd-1-6-PATCH001-RELEASE:1.15 netbsd-1-6-PATCH001-RC3:1.15 netbsd-1-6-PATCH001-RC2:1.15 netbsd-1-6-PATCH001-RC1:1.15 nathanw_sa_end:1.13.2.1 nathanw_sa_before_merge:1.15 fvdl_fs64_base:1.15 gmcgarry_ctxsw:1.15.0.20 gmcgarry_ctxsw_base:1.15 gmcgarry_ucred:1.15.0.18 gmcgarry_ucred_base:1.15 nathanw_sa_base:1.15 kqueue-aftermerge:1.15 kqueue-beforemerge:1.15 netbsd-1-6-RELEASE:1.15 netbsd-1-6-RC3:1.15 netbsd-1-6-RC2:1.15 netbsd-1-6-RC1:1.15 netbsd-1-6:1.15.0.16 netbsd-1-6-base:1.15 gehenna-devsw:1.15.0.14 gehenna-devsw-base:1.15 netbsd-1-5-PATCH003:1.12.4.1 eeh-devprop:1.15.0.12 eeh-devprop-base:1.15 newlock:1.15.0.10 newlock-base:1.15 ifpoll-base:1.15 thorpej-mips-cache:1.15.0.6 thorpej-mips-cache-base:1.15 thorpej-devvp-base3:1.15 thorpej-devvp-base2:1.15 post-chs-ubcperf:1.15 pre-chs-ubcperf:1.15 thorpej-devvp:1.15.0.4 thorpej-devvp-base:1.15 netbsd-1-5-PATCH002:1.12 kqueue:1.15.0.2 kqueue-base:1.15 netbsd-1-5-PATCH001:1.12 thorpej_scsipi_beforemerge:1.13 nathanw_sa:1.13.0.2 thorpej_scsipi_nbase:1.13 netbsd-1-5-RELEASE:1.12 netbsd-1-5-BETA2:1.12 netbsd-1-5-BETA:1.12 netbsd-1-4-PATCH003:1.10 netbsd-1-5-ALPHA2:1.12 netbsd-1-5:1.12.0.4 netbsd-1-5-base:1.12 minoura-xpg4dl-base:1.12 minoura-xpg4dl:1.12.0.2 netbsd-1-4-PATCH002:1.10 chs-ubc2-newbase:1.12 wrstuden-devbsize-19991221:1.11 wrstuden-devbsize:1.11.0.8 wrstuden-devbsize-base:1.11 kame_141_19991130:1.10 comdex-fall-1999:1.11.0.6 comdex-fall-1999-base:1.11 fvdl-softdep:1.11.0.4 fvdl-softdep-base:1.11 thorpej_scsipi:1.11.0.2 thorpej_scsipi_base:1.13 netbsd-1-4-PATCH001:1.10 kame_14_19990705:1.10 kame_14_19990628:1.10 kame:1.10.0.6 chs-ubc2:1.10.0.4 chs-ubc2-base:1.11 netbsd-1-4-RELEASE:1.10 netbsd-1-4:1.10.0.2 netbsd-1-4-base:1.10 kenh-if-detach:1.8.0.2 kenh-if-detach-base:1.8 chs-ubc:1.7.0.4 chs-ubc-base:1.7 eeh-paddr_t:1.7.0.2 eeh-paddr_t-base:1.7 uvm980205:1.1.1.1 CDC:1.1.1; locks; strict; comment @ * @; 1.32 date 2020.03.20.19.08.54; author ad; state Exp; branches; next 1.31; commitid lvnNoIacV0IhOa1C; 1.31 date 2020.02.23.15.46.43; author ad; state Exp; branches; next 1.30; commitid DJJO1ciCDgZlwOXB; 1.30 date 2011.08.06.17.25.03; author rmind; state Exp; branches 1.30.54.1 1.30.60.1; next 1.29; 1.29 date 2011.06.24.01.39.22; author rmind; state Exp; branches; next 1.28; 1.28 date 2011.06.12.03.36.02; author rmind; state Exp; branches; next 1.27; 1.27 date 2011.02.02.15.13.34; author chuck; state Exp; branches 1.27.2.1; next 1.26; 1.26 date 2009.06.14.21.36.03; author yamt; state Exp; branches 1.26.4.1 1.26.6.1 1.26.8.1; next 1.25; 1.25 date 2008.01.02.11.49.15; author ad; state Exp; branches 1.25.10.1 1.25.24.1; next 1.24; 1.24 date 2007.02.21.23.00.12; author thorpej; state Exp; branches 1.24.4.1 1.24.18.1 1.24.24.1 1.24.26.1 1.24.30.1; next 1.23; 1.23 date 2005.12.11.12.25.29; author christos; state Exp; branches 1.23.26.1; next 1.22; 1.22 date 2005.09.17.14.38.40; author yamt; state Exp; branches; next 1.21; 1.21 date 2005.09.13.22.00.05; author yamt; state Exp; branches; next 1.20; 1.20 date 2005.07.31.04.04.47; author yamt; state Exp; branches; next 1.19; 1.19 date 2005.07.30.06.33.36; author yamt; state Exp; branches; next 1.18; 1.18 date 2005.05.11.13.02.25; author yamt; state Exp; branches 1.18.2.1; next 1.17; 1.17 date 2004.05.05.11.54.32; author yamt; state Exp; branches; next 1.16; 1.16 date 2004.03.24.07.55.01; author junyoung; state Exp; branches 1.16.2.1; next 1.15; 1.15 date 2001.05.26.16.32.46; author chs; state Exp; branches 1.15.22.1; next 1.14; 1.14 date 2001.05.25.04.06.12; author chs; state Exp; branches; next 1.13; 1.13 date 2000.12.27.09.17.04; author chs; state Exp; branches 1.13.2.1; next 1.12; 1.12 date 2000.01.11.06.57.49; author chs; state Exp; branches 1.12.4.1; next 1.11; 1.11 date 99.06.21.17.25.11; author thorpej; state Exp; branches 1.11.2.1; next 1.10; 1.10 date 99.03.26.17.34.15; author chs; state Exp; branches 1.10.4.1; next 1.9; 1.9 date 99.01.24.23.53.15; author chuck; state Exp; branches; next 1.8; 1.8 date 98.11.20.19.37.06; author chuck; state Exp; branches; next 1.7; 1.7 date 98.03.09.00.58.56; author mrg; state Exp; branches; next 1.6; 1.6 date 98.03.01.02.25.28; author fvdl; state Exp; branches; next 1.5; 1.5 date 98.02.10.02.34.25; author perry; state Exp; branches; next 1.4; 1.4 date 98.02.09.04.05.36; author mrg; state Exp; branches; next 1.3; 1.3 date 98.02.07.11.08.04; author mrg; state Exp; branches; next 1.2; 1.2 date 98.02.06.22.31.35; author thorpej; state Exp; branches; next 1.1; 1.1 date 98.02.05.06.25.10; author mrg; state Exp; branches 1.1.1.1; next ; 1.30.54.1 date 2020.04.08.14.09.04; author martin; state Exp; branches; next ; commitid Qli2aW9E74UFuA3C; 1.30.60.1 date 2020.02.29.20.21.11; author ad; state Exp; branches; next ; commitid OjSb8ro7YQETQBYB; 1.27.2.1 date 2011.06.23.14.20.34; author cherry; state Exp; branches; next ; 1.26.4.1 date 2010.03.17.06.03.17; author rmind; state Exp; branches; next 1.26.4.2; 1.26.4.2 date 2011.03.05.20.56.35; author rmind; state Exp; branches; next ; 1.26.6.1 date 2011.06.06.09.10.20; author jruoho; state Exp; branches; next ; 1.26.8.1 date 2011.02.08.16.20.06; author bouyer; state Exp; branches; next ; 1.25.10.1 date 2009.06.20.07.20.38; author yamt; state Exp; branches; next ; 1.25.24.1 date 2009.07.23.23.33.04; author jym; state Exp; branches; next ; 1.24.4.1 date 2007.03.13.17.51.54; author ad; state Exp; branches; next ; 1.24.18.1 date 2008.01.09.01.58.38; author matt; state Exp; branches; next ; 1.24.24.1 date 2008.02.18.21.07.32; author mjf; state Exp; branches; next ; 1.24.26.1 date 2007.12.04.13.03.56; author ad; state Exp; branches; next ; 1.24.30.1 date 2008.01.02.21.58.33; author bouyer; state Exp; branches; next ; 1.23.26.1 date 2007.02.27.16.55.24; author yamt; state Exp; branches; next ; 1.18.2.1 date 2006.06.21.15.12.39; author yamt; state Exp; branches; next 1.18.2.2; 1.18.2.2 date 2007.02.26.09.12.27; author yamt; state Exp; branches; next 1.18.2.3; 1.18.2.3 date 2008.01.21.09.48.19; author yamt; state Exp; branches; next ; 1.16.2.1 date 2004.05.10.14.26.37; author tron; state Exp; branches; next ; 1.15.22.1 date 2004.08.03.10.57.02; author skrll; state Exp; branches; next 1.15.22.2; 1.15.22.2 date 2004.09.18.14.57.11; author skrll; state Exp; branches; next 1.15.22.3; 1.15.22.3 date 2004.09.21.13.39.24; author skrll; state Exp; branches; next 1.15.22.4; 1.15.22.4 date 2005.11.10.14.12.39; author skrll; state Exp; branches; next ; 1.13.2.1 date 2001.06.21.20.10.22; author nathanw; state Exp; branches; next ; 1.12.4.1 date 2002.02.14.19.52.47; author he; state Exp; branches; next ; 1.11.2.1 date 2000.11.20.18.11.57; author bouyer; state Exp; branches; next 1.11.2.2; 1.11.2.2 date 2001.01.05.17.37.03; author bouyer; state Exp; branches; next ; 1.10.4.1 date 99.07.01.23.55.14; author thorpej; state Exp; branches; next ; 1.1.1.1 date 98.02.05.06.25.10; author mrg; state Exp; branches; next ; desc @@ 1.32 log @Go back to freeing struct vm_anon one by one. There may have been an advantage circa ~2008 but there isn't now. @ text @/* $NetBSD: uvm_anon.h,v 1.31 2020/02/23 15:46:43 ad Exp $ */ /* * Copyright (c) 1997 Charles D. Cranor and Washington University. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef _UVM_UVM_ANON_H_ #define _UVM_UVM_ANON_H_ /* * uvm_anon.h */ #if defined(_KERNEL_OPT) #include "opt_vmswap.h" #endif /* * anonymous memory management * * anonymous virtual memory is short term virtual memory that goes away * when the processes referencing it go away. an anonymous page of * virtual memory is described by the following data structure: */ struct vm_anon { krwlock_t *an_lock; /* Lock for an_ref */ uintptr_t an_ref; /* Reference count [an_lock] */ struct vm_page *an_page; /* If in RAM [an_lock] */ #if defined(VMSWAP) || 1 /* XXX libkvm */ /* * Drum swap slot # (if != 0) [an_lock. also, it is ok to read * an_swslot if we hold an_page PG_BUSY]. */ int an_swslot; #endif }; /* * for active vm_anon's the data can be in one of the following state: * [1] in a vm_page with no backing store allocated yet, [2] in a vm_page * with backing store allocated, or [3] paged out to backing store * (no vm_page). * * for pageout in case [2]: if the page has been modified then we must * flush it out to backing store, otherwise we can just dump the * vm_page. */ /* * anons are grouped together in anonymous memory maps, or amaps. * amaps are defined in uvm_amap.h. */ /* * processes reference anonymous virtual memory maps with an anonymous * reference structure: */ struct vm_aref { int ar_pageoff; /* page offset into amap we start */ struct vm_amap *ar_amap; /* pointer to amap */ }; /* * the offset field indicates which part of the amap we are referencing. * locked by vm_map lock. */ #ifdef _KERNEL /* * prototypes */ struct vm_anon *uvm_analloc(void); void uvm_anfree(struct vm_anon *); void uvm_anon_init(void); struct vm_page *uvm_anon_lockloanpg(struct vm_anon *); #if defined(VMSWAP) void uvm_anon_dropswap(struct vm_anon *); #else /* defined(VMSWAP) */ #define uvm_anon_dropswap(a) /* nothing */ #endif /* defined(VMSWAP) */ void uvm_anon_release(struct vm_anon *); bool uvm_anon_pagein(struct vm_amap *, struct vm_anon *); #endif /* _KERNEL */ #endif /* _UVM_UVM_ANON_H_ */ @ 1.31 log @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. @ text @d1 1 a1 1 /* $NetBSD: uvm_anon.h,v 1.30 2011/08/06 17:25:03 rmind Exp $ */ d49 1 a49 6 union { uintptr_t au_ref; /* Reference count [an_lock] */ struct vm_anon *au_link; /* Link for deferred free */ } an_u; #define an_ref an_u.au_ref #define an_link an_u.au_link d98 1 a98 2 void uvm_anon_free(struct vm_anon *); void uvm_anon_freelst(struct vm_amap *, struct vm_anon *); @ 1.30 log @- 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. @ text @d1 1 a1 1 /* $NetBSD: uvm_anon.h,v 1.29 2011/06/24 01:39:22 rmind Exp $ */ d48 1 a48 1 kmutex_t *an_lock; /* Lock for an_ref */ @ 1.30.54.1 log @Merge changes from current as of 20200406 @ text @d1 1 a1 1 /* $NetBSD$ */ d48 7 a54 2 krwlock_t *an_lock; /* Lock for an_ref */ uintptr_t an_ref; /* Reference count [an_lock] */ d103 2 a104 1 void uvm_anfree(struct vm_anon *); @ 1.30.60.1 log @Sync with head. @ text @d1 1 a1 1 /* $NetBSD: uvm_anon.h,v 1.31 2020/02/23 15:46:43 ad Exp $ */ d48 1 a48 1 krwlock_t *an_lock; /* Lock for an_ref */ @ 1.29 log @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. @ text @d1 1 a1 1 /* $NetBSD: uvm_anon.h,v 1.28 2011/06/12 03:36:02 rmind Exp $ */ d103 2 a104 1 void uvm_anfree(struct vm_anon *); @ 1.28 log @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. @ text @d1 1 a1 1 /* $NetBSD$ */ d112 1 a112 1 bool uvm_anon_pagein(struct vm_anon *); @ 1.27 log @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. @ text @d1 1 a1 1 /* $NetBSD: uvm_anon.h,v 1.26 2009/06/14 21:36:03 yamt Exp $ */ d48 8 a55 3 kmutex_t an_lock; /* lock for an_ref */ struct vm_page *an_page;/* if in RAM [an_lock] */ int an_ref; /* reference count [an_lock] */ d57 6 a62 4 int an_swslot; /* drum swap slot # (if != 0) [an_lock. also, it is ok to read an_swslot if we hold an_page PG_BUSY] */ #endif /* defined(VMSWAP) */ @ 1.27.2.1 log @Catchup with rmind-uvmplock merge. @ text @d1 1 a1 1 /* $NetBSD: uvm_anon.h,v 1.28 2011/06/12 03:36:02 rmind Exp $ */ d48 3 a50 8 kmutex_t *an_lock; /* Lock for an_ref */ union { uintptr_t au_ref; /* Reference count [an_lock] */ struct vm_anon *au_link; /* Link for deferred free */ } an_u; #define an_ref an_u.au_ref #define an_link an_u.au_link struct vm_page *an_page; /* If in RAM [an_lock] */ d52 4 a55 6 /* * Drum swap slot # (if != 0) [an_lock. also, it is ok to read * an_swslot if we hold an_page PG_BUSY]. */ int an_swslot; #endif @ 1.26 log @change the order of members of vm_anon for better packing. @ text @d1 1 a1 1 /* $NetBSD: uvm_anon.h,v 1.25 2008/01/02 11:49:15 ad Exp $ */ a3 1 * a14 6 * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * This product includes software developed by Charles D. Cranor and * Washington University. * 4. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. @ 1.26.6.1 log @Sync with HEAD. @ text @d1 1 a1 1 /* $NetBSD: uvm_anon.h,v 1.27 2011/02/02 15:13:34 chuck Exp $ */ d4 1 d16 6 @ 1.26.8.1 log @Sync with HEAD @ text @d1 1 a1 1 /* $NetBSD: uvm_anon.h,v 1.27 2011/02/02 15:13:34 chuck Exp $ */ d4 1 d16 6 @ 1.26.4.1 log @Reorganise UVM locking to protect P->V state and serialise pmap(9) operations on the same page(s) by always locking their owner. Hence lock order: "vmpage"-lock -> pmap-lock. Patch, proposed on tech-kern@@, from Andrew Doran. @ text @d1 1 a1 1 /* $NetBSD: uvm_anon.h,v 1.26 2009/06/14 21:36:03 yamt Exp $ */ d55 3 a57 8 kmutex_t *an_lock; /* Lock for an_ref */ union { uintptr_t au_ref; /* Reference count [an_lock] */ struct vm_anon *au_link; /* Link for deferred free */ } an_u; #define an_ref an_u.au_ref #define an_link an_u.au_link struct vm_page *an_page; /* If in RAM [an_lock] */ d59 4 a62 6 /* * Drum swap slot # (if != 0) [an_lock. also, it is ok to read * an_swslot if we hold an_page PG_BUSY]. */ int an_swslot; #endif @ 1.26.4.2 log @sync with head @ text @d1 1 a1 1 /* $NetBSD$ */ d4 1 d16 6 @ 1.25 log @Merge vmlocking2 to head. @ text @d1 1 a1 1 /* $NetBSD: uvm_anon.h,v 1.24 2007/02/21 23:00:12 thorpej Exp $ */ d55 1 a55 2 int an_ref; /* reference count [an_lock] */ kmutex_t an_lock; /* lock for an_ref */ d57 1 @ 1.25.24.1 log @Sync with HEAD. @ text @d1 1 a1 1 /* $NetBSD: uvm_anon.h,v 1.26 2009/06/14 21:36:03 yamt Exp $ */ d55 2 a56 1 kmutex_t an_lock; /* lock for an_ref */ a57 1 int an_ref; /* reference count [an_lock] */ @ 1.25.10.1 log @sync with head @ text @d1 1 a1 1 /* $NetBSD: uvm_anon.h,v 1.25 2008/01/02 11:49:15 ad Exp $ */ d55 2 a56 1 kmutex_t an_lock; /* lock for an_ref */ a57 1 int an_ref; /* reference count [an_lock] */ @ 1.24 log @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. @ text @d1 1 a1 1 /* $NetBSD: uvm_anon.h,v 1.23 2005/12/11 12:25:29 christos Exp $ */ d56 1 a56 1 struct simplelock an_lock; /* lock for an_ref */ @ 1.24.24.1 log @Sync with HEAD. @ text @d1 1 a1 1 /* $NetBSD: uvm_anon.h,v 1.25 2008/01/02 11:49:15 ad Exp $ */ d56 1 a56 1 kmutex_t an_lock; /* lock for an_ref */ @ 1.24.18.1 log @sync with HEAD @ text @d1 1 a1 1 /* $NetBSD: uvm_anon.h,v 1.24 2007/02/21 23:00:12 thorpej Exp $ */ d56 1 a56 1 kmutex_t an_lock; /* lock for an_ref */ @ 1.24.30.1 log @Sync with HEAD @ text @d1 1 a1 1 /* $NetBSD$ */ d56 1 a56 1 kmutex_t an_lock; /* lock for an_ref */ @ 1.24.26.1 log @Pull the vmlocking changes into a new branch. @ text @d1 1 a1 1 /* $NetBSD: uvm_anon.h,v 1.24 2007/02/21 23:00:12 thorpej Exp $ */ d56 1 a56 1 kmutex_t an_lock; /* lock for an_ref */ @ 1.24.4.1 log @Pull in the initial set of changes for the vmlocking branch. @ text @d1 1 a1 1 /* $NetBSD: uvm_anon.h,v 1.24 2007/02/21 23:00:12 thorpej Exp $ */ d56 1 a56 1 kmutex_t an_lock; /* lock for an_ref */ @ 1.23 log @merge ktrace-lwp. @ text @d1 1 a1 1 /* $NetBSD: uvm_anon.h,v 1.15.22.4 2005/11/10 14:12:39 skrll Exp $ */ d112 1 a112 1 boolean_t uvm_anon_pagein(struct vm_anon *); @ 1.23.26.1 log @- sync with head. - move sched_changepri back to kern_synch.c as it doesn't know PPQ anymore. @ text @d1 1 a1 1 /* $NetBSD: uvm_anon.h,v 1.23 2005/12/11 12:25:29 christos Exp $ */ d112 1 a112 1 bool uvm_anon_pagein(struct vm_anon *); @ 1.22 log @make VMSWAP optional again. @ text @d1 1 a1 1 /* $NetBSD: uvm_anon.h,v 1.21 2005/09/13 22:00:05 yamt Exp $ */ @ 1.21 log @wrap swap related code by #ifdef VMSWAP. always #define VMSWAP for now. @ text @d1 1 a1 1 /* $NetBSD: uvm_anon.h,v 1.20 2005/07/31 04:04:47 yamt Exp $ */ a42 1 #if 0 /* notyet */ a43 3 #else #define VMSWAP #endif @ 1.20 log @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. @ text @d1 1 a1 1 /* $NetBSD: uvm_anon.h,v 1.19 2005/07/30 06:33:36 yamt Exp $ */ d42 8 d62 1 d66 1 d110 1 d112 3 @ 1.19 log @defflag VMSWAP. @ text @d1 1 a1 1 /* $NetBSD: uvm_anon.h,v 1.18 2005/05/11 13:02:25 yamt Exp $ */ a41 4 #if defined(_KERNEL_OPT) #include "opt_vmswap.h" #endif a53 1 #if defined(VMSWAP) || 1 /* XXX libkvm */ a56 1 #endif /* defined(VMSWAP) */ a99 1 #if defined(VMSWAP) a100 3 #else /* defined(VMSWAP) */ #define uvm_anon_dropswap(a) /* nothing */ #endif /* defined(VMSWAP) */ @ 1.18 log @allocate anons on-demand, rather than reserving static amount of them on boot/swapon. @ text @d1 1 a1 1 /* $NetBSD: uvm_anon.h,v 1.17 2004/05/05 11:54:32 yamt Exp $ */ d42 4 d58 1 d62 1 d106 1 d108 3 @ 1.18.2.1 log @sync with head. @ text @d1 1 a1 1 /* $NetBSD: uvm_anon.h,v 1.18 2005/05/11 13:02:25 yamt Exp $ */ a41 4 #if defined(_KERNEL_OPT) #include "opt_vmswap.h" #endif a53 1 #if defined(VMSWAP) || 1 /* XXX libkvm */ a56 1 #endif /* defined(VMSWAP) */ a99 1 #if defined(VMSWAP) a100 3 #else /* defined(VMSWAP) */ #define uvm_anon_dropswap(a) /* nothing */ #endif /* defined(VMSWAP) */ @ 1.18.2.2 log @sync with head. @ text @d1 1 a1 1 /* $NetBSD: uvm_anon.h,v 1.18.2.1 2006/06/21 15:12:39 yamt Exp $ */ d112 1 a112 1 bool uvm_anon_pagein(struct vm_anon *); @ 1.18.2.3 log @sync with head @ text @d1 1 a1 1 /* $NetBSD: uvm_anon.h,v 1.18.2.2 2007/02/26 09:12:27 yamt Exp $ */ d56 1 a56 1 kmutex_t an_lock; /* lock for an_ref */ @ 1.17 log @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. @ text @d1 1 a1 1 /* $NetBSD: uvm_anon.h,v 1.16 2004/03/24 07:55:01 junyoung Exp $ */ d53 1 a53 4 union { struct vm_anon *an_nxt; /* if on free list [afreelock] */ struct vm_page *an_page;/* if in RAM [an_lock] */ } u; d60 4 a63 6 * a pool of vm_anon data structures is allocated and put on a global * free list at boot time. vm_anon's on the free list use "an_nxt" as * a pointer to the next item on the free list. for active vm_anon's * the data can be in one of the following state: [1] in a vm_page * with no backing store allocated yet, [2] in a vm_page with backing * store allocated, or [3] paged out to backing store (no vm_page). a98 2 int uvm_anon_add(int); void uvm_anon_remove(int); a100 1 boolean_t anon_swap_off(int, int); d102 1 @ 1.16 log @Nuke __P(). @ text @d1 1 a1 1 /* $NetBSD: uvm_anon.h,v 1.15 2001/05/26 16:32:46 chs Exp $ */ d109 1 @ 1.16.2.1 log @Pull up revision 1.17 (requested by yamt in ticket #271): 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. @ text @d1 1 a1 1 /* $NetBSD$ */ a108 1 void uvm_anon_release(struct vm_anon *); @ 1.15 log @replace {simple_,}lock{_data,}_t with struct {simple,}lock {,*}. @ text @d1 1 a1 1 /* $NetBSD: uvm_anon.h,v 1.14 2001/05/25 04:06:12 chs Exp $ */ d101 8 a108 8 struct vm_anon *uvm_analloc __P((void)); void uvm_anfree __P((struct vm_anon *)); void uvm_anon_init __P((void)); int uvm_anon_add __P((int)); void uvm_anon_remove __P((int)); struct vm_page *uvm_anon_lockloanpg __P((struct vm_anon *)); void uvm_anon_dropswap __P((struct vm_anon *)); boolean_t anon_swap_off __P((int, int)); @ 1.15.22.1 log @Sync with HEAD @ text @d1 1 a1 1 /* $NetBSD: uvm_anon.h,v 1.17 2004/05/05 11:54:32 yamt Exp $ */ d101 8 a108 9 struct vm_anon *uvm_analloc(void); void uvm_anfree(struct vm_anon *); void uvm_anon_init(void); int uvm_anon_add(int); void uvm_anon_remove(int); struct vm_page *uvm_anon_lockloanpg(struct vm_anon *); void uvm_anon_dropswap(struct vm_anon *); boolean_t anon_swap_off(int, int); void uvm_anon_release(struct vm_anon *); @ 1.15.22.2 log @Sync with HEAD. @ text @@ 1.15.22.3 log @Fix the sync with head I botched. @ text @d1 1 a1 1 /* $NetBSD: uvm_anon.h,v 1.15.22.1 2004/08/03 10:57:02 skrll Exp $ */ @ 1.15.22.4 log @Sync with HEAD. Here we go again... @ text @d1 1 a1 1 /* $NetBSD: uvm_anon.h,v 1.15.22.3 2004/09/21 13:39:24 skrll Exp $ */ a41 4 #if defined(_KERNEL_OPT) #include "opt_vmswap.h" #endif d53 4 a56 2 struct vm_page *an_page;/* if in RAM [an_lock] */ #if defined(VMSWAP) || 1 /* XXX libkvm */ a59 1 #endif /* defined(VMSWAP) */ d63 6 a68 4 * for active vm_anon's the data can be in one of the following state: * [1] in a vm_page with no backing store allocated yet, [2] in a vm_page * with backing store allocated, or [3] paged out to backing store * (no vm_page). d104 2 a106 1 #if defined(VMSWAP) d108 1 a108 3 #else /* defined(VMSWAP) */ #define uvm_anon_dropswap(a) /* nothing */ #endif /* defined(VMSWAP) */ a109 1 boolean_t uvm_anon_pagein(struct vm_anon *); @ 1.14 log @remove trailing whitespace. @ text @d1 1 a1 1 /* $NetBSD: uvm_anon.h,v 1.13 2000/12/27 09:17:04 chs Exp $ */ d52 1 a52 1 simple_lock_data_t an_lock; /* lock for an_ref */ @ 1.13 log @when we fail to allocate anons to represent new swap space, just return an error rather than panicing. @ text @d1 1 a1 1 /* $NetBSD: uvm_anon.h,v 1.12 2000/01/11 06:57:49 chs Exp $ */ d57 1 a57 1 int an_swslot; /* drum swap slot # (if != 0) d81 1 a81 1 * processes reference anonymous virtual memory maps with an anonymous @ 1.13.2.1 log @Catch up to -current. @ text @d1 1 a1 1 /* $NetBSD: uvm_anon.h,v 1.13 2000/12/27 09:17:04 chs Exp $ */ d52 1 a52 1 struct simplelock an_lock; /* lock for an_ref */ d57 1 a57 1 int an_swslot; /* drum swap slot # (if != 0) d81 1 a81 1 * processes reference anonymous virtual memory maps with an anonymous @ 1.12 log @add support for ``swapctl -d'' (removing swap space). improve handling of i/o errors in swap space. reviewed by: Chuck Cranor @ text @d1 1 a1 1 /* $NetBSD: uvm_anon.h,v 1.11 1999/06/21 17:25:11 thorpej Exp $ */ d104 1 a104 1 void uvm_anon_add __P((int)); @ 1.12.4.1 log @Pull up revision 1.13 (requested by chs): Make memory allocation failures during ``swapctl -a'' return an error instead of causing a panic. @ text @d1 1 a1 1 /* $NetBSD: uvm_anon.h,v 1.12 2000/01/11 06:57:49 chs Exp $ */ d104 1 a104 1 int uvm_anon_add __P((int)); @ 1.11 log @Protect prototypes, certain macros, and inlines from userland. @ text @d1 1 a1 1 /* $NetBSD: uvm_anon.h,v 1.10 1999/03/26 17:34:15 chs Exp $ */ d105 1 d108 1 a108 1 @ 1.11.2.1 log @Update thorpej_scsipi to -current as of a month ago @ text @d1 1 a1 1 /* $NetBSD: uvm_anon.h,v 1.12 2000/01/11 06:57:49 chs Exp $ */ a104 1 void uvm_anon_remove __P((int)); d107 1 a107 1 boolean_t anon_swap_off __P((int, int)); @ 1.11.2.2 log @Sync with HEAD @ text @d1 1 a1 1 /* $NetBSD$ */ d104 1 a104 1 int uvm_anon_add __P((int)); @ 1.10 log @add uvmexp.swpgonly and use it to detect out-of-swap conditions. @ text @d1 1 a1 1 /* $NetBSD: uvm_anon.h,v 1.9 1999/01/24 23:53:15 chuck Exp $ */ d95 2 d107 2 @ 1.10.4.1 log @Sync w/ -current. @ text @d1 1 a1 1 /* $NetBSD: uvm_anon.h,v 1.11 1999/06/21 17:25:11 thorpej Exp $ */ a94 2 #ifdef _KERNEL a104 2 #endif /* _KERNEL */ @ 1.9 log @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) @ text @d1 1 a1 1 /* $NetBSD: uvm_anon.h,v 1.8 1998/11/20 19:37:06 chuck Exp $ */ d104 1 @ 1.8 log @update outdated an_swslot comments @ text @d1 1 a1 1 /* $NetBSD: uvm_anon.h,v 1.7 1998/03/09 00:58:56 mrg Exp $ */ a3 4 * XXXCDC: "ROUGH DRAFT" QUALITY UVM PRE-RELEASE FILE! * >>>USE AT YOUR OWN RISK, WORK IS NOT FINISHED<<< */ /* a32 2 * * from: Id: uvm_anon.h,v 1.1.2.4 1998/01/04 22:43:39 chuck Exp d76 2 a77 50 * anonymous virtual memory pages (vm_anon's) live in anonymous memory * maps. anonymous memory maps can be shared between processes. * different subsets of an anonymous memory map can be referenced by * processes (see below). an anonymous map is described by the following * data structure: */ #define VM_AMAP_PPREF /* use a per-page reference count for split vm_map_entry_t's. */ struct vm_amap { simple_lock_data_t am_l; /* simple lock [locks all vm_amap fields] */ int am_ref; /* reference count */ int am_flags; /* flags */ int am_maxslot; /* max # of slots allocated */ int am_nslot; /* # of slots currently in map ( <= maxslot) */ int am_nused; /* # of slots currently in use */ int *am_slots; /* contig array of active slots */ int *am_bckptr; /* back pointer array to am_slots */ struct vm_anon **am_anon; /* array of anonymous pages */ #ifdef VM_AMAP_PPREF int *am_ppref; /* per page reference count (if !NULL) */ #endif }; #define AMAP_SHARED 0x1 /* am_flags: shared amap */ #define AMAP_REFALL 0x2 /* flag to amap_ref() */ /* * note that am_slots, am_bckptr, and am_anon are arrays. this allows * fast lookup of pages based on their virual address at the expense of * some extra memory. [XXX: for memory starved systems provide alternate * functions?] * * 4 slot/page example, with slots 1 and 3 in use: * ("D/C" == don't care what the value is) * * 0 1 2 3 * am_anon: NULL, anon0, NULL, anon1 (actual pointers to anons) * am_bckptr: D/C, 1, D/C, 0 (points to am_slots entry) * * am_slots: 3, 1, D/C, D/C (says slots 3 and 1 are in use) * * note that am_bckptr is D/C if the slot in am_anon is set to NULL. * to find the entry in am_slots for an anon, look at am_bckptr[slot], * thus the entry for slot 3 in am_slots[] is at am_slots[am_bckptr[3]]. * in general, if am_anon[X] is non-NULL, then the following must be * true: am_slots[am_bckptr[X]] == X * * note that am_slots is always contig-packed. d86 1 a86 1 int ar_slotoff; /* slot offset into amap we start */ d95 9 @ 1.7 log @KNF. @ text @d1 1 a1 1 /* $NetBSD: uvm_anon.h,v 1.6 1998/03/01 02:25:28 fvdl Exp $ */ d61 1 a61 1 struct vm_page *an_page;/* if in RAM [pageqlock] */ d63 3 a65 1 int an_swslot; /* drum swap slot # (if != 0) [pageqlock] */ @ 1.6 log @Merge with Lite2 + local changes @ text @d1 1 a1 1 /* $NetBSD: uvm_anon.h,v 1.5 1998/02/10 02:34:25 perry Exp $ */ d131 1 a131 1 @ 1.5 log @add/cleanup multiple inclusion protection. @ text @d1 1 a1 1 /* $NetBSD: uvm_anon.h,v 1.4 1998/02/09 04:05:36 mrg Exp $ */ a57 1 #if NCPU > 1 a58 1 #endif a90 1 #if NCPU > 1 a91 1 #endif @ 1.4 log @KNF. @ text @d1 1 a1 1 /* $NetBSD: uvm_anon.h,v 1.3 1998/02/07 11:08:04 mrg Exp $ */ d41 3 d151 2 @ 1.3 log @restore rcsids @ text @d1 1 a1 1 /* $NetBSD$ */ d4 1 a4 1 * XXXCDC: "ROUGH DRAFT" QUALITY UVM PRE-RELEASE FILE! d54 1 a54 1 int an_ref; /* reference count [an_lock] */ d56 1 a56 1 simple_lock_data_t an_lock; /* lock for an_ref */ d58 5 a62 5 union { struct vm_anon *an_nxt; /* if on free list [afreelock] */ struct vm_page *an_page; /* if in RAM [pageqlock] */ } u; int an_swslot; /* drum swap slot # (if != 0) [pageqlock] */ d91 1 a91 1 simple_lock_data_t am_l; /* simple lock [locks all vm_amap fields] */ d93 8 a100 8 int am_ref; /* reference count */ int am_flags; /* flags */ int am_maxslot; /* max # of slots allocated */ int am_nslot; /* # of slots currently in map ( <= maxslot) */ int am_nused; /* # of slots currently in use */ int *am_slots; /* contig array of active slots */ int *am_bckptr; /* back pointer array to am_slots */ struct vm_anon **am_anon; /* array of anonymous pages */ d102 1 a102 1 int *am_ppref; /* per page reference count (if !NULL) */ d139 2 a140 2 int ar_slotoff; /* slot offset into amap we start */ struct vm_amap *ar_amap; /* pointer to amap */ @ 1.2 log @RCS ID police. @ text @d37 2 @ 1.1 log @Initial revision @ text @d1 1 a1 1 /* $Id: uvm_anon.h,v 1.1.2.4 1998/01/04 22:43:39 chuck Exp $ */ @ 1.1.1.1 log @initial import of the new virtual memory system, UVM, into -current. UVM was written by chuck cranor , with some minor portions derived from the old Mach code. i provided some help getting swap and paging working, and other bug fixes/ideas. chuck silvers also provided some other fixes. this is the UVM kernel code portion. this will be KNF'd shortly. :-) @ text @@