head 1.49; access; symbols netbsd-10-0-RELEASE:1.49 netbsd-10-0-RC6:1.49 netbsd-10-0-RC5:1.49 netbsd-10-0-RC4:1.49 netbsd-10-0-RC3:1.49 netbsd-10-0-RC2:1.49 thorpej-ifq:1.49.0.24 thorpej-ifq-base:1.49 thorpej-altq-separation:1.49.0.22 thorpej-altq-separation-base:1.49 netbsd-10-0-RC1:1.49 netbsd-10:1.49.0.20 netbsd-10-base:1.49 bouyer-sunxi-drm:1.49.0.18 bouyer-sunxi-drm-base:1.49 netbsd-9-3-RELEASE:1.45 thorpej-i2c-spi-conf2:1.49.0.16 thorpej-i2c-spi-conf2-base:1.49 thorpej-futex2:1.49.0.14 thorpej-futex2-base:1.49 thorpej-cfargs2:1.49.0.12 thorpej-cfargs2-base:1.49 cjep_sun2x-base1:1.49 cjep_sun2x:1.49.0.10 cjep_sun2x-base:1.49 cjep_staticlib_x-base1:1.49 netbsd-9-2-RELEASE:1.45 cjep_staticlib_x:1.49.0.8 cjep_staticlib_x-base:1.49 thorpej-i2c-spi-conf:1.49.0.6 thorpej-i2c-spi-conf-base:1.49 thorpej-cfargs:1.49.0.4 thorpej-cfargs-base:1.49 thorpej-futex:1.49.0.2 thorpej-futex-base:1.49 netbsd-9-1-RELEASE:1.45 bouyer-xenpvh-base2:1.47 phil-wifi-20200421:1.47 bouyer-xenpvh-base1:1.47 phil-wifi-20200411:1.47 bouyer-xenpvh:1.47.0.2 bouyer-xenpvh-base:1.47 is-mlppp:1.45.0.8 is-mlppp-base:1.45 phil-wifi-20200406:1.47 netbsd-8-2-RELEASE:1.44 ad-namecache-base3:1.45 netbsd-9-0-RELEASE:1.45 netbsd-9-0-RC2:1.45 ad-namecache-base2:1.45 ad-namecache-base1:1.45 ad-namecache:1.45.0.6 ad-namecache-base:1.45 netbsd-9-0-RC1:1.45 phil-wifi-20191119:1.45 netbsd-9:1.45.0.4 netbsd-9-base:1.45 phil-wifi-20190609:1.45 netbsd-8-1-RELEASE:1.44 netbsd-8-1-RC1:1.44 isaki-audio2:1.45.0.2 isaki-audio2-base:1.45 pgoyette-compat-merge-20190127:1.44.14.1 pgoyette-compat-20190127:1.45 pgoyette-compat-20190118:1.45 pgoyette-compat-1226:1.45 pgoyette-compat-1126:1.44 pgoyette-compat-1020:1.44 pgoyette-compat-0930:1.44 pgoyette-compat-0906:1.44 netbsd-7-2-RELEASE:1.43 pgoyette-compat-0728:1.44 netbsd-8-0-RELEASE:1.44 phil-wifi:1.44.0.16 phil-wifi-base:1.44 pgoyette-compat-0625:1.44 netbsd-8-0-RC2:1.44 pgoyette-compat-0521:1.44 pgoyette-compat-0502:1.44 pgoyette-compat-0422:1.44 netbsd-8-0-RC1:1.44 pgoyette-compat-0415:1.44 pgoyette-compat-0407:1.44 pgoyette-compat-0330:1.44 pgoyette-compat-0322:1.44 pgoyette-compat-0315:1.44 netbsd-7-1-2-RELEASE:1.43 pgoyette-compat:1.44.0.14 pgoyette-compat-base:1.44 netbsd-7-1-1-RELEASE:1.43 tls-maxphys-base-20171202:1.44 matt-nb8-mediatek:1.44.0.12 matt-nb8-mediatek-base:1.44 nick-nhusb-base-20170825:1.44 perseant-stdc-iso10646:1.44.0.10 perseant-stdc-iso10646-base:1.44 netbsd-8:1.44.0.8 netbsd-8-base:1.44 prg-localcount2-base3:1.44 prg-localcount2-base2:1.44 prg-localcount2-base1:1.44 prg-localcount2:1.44.0.6 prg-localcount2-base:1.44 pgoyette-localcount-20170426:1.44 bouyer-socketcan-base1:1.44 jdolecek-ncq:1.44.0.4 jdolecek-ncq-base:1.44 pgoyette-localcount-20170320:1.44 netbsd-7-1:1.43.0.24 netbsd-7-1-RELEASE:1.43 netbsd-7-1-RC2:1.43 nick-nhusb-base-20170204:1.44 netbsd-7-nhusb-base-20170116:1.43 bouyer-socketcan:1.44.0.2 bouyer-socketcan-base:1.44 pgoyette-localcount-20170107:1.43 netbsd-7-1-RC1:1.43 nick-nhusb-base-20161204:1.43 pgoyette-localcount-20161104:1.43 netbsd-7-0-2-RELEASE:1.43 nick-nhusb-base-20161004:1.43 localcount-20160914:1.43 netbsd-7-nhusb:1.43.0.22 netbsd-7-nhusb-base:1.43 pgoyette-localcount-20160806:1.43 pgoyette-localcount-20160726:1.43 pgoyette-localcount:1.43.0.20 pgoyette-localcount-base:1.43 nick-nhusb-base-20160907:1.43 nick-nhusb-base-20160529:1.43 netbsd-7-0-1-RELEASE:1.43 nick-nhusb-base-20160422:1.43 nick-nhusb-base-20160319:1.43 nick-nhusb-base-20151226:1.43 netbsd-7-0:1.43.0.18 netbsd-7-0-RELEASE:1.43 nick-nhusb-base-20150921:1.43 netbsd-7-0-RC3:1.43 netbsd-7-0-RC2:1.43 netbsd-7-0-RC1:1.43 nick-nhusb-base-20150606:1.43 nick-nhusb-base-20150406:1.43 nick-nhusb:1.43.0.16 nick-nhusb-base:1.43 netbsd-5-2-3-RELEASE:1.38.4.1 netbsd-5-1-5-RELEASE:1.38.4.1 netbsd-6-0-6-RELEASE:1.42.8.1 netbsd-6-1-5-RELEASE:1.42.8.1 netbsd-7:1.43.0.14 netbsd-7-base:1.43 yamt-pagecache-base9:1.43 yamt-pagecache-tag8:1.42.2.1 netbsd-6-1-4-RELEASE:1.42.8.1 netbsd-6-0-5-RELEASE:1.42.8.1 tls-earlyentropy:1.43.0.12 tls-earlyentropy-base:1.43 riastradh-xf86-video-intel-2-7-1-pre-2-21-15:1.43 riastradh-drm2-base3:1.43 netbsd-6-1-3-RELEASE:1.42.8.1 netbsd-6-0-4-RELEASE:1.42.8.1 netbsd-5-2-2-RELEASE:1.38.4.1 netbsd-5-1-4-RELEASE:1.38.4.1 netbsd-6-1-2-RELEASE:1.42.8.1 netbsd-6-0-3-RELEASE:1.42.8.1 netbsd-5-2-1-RELEASE:1.38.4.1 netbsd-5-1-3-RELEASE:1.38.4.1 rmind-smpnet-nbase:1.43 netbsd-6-1-1-RELEASE:1.42.8.1 riastradh-drm2-base2:1.43 riastradh-drm2-base1:1.43 riastradh-drm2:1.43.0.10 riastradh-drm2-base:1.43 rmind-smpnet:1.43.0.4 rmind-smpnet-base:1.43 netbsd-6-1:1.42.8.1.0.6 netbsd-6-0-2-RELEASE:1.42.8.1 netbsd-6-1-RELEASE:1.42.8.1 khorben-n900:1.43.0.8 netbsd-6-1-RC4:1.42.8.1 netbsd-6-1-RC3:1.42.8.1 agc-symver:1.43.0.6 agc-symver-base:1.43 netbsd-6-1-RC2:1.42.8.1 netbsd-6-1-RC1:1.42.8.1 yamt-pagecache-base8:1.43 netbsd-5-2:1.38.4.1.0.6 netbsd-6-0-1-RELEASE:1.42.8.1 yamt-pagecache-base7:1.43 netbsd-5-2-RELEASE:1.38.4.1 netbsd-5-2-RC1:1.38.4.1 matt-nb6-plus-nbase:1.42.8.1 yamt-pagecache-base6:1.43 netbsd-6-0:1.42.8.1.0.4 netbsd-6-0-RELEASE:1.42.8.1 netbsd-6-0-RC2:1.42.8.1 tls-maxphys:1.43.0.2 tls-maxphys-base:1.43 matt-nb6-plus:1.42.8.1.0.2 matt-nb6-plus-base:1.42.8.1 netbsd-6-0-RC1:1.42.8.1 jmcneill-usbmp-base10:1.43 yamt-pagecache-base5:1.43 jmcneill-usbmp-base9:1.42 yamt-pagecache-base4:1.42 jmcneill-usbmp-base8:1.42 jmcneill-usbmp-base7:1.42 jmcneill-usbmp-base6:1.42 jmcneill-usbmp-base5:1.42 jmcneill-usbmp-base4:1.42 jmcneill-usbmp-base3:1.42 jmcneill-usbmp-pre-base2:1.42 jmcneill-usbmp-base2:1.42 netbsd-6:1.42.0.8 netbsd-6-base:1.42 netbsd-5-1-2-RELEASE:1.38.4.1 netbsd-5-1-1-RELEASE:1.38.4.1 jmcneill-usbmp:1.42.0.6 jmcneill-usbmp-base:1.42 jmcneill-audiomp3:1.42.0.4 jmcneill-audiomp3-base:1.42 yamt-pagecache-base3:1.42 yamt-pagecache-base2:1.42 yamt-pagecache:1.42.0.2 yamt-pagecache-base:1.42 rmind-uvmplock-nbase:1.41 cherry-xenmp:1.41.0.2 cherry-xenmp-base:1.41 uebayasi-xip-base7:1.41 bouyer-quota2-nbase:1.41 bouyer-quota2:1.39.0.4 bouyer-quota2-base:1.41 jruoho-x86intr:1.39.0.2 jruoho-x86intr-base:1.39 matt-mips64-premerge-20101231:1.39 matt-nb5-mips64-premerge-20101231:1.38 matt-nb5-pq3:1.38.4.1.0.4 matt-nb5-pq3-base:1.38.4.1 netbsd-5-1:1.38.4.1.0.2 uebayasi-xip-base6:1.39 uebayasi-xip-base5:1.39 netbsd-5-1-RELEASE:1.38.4.1 uebayasi-xip-base4:1.39 uebayasi-xip-base3:1.39 yamt-nfs-mp-base11:1.39 netbsd-5-1-RC4:1.38.4.1 matt-nb5-mips64-k15:1.38 uebayasi-xip-base2:1.38 yamt-nfs-mp-base10:1.38 netbsd-5-1-RC3:1.38 netbsd-5-1-RC2:1.38 uebayasi-xip-base1:1.38 netbsd-5-1-RC1:1.38 rmind-uvmplock:1.38.0.16 rmind-uvmplock-base:1.41 yamt-nfs-mp-base9:1.38 uebayasi-xip:1.38.0.14 uebayasi-xip-base:1.38 netbsd-5-0-2-RELEASE:1.38 matt-nb5-mips64-premerge-20091211:1.38 matt-premerge-20091211:1.38 yamt-nfs-mp-base8:1.38 matt-nb5-mips64-u2-k2-k4-k7-k8-k9:1.38 matt-nb4-mips64-k7-u2a-k9b:1.38 matt-nb5-mips64-u1-k1-k5:1.38 yamt-nfs-mp-base7:1.38 matt-nb5-mips64:1.38.0.12 netbsd-5-0-1-RELEASE:1.38 jymxensuspend-base:1.38 yamt-nfs-mp-base6:1.38 yamt-nfs-mp-base5:1.38 yamt-nfs-mp-base4:1.38 jym-xensuspend-nbase:1.38 yamt-nfs-mp-base3:1.38 nick-hppapmap-base4:1.38 nick-hppapmap-base3:1.38 netbsd-5-0:1.38.0.10 netbsd-5-0-RELEASE:1.38 netbsd-5-0-RC4:1.38 netbsd-5-0-RC3:1.38 nick-hppapmap-base2:1.38 netbsd-5-0-RC2:1.38 jym-xensuspend:1.38.0.8 jym-xensuspend-base:1.38 netbsd-5-0-RC1:1.38 haad-dm-base2:1.38 haad-nbase2:1.38 ad-audiomp2:1.38.0.6 ad-audiomp2-base:1.38 netbsd-5:1.38.0.4 netbsd-5-base:1.38 nick-hppapmap:1.38.0.2 nick-hppapmap-base:1.38 matt-mips64-base2:1.38 matt-mips64:1.36.0.14 haad-dm-base1:1.38 wrstuden-revivesa-base-4:1.38 netbsd-4-0-1-RELEASE:1.34.18.1 wrstuden-revivesa-base-3:1.38 wrstuden-revivesa-base-2:1.38 wrstuden-fixsa-newbase:1.34.18.1 nick-csl-alignment-base5:1.36 haad-dm:1.37.0.26 haad-dm-base:1.38 wrstuden-revivesa-base-1:1.37 simonb-wapbl-nbase:1.37 yamt-pf42-base4:1.37 simonb-wapbl:1.37.0.24 simonb-wapbl-base:1.37 yamt-pf42-base3:1.37 hpcarm-cleanup-nbase:1.37 yamt-pf42-baseX:1.37 yamt-pf42-base2:1.37 yamt-nfs-mp-base2:1.37 wrstuden-revivesa:1.37.0.22 wrstuden-revivesa-base:1.37 yamt-nfs-mp:1.37.0.20 yamt-nfs-mp-base:1.37 yamt-pf42:1.37.0.18 yamt-pf42-base:1.37 ad-socklock-base1:1.37 yamt-lazymbuf-base15:1.37 yamt-lazymbuf-base14:1.37 keiichi-mipv6-nbase:1.37 mjf-devfs2:1.37.0.16 mjf-devfs2-base:1.38 nick-net80211-sync:1.37.0.14 nick-net80211-sync-base:1.37 keiichi-mipv6:1.37.0.12 keiichi-mipv6-base:1.37 bouyer-xeni386-merge1:1.37 matt-armv6-prevmlocking:1.36.8.1 wrstuden-fixsa-base-1:1.34.18.1 vmlocking2-base3:1.37 netbsd-4-0:1.34.18.1.0.6 netbsd-4-0-RELEASE:1.34.18.1 bouyer-xeni386-nbase:1.37 yamt-kmem-base3:1.37 cube-autoconf:1.37.0.10 cube-autoconf-base:1.37 yamt-kmem-base2:1.37 bouyer-xeni386:1.37.0.8 bouyer-xeni386-base:1.37 yamt-kmem:1.37.0.6 yamt-kmem-base:1.37 vmlocking2-base2:1.37 reinoud-bufcleanup-nbase:1.37 vmlocking2:1.37.0.4 vmlocking2-base1:1.37 netbsd-4-0-RC5:1.34.18.1 matt-nb4-arm:1.34.18.1.0.4 matt-nb4-arm-base:1.34.18.1 matt-armv6-nbase:1.37 jmcneill-base:1.37 netbsd-4-0-RC4:1.34.18.1 mjf-devfs:1.37.0.2 mjf-devfs-base:1.37 bouyer-xenamd64-base2:1.37 vmlocking-nbase:1.37 yamt-x86pmap-base4:1.36 bouyer-xenamd64:1.36.0.12 bouyer-xenamd64-base:1.37 netbsd-4-0-RC3:1.34.18.1 yamt-x86pmap-base3:1.36 yamt-x86pmap-base2:1.36 netbsd-4-0-RC2:1.34.18.1 yamt-x86pmap:1.36.0.10 yamt-x86pmap-base:1.36 netbsd-4-0-RC1:1.34.18.1 matt-armv6:1.36.0.8 matt-armv6-base:1.37 matt-mips64-base:1.36 jmcneill-pm:1.36.0.6 jmcneill-pm-base:1.37 hpcarm-cleanup:1.36.0.4 hpcarm-cleanup-base:1.37 nick-csl-alignment:1.36.0.2 nick-csl-alignment-base:1.36 netbsd-3-1-1-RELEASE:1.28.14.1 netbsd-3-0-3-RELEASE:1.28.14.1 yamt-idlelwp-base8:1.36 wrstuden-fixsa:1.34.18.1.0.2 wrstuden-fixsa-base:1.34.18.1 thorpej-atomic:1.34.0.30 thorpej-atomic-base:1.34 reinoud-bufcleanup:1.34.0.28 reinoud-bufcleanup-base:1.37 mjf-ufs-trans:1.34.0.26 mjf-ufs-trans-base:1.36 vmlocking:1.34.0.24 vmlocking-base:1.36 ad-audiomp:1.34.0.22 ad-audiomp-base:1.34 yamt-idlelwp:1.34.0.20 post-newlock2-merge:1.34 newlock2-nbase:1.34 yamt-splraiseipl-base5:1.34 yamt-splraiseipl-base4:1.34 yamt-splraiseipl-base3:1.34 abandoned-netbsd-4-base:1.34 abandoned-netbsd-4:1.34.0.12 netbsd-3-1:1.28.14.1.0.4 netbsd-3-1-RELEASE:1.28.14.1 netbsd-3-0-2-RELEASE:1.28.14.1 yamt-splraiseipl-base2:1.34 netbsd-3-1-RC4:1.28.14.1 yamt-splraiseipl:1.34.0.16 yamt-splraiseipl-base:1.34 netbsd-3-1-RC3:1.28.14.1 yamt-pdpolicy-base9:1.34 newlock2:1.34.0.14 newlock2-base:1.34 yamt-pdpolicy-base8:1.34 netbsd-3-1-RC2:1.28.14.1 netbsd-3-1-RC1:1.28.14.1 yamt-pdpolicy-base7:1.34 netbsd-4:1.34.0.18 netbsd-4-base:1.34 yamt-pdpolicy-base6:1.34 chap-midi-nbase:1.34 netbsd-3-0-1-RELEASE:1.28.14.1 gdamore-uart:1.34.0.10 gdamore-uart-base:1.34 simonb-timcounters-final:1.32.6.1 yamt-pdpolicy-base5:1.34 chap-midi:1.34.0.8 chap-midi-base:1.34 yamt-pdpolicy-base4:1.34 yamt-pdpolicy-base3:1.34 peter-altq-base:1.34 peter-altq:1.34.0.6 yamt-pdpolicy-base2:1.34 elad-kernelauth-base:1.34 elad-kernelauth:1.34.0.4 yamt-pdpolicy:1.34.0.2 yamt-pdpolicy-base:1.34 yamt-uio_vmspace-base5:1.34 simonb-timecounters:1.32.0.6 simonb-timecounters-base:1.34 rpaulo-netinet-merge-pcb:1.32.0.4 rpaulo-netinet-merge-pcb-base:1.34 yamt-uio_vmspace:1.32.0.2 netbsd-3-0:1.28.14.1.0.2 netbsd-3-0-RELEASE:1.28.14.1 netbsd-3-0-RC6:1.28.14.1 yamt-readahead-base3:1.30 netbsd-3-0-RC5:1.28.14.1 netbsd-3-0-RC4:1.28.14.1 netbsd-3-0-RC3:1.28.14.1 yamt-readahead-base2:1.30 netbsd-3-0-RC2:1.28.14.1 yamt-readahead-pervnode:1.30 yamt-readahead-perfile:1.30 yamt-readahead:1.30.0.6 yamt-readahead-base:1.30 netbsd-3-0-RC1:1.28.14.1 yamt-vop-base3:1.30 netbsd-2-0-3-RELEASE:1.28 netbsd-2-1:1.28.0.18 yamt-vop-base2:1.30 thorpej-vnode-attr:1.30.0.4 thorpej-vnode-attr-base:1.30 netbsd-2-1-RELEASE:1.28 yamt-vop:1.30.0.2 yamt-vop-base:1.30 netbsd-2-1-RC6:1.28 netbsd-2-1-RC5:1.28 netbsd-2-1-RC4:1.28 netbsd-2-1-RC3:1.28 netbsd-2-1-RC2:1.28 netbsd-2-1-RC1:1.28 yamt-lazymbuf:1.28.0.16 yamt-km-base4:1.28 netbsd-2-0-2-RELEASE:1.28 yamt-km-base3:1.28 netbsd-3:1.28.0.14 netbsd-3-base:1.28 yamt-km-base2:1.28 yamt-km:1.28.0.10 yamt-km-base:1.28 kent-audio2:1.28.0.8 kent-audio2-base:1.28 netbsd-2-0-1-RELEASE:1.28 kent-audio1-beforemerge:1.28 netbsd-2:1.28.0.6 netbsd-2-base:1.28 kent-audio1:1.28.0.4 kent-audio1-base:1.28 netbsd-2-0-RELEASE:1.28 netbsd-2-0-RC5:1.28 netbsd-2-0-RC4:1.28 netbsd-2-0-RC3:1.28 netbsd-2-0-RC2:1.28 netbsd-2-0-RC1:1.28 netbsd-2-0:1.28.0.2 netbsd-2-0-base:1.28 netbsd-1-6-PATCH002-RELEASE:1.25 netbsd-1-6-PATCH002:1.25 netbsd-1-6-PATCH002-RC4:1.25 netbsd-1-6-PATCH002-RC3:1.25 netbsd-1-6-PATCH002-RC2:1.25 netbsd-1-6-PATCH002-RC1:1.25 ktrace-lwp:1.26.0.2 ktrace-lwp-base:1.30 netbsd-1-6-PATCH001:1.25 netbsd-1-6-PATCH001-RELEASE:1.25 netbsd-1-6-PATCH001-RC3:1.25 netbsd-1-6-PATCH001-RC2:1.25 netbsd-1-6-PATCH001-RC1:1.25 nathanw_sa_end:1.20.2.4 nathanw_sa_before_merge:1.25 fvdl_fs64_base:1.25 gmcgarry_ctxsw:1.25.0.8 gmcgarry_ctxsw_base:1.25 gmcgarry_ucred:1.25.0.6 gmcgarry_ucred_base:1.25 nathanw_sa_base:1.25 kqueue-aftermerge:1.25 kqueue-beforemerge:1.25 netbsd-1-6-RELEASE:1.25 netbsd-1-6-RC3:1.25 netbsd-1-6-RC2:1.25 netbsd-1-6-RC1:1.25 netbsd-1-6:1.25.0.4 netbsd-1-6-base:1.25 gehenna-devsw:1.25.0.2 gehenna-devsw-base:1.25 netbsd-1-5-PATCH003:1.15 eeh-devprop:1.24.0.8 eeh-devprop-base:1.24 newlock:1.24.0.6 newlock-base:1.24 ifpoll-base:1.24 thorpej-mips-cache:1.24.0.2 thorpej-mips-cache-base:1.24 thorpej-devvp-base3:1.24 thorpej-devvp-base2:1.24 post-chs-ubcperf:1.24 pre-chs-ubcperf:1.23 thorpej-devvp:1.23.0.4 thorpej-devvp-base:1.23 netbsd-1-5-PATCH002:1.15 kqueue:1.23.0.2 kqueue-base:1.25 netbsd-1-5-PATCH001:1.15 thorpej_scsipi_beforemerge:1.21 nathanw_sa:1.20.0.2 thorpej_scsipi_nbase:1.21 netbsd-1-5-RELEASE:1.15 netbsd-1-5-BETA2:1.15 netbsd-1-5-BETA:1.15 netbsd-1-4-PATCH003:1.9 netbsd-1-5-ALPHA2:1.15 netbsd-1-5:1.15.0.4 netbsd-1-5-base:1.15 minoura-xpg4dl-base:1.15 minoura-xpg4dl:1.15.0.2 netbsd-1-4-PATCH002:1.9 chs-ubc2-newbase:1.11 wrstuden-devbsize-19991221:1.10 wrstuden-devbsize:1.10.0.8 wrstuden-devbsize-base:1.10 kame_141_19991130:1.9 comdex-fall-1999:1.10.0.6 comdex-fall-1999-base:1.10 fvdl-softdep:1.10.0.4 fvdl-softdep-base:1.10 thorpej_scsipi:1.10.0.2 thorpej_scsipi_base:1.21 netbsd-1-4-PATCH001:1.9 kame_14_19990705:1.9 kame_14_19990628:1.9 kame:1.9.0.6 chs-ubc2:1.9.0.4 chs-ubc2-base:1.10 netbsd-1-4-RELEASE:1.9 netbsd-1-4:1.9.0.2 netbsd-1-4-base:1.9 kenh-if-detach:1.7.0.4 kenh-if-detach-base:1.7 chs-ubc:1.7.0.2 chs-ubc-base:1.7 eeh-paddr_t:1.6.0.2 eeh-paddr_t-base:1.6 uvm980205:1.1.1.1 CDC:1.1.1; locks; strict; comment @ * @; 1.49 date 2020.05.19.22.22.15; author ad; state Exp; branches; next 1.48; commitid WQMv6F9qwLT9WT8C; 1.48 date 2020.05.17.19.38.17; author ad; state Exp; branches; next 1.47; commitid FiAlpnsCLn1P6D8C; 1.47 date 2020.03.22.18.32.42; author ad; state Exp; branches; next 1.46; commitid GrnnOJcv6kiTxq1C; 1.46 date 2020.03.14.20.45.23; author ad; state Exp; branches; next 1.45; commitid bF939dNKuAUmxp0C; 1.45 date 2018.12.09.20.33.04; author jdolecek; state Exp; branches; next 1.44; commitid 1wKkFXhkNoQRha3B; 1.44 date 2017.01.13.04.43.16; author christos; state Exp; branches 1.44.14.1 1.44.16.1; next 1.43; 1.43 date 2012.04.29.22.54.01; author chs; state Exp; branches 1.43.2.1 1.43.16.1 1.43.20.1; next 1.42; 1.42 date 2011.09.28.22.52.15; author matt; state Exp; branches 1.42.2.1 1.42.6.1 1.42.8.1; next 1.41; 1.41 date 2011.02.02.20.07.25; author chuck; state Exp; branches; next 1.40; 1.40 date 2011.02.02.15.13.34; author chuck; state Exp; branches; next 1.39; 1.39 date 2010.09.01.16.56.19; author chs; state Exp; branches 1.39.2.1 1.39.4.1; next 1.38; 1.38 date 2008.08.22.10.48.22; author hannken; state Exp; branches 1.38.4.1 1.38.10.1 1.38.12.1 1.38.14.1 1.38.16.1; next 1.37; 1.37 date 2007.10.25.13.03.06; author yamt; state Exp; branches 1.37.16.1 1.37.20.1 1.37.22.1 1.37.26.1; next 1.36; 1.36 date 2007.04.23.20.10.50; author pooka; state Exp; branches 1.36.6.1 1.36.8.1 1.36.12.1; next 1.35; 1.35 date 2007.04.16.05.14.54; author chs; state Exp; branches; next 1.34; 1.34 date 2006.02.22.22.28.18; author drochner; state Exp; branches 1.34.18.1 1.34.20.1 1.34.24.1 1.34.26.1; next 1.33; 1.33 date 2006.02.11.12.45.07; author yamt; state Exp; branches; next 1.32; 1.32 date 2005.12.24.20.45.10; author perry; state Exp; branches 1.32.2.1 1.32.4.1 1.32.6.1; next 1.31; 1.31 date 2005.12.11.12.25.29; author christos; state Exp; branches; next 1.30; 1.30 date 2005.07.23.12.18.41; author yamt; state Exp; branches; next 1.29; 1.29 date 2005.07.17.09.13.35; author yamt; state Exp; branches; next 1.28; 1.28 date 2004.03.24.07.55.01; author junyoung; state Exp; branches 1.28.14.1 1.28.16.1; next 1.27; 1.27 date 2003.08.07.16.34.49; author agc; state Exp; branches; next 1.26; 1.26 date 2003.02.17.23.48.24; author perseant; state Exp; branches 1.26.2.1; next 1.25; 1.25 date 2002.03.25.02.08.10; author chs; state Exp; branches; next 1.24; 1.24 date 2001.09.15.20.36.47; author chs; state Exp; branches; next 1.23; 1.23 date 2001.05.26.21.27.21; author chs; state Exp; branches 1.23.2.1 1.23.4.1; next 1.22; 1.22 date 2001.05.25.04.06.16; author chs; state Exp; branches; next 1.21; 1.21 date 2001.03.10.22.46.50; author chs; state Exp; branches; next 1.20; 1.20 date 2000.11.27.08.40.05; author chs; state Exp; branches 1.20.2.1; next 1.19; 1.19 date 2000.11.27.08.19.51; author chs; state Exp; branches; next 1.18; 1.18 date 2000.11.24.22.41.39; author chs; state Exp; branches; next 1.17; 1.17 date 2000.11.24.20.34.01; author chs; state Exp; branches; next 1.16; 1.16 date 2000.06.26.14.21.18; author mrg; state Exp; branches; next 1.15; 1.15 date 2000.05.19.03.45.04; author thorpej; state Exp; branches; next 1.14; 1.14 date 2000.04.03.08.09.02; author chs; state Exp; branches; next 1.13; 1.13 date 2000.04.03.07.35.24; author chs; state Exp; branches; next 1.12; 1.12 date 2000.03.26.20.54.47; author kleink; state Exp; branches; next 1.11; 1.11 date 2000.01.11.06.57.50; author chs; state Exp; branches; next 1.10; 1.10 date 99.06.21.17.25.12; author thorpej; state Exp; branches 1.10.2.1; next 1.9; 1.9 date 99.03.25.18.48.55; author mrg; state Exp; branches 1.9.4.1; next 1.8; 1.8 date 99.03.24.03.45.28; author cgd; state Exp; branches; next 1.7; 1.7 date 98.08.13.02.11.03; author eeh; state Exp; branches 1.7.2.1; next 1.6; 1.6 date 98.03.09.00.58.58; author mrg; state Exp; branches 1.6.2.1; next 1.5; 1.5 date 98.02.10.14.12.26; author mrg; state Exp; branches; next 1.4; 1.4 date 98.02.10.02.34.56; author perry; state Exp; branches; next 1.3; 1.3 date 98.02.07.11.09.29; author mrg; state Exp; branches; next 1.2; 1.2 date 98.02.06.22.32.20; author thorpej; state Exp; branches; next 1.1; 1.1 date 98.02.05.06.25.09; author mrg; state Exp; branches 1.1.1.1; next ; 1.44.14.1 date 2018.12.26.14.02.08; author pgoyette; state Exp; branches; next ; commitid xUhK8IAeBM1azj5B; 1.44.16.1 date 2019.06.10.22.09.58; author christos; state Exp; branches; next 1.44.16.2; commitid jtc8rnCzWiEEHGqB; 1.44.16.2 date 2020.04.08.14.09.04; author martin; state Exp; branches; next ; commitid Qli2aW9E74UFuA3C; 1.43.2.1 date 2017.12.03.11.39.22; author jdolecek; state Exp; branches; next ; commitid XcIYRZTAh1LmerhA; 1.43.16.1 date 2017.02.05.13.41.01; author skrll; state Exp; branches; next ; 1.43.20.1 date 2017.03.20.06.57.54; author pgoyette; state Exp; branches; next ; 1.42.2.1 date 2012.05.23.10.08.20; author yamt; state Exp; branches; next ; 1.42.6.1 date 2012.06.02.11.09.42; author mrg; state Exp; branches; next ; 1.42.8.1 date 2012.05.07.03.01.13; author riz; state Exp; branches; next ; 1.39.2.1 date 2011.06.06.09.10.23; author jruoho; state Exp; branches; next ; 1.39.4.1 date 2011.02.08.16.20.07; author bouyer; state Exp; branches; next ; 1.38.4.1 date 2010.09.07.19.33.35; author bouyer; state Exp; branches; next ; 1.38.10.1 date 2010.09.07.19.33.44; author bouyer; state Exp; branches; next ; 1.38.12.1 date 2011.05.20.08.11.34; author matt; state Exp; branches; next ; 1.38.14.1 date 2010.10.22.07.22.57; author uebayasi; state Exp; branches; next 1.38.14.2; 1.38.14.2 date 2010.11.21.12.42.59; author uebayasi; state Exp; branches; next 1.38.14.3; 1.38.14.3 date 2010.11.21.15.00.12; author uebayasi; state Exp; branches; next ; 1.38.16.1 date 2011.03.05.20.56.37; author rmind; state Exp; branches; next ; 1.37.16.1 date 2008.09.28.10.41.07; author mjf; state Exp; branches; next ; 1.37.20.1 date 2009.05.04.08.14.39; author yamt; state Exp; branches; next 1.37.20.2; 1.37.20.2 date 2010.10.09.03.32.47; author yamt; state Exp; branches; next ; 1.37.22.1 date 2008.09.18.04.37.06; author wrstuden; state Exp; branches; next ; 1.37.26.1 date 2008.10.19.22.18.11; author haad; state Exp; branches; next ; 1.36.6.1 date 2007.10.28.20.11.17; author joerg; state Exp; branches; next ; 1.36.8.1 date 2007.11.06.23.35.32; author matt; state Exp; branches; next ; 1.36.12.1 date 2007.11.13.16.03.34; author bouyer; state Exp; branches; next ; 1.34.18.1 date 2007.04.16.20.01.15; author bouyer; state Exp; branches; next ; 1.34.20.1 date 2007.05.07.10.56.18; author yamt; state Exp; branches; next ; 1.34.24.1 date 2007.06.08.14.18.22; author ad; state Exp; branches; next ; 1.34.26.1 date 2007.07.11.20.12.57; author mjf; state Exp; branches; next ; 1.32.2.1 date 2006.02.18.15.39.31; author yamt; state Exp; branches; next 1.32.2.2; 1.32.2.2 date 2006.03.01.09.28.51; author yamt; state Exp; branches; next ; 1.32.4.1 date 2006.09.09.03.00.13; author rpaulo; state Exp; branches; next ; 1.32.6.1 date 2006.04.22.11.40.30; author simonb; state Exp; branches; next ; 1.28.14.1 date 2005.08.24.18.43.38; author riz; state Exp; branches; next ; 1.28.16.1 date 2006.06.21.15.12.40; author yamt; state Exp; branches; next 1.28.16.2; 1.28.16.2 date 2007.09.03.14.47.11; author yamt; state Exp; branches; next 1.28.16.3; 1.28.16.3 date 2007.10.27.11.36.55; author yamt; state Exp; branches; next ; 1.26.2.1 date 2004.08.03.10.57.08; author skrll; state Exp; branches; next 1.26.2.2; 1.26.2.2 date 2004.09.18.14.57.12; author skrll; state Exp; branches; next 1.26.2.3; 1.26.2.3 date 2004.09.21.13.39.29; author skrll; state Exp; branches; next 1.26.2.4; 1.26.2.4 date 2005.11.10.14.12.40; author skrll; state Exp; branches; next ; 1.23.2.1 date 2002.01.10.20.05.45; author thorpej; state Exp; branches; next 1.23.2.2; 1.23.2.2 date 2002.06.23.17.52.18; author jdolecek; state Exp; branches; next ; 1.23.4.1 date 2001.10.01.12.48.46; author fvdl; state Exp; branches; next ; 1.20.2.1 date 2001.04.09.01.59.21; author nathanw; state Exp; branches; next 1.20.2.2; 1.20.2.2 date 2001.06.21.20.10.42; author nathanw; state Exp; branches; next 1.20.2.3; 1.20.2.3 date 2001.09.21.22.37.17; author nathanw; state Exp; branches; next 1.20.2.4; 1.20.2.4 date 2002.04.01.07.49.24; author nathanw; state Exp; branches; next ; 1.10.2.1 date 2000.11.20.18.12.04; author bouyer; state Exp; branches; next 1.10.2.2; 1.10.2.2 date 2000.12.08.09.21.04; author bouyer; state Exp; branches; next 1.10.2.3; 1.10.2.3 date 2001.03.12.13.32.14; author bouyer; state Exp; branches; next ; 1.9.4.1 date 99.06.07.04.25.37; author chs; state Exp; branches; next 1.9.4.2; 1.9.4.2 date 99.07.01.23.55.17; author thorpej; state Exp; branches; next 1.9.4.3; 1.9.4.3 date 99.07.04.02.03.21; author chs; state Exp; branches; next 1.9.4.4; 1.9.4.4 date 99.07.11.05.47.29; author chs; state Exp; branches; next 1.9.4.5; 1.9.4.5 date 99.08.09.00.05.56; author chs; state Exp; branches; next ; 1.7.2.1 date 98.11.09.06.06.39; author chs; state Exp; branches; next 1.7.2.2; 1.7.2.2 date 99.02.25.04.25.05; author chs; state Exp; branches; next 1.7.2.3; 1.7.2.3 date 99.05.30.15.34.45; author chs; state Exp; branches; next ; 1.6.2.1 date 98.07.30.14.04.15; author eeh; state Exp; branches; next ; 1.1.1.1 date 98.02.05.06.25.09; author mrg; state Exp; branches; next ; desc @@ 1.49 log @PR kern/32166: pgo_get protocol is ambiguous Also problems with tmpfs+nfs noted by hannken@@. Don't pass PGO_ALLPAGES to pgo_get, and ignore PGO_DONTCARE in the !PGO_LOCKED case. In uao_get() have uvm_pagealloc() take care of page zeroing and release busy pages on error. @ text @/* $NetBSD: uvm_pager.h,v 1.48 2020/05/17 19:38:17 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. * * from: Id: uvm_pager.h,v 1.1.2.14 1998/01/13 19:00:50 chuck Exp */ /* * Copyright (c) 1991, 1993 * The Regents of the University of California. All rights reserved. * * This code is derived from software contributed to Berkeley by * the Systems Programming Group of the University of Utah Computer * Science Department. * * 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. * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``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 REGENTS OR CONTRIBUTORS 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. * * @@(#)vm_pager.h 8.5 (Berkeley) 7/7/94 */ /* * Copyright (c) 1990 University of Utah. * * This code is derived from software contributed to Berkeley by * the Systems Programming Group of the University of Utah Computer * Science Department. * * 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. * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``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 REGENTS OR CONTRIBUTORS 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. * * @@(#)vm_pager.h 8.5 (Berkeley) 7/7/94 */ #ifndef _UVM_UVM_PAGER_H_ #define _UVM_UVM_PAGER_H_ /* * uvm_pager.h */ /* * forward structure declarations */ struct uvm_faultinfo; struct uvm_object; /* * pager ops */ struct uvm_pagerops { /* init pager */ void (*pgo_init)(void); /* add reference to obj */ void (*pgo_reference)(struct uvm_object *); /* drop reference to obj */ void (*pgo_detach)(struct uvm_object *); /* special non-standard fault processing */ int (*pgo_fault)(struct uvm_faultinfo *, vaddr_t, struct vm_page **, int, int, vm_prot_t, int); /* get/read pages */ int (*pgo_get)(struct uvm_object *, voff_t, struct vm_page **, int *, int, vm_prot_t, int, int); /* put/write pages */ int (*pgo_put)(struct uvm_object *, voff_t, voff_t, int); /* mark object dirty */ void (*pgo_markdirty)(struct uvm_object *); }; /* pager flags [mostly for flush] */ #define PGO_CLEANIT 0x001 /* write dirty pages to backing store */ #define PGO_SYNCIO 0x002 /* use sync I/O */ #define PGO_DEACTIVATE 0x004 /* deactivate flushed pages */ #define PGO_FREE 0x008 /* free flushed pages */ /* if PGO_FREE is not set then the pages stay where they are. */ #define PGO_ALLPAGES 0x010 /* flush whole object [put] */ #define PGO_JOURNALLOCKED 0x020 /* journal is already locked [get/put] */ #define PGO_LOCKED 0x040 /* fault data structures are locked [get] */ #define PGO_BUSYFAIL 0x080 /* fail if a page is busy [put] */ #define PGO_OVERWRITE 0x200 /* pages will be overwritten before unlocked */ #define PGO_PASTEOF 0x400 /* allow allocation of pages past EOF */ #define PGO_NOBLOCKALLOC 0x800 /* backing block allocation is not needed */ #define PGO_NOTIMESTAMP 0x1000 /* don't mark object accessed/modified */ #define PGO_RECLAIM 0x2000 /* object is being reclaimed */ #define PGO_GLOCKHELD 0x4000 /* genfs_node's lock is already held */ #define PGO_LAZY 0x8000 /* equivalent of MNT_LAZY / FSYNC_LAZY */ /* page we are not interested in getting */ #define PGO_DONTCARE ((struct vm_page *) -1L) /* [get only] */ #ifdef _KERNEL /* * prototypes */ void uvm_pager_init(void); void uvm_pager_realloc_emerg(void); struct vm_page *uvm_pageratop(vaddr_t); vaddr_t uvm_pagermapin(struct vm_page **, int, int); void uvm_pagermapout(vaddr_t, int); extern size_t pager_map_size; /* Flags to uvm_pagermapin() */ #define UVMPAGER_MAPIN_WAITOK 0x01 /* it's okay to wait */ #define UVMPAGER_MAPIN_READ 0x02 /* device -> host */ #define UVMPAGER_MAPIN_WRITE 0x00 /* host -> device (pseudo flag) */ #endif /* _KERNEL */ #endif /* _UVM_UVM_PAGER_H_ */ @ 1.48 log @Start trying to reduce cache misses on vm_page during fault processing. - Make PGO_LOCKED getpages imply PGO_NOBUSY and remove the latter. Mark pages busy only when there's actually I/O to do. - When doing COW on a uvm_object, don't mess with neighbouring pages. In all likelyhood they're already entered. - Don't mess with neighbouring VAs that have existing mappings as replacing those mappings with same can be quite costly. - Don't enqueue pages for neighbour faults unless not enqueued already, and don't activate centre pages unless uvmpdpol says its useful. Also: - Make PGO_LOCKED getpages on UAOs work more like vnodes: do gang lookup in the radix tree, and don't allocate new pages. - Fix many assertion failures around faults/loans with tmpfs. @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.47 2020/03/22 18:32:42 ad Exp $ */ d151 1 a151 1 #define PGO_ALLPAGES 0x010 /* flush whole object/get all pages */ @ 1.47 log @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. @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.46 2020/03/14 20:45:23 ad Exp $ */ a154 1 #define PGO_NOBUSY 0x100 /* don't busy returned pages (read locked) */ @ 1.46 log @Make uvm_pagemarkdirty() responsible for putting vnodes onto the syncer work list. Proposed on tech-kern@@. @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.45 2018/12/09 20:33:04 jdolecek Exp $ */ d155 1 @ 1.45 log @update comment - PGO_JOURNALLOCKED now supported for 'get' too @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.44 2017/01/13 04:43:16 christos Exp $ */ d138 3 @ 1.44 log @add missing forward struct decl @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.43 2012/04/29 22:54:01 chs Exp $ */ d149 1 a149 1 #define PGO_JOURNALLOCKED 0x020 /* journal is already locked [put] */ @ 1.44.16.1 log @Sync with HEAD @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.45 2018/12/09 20:33:04 jdolecek Exp $ */ d149 1 a149 1 #define PGO_JOURNALLOCKED 0x020 /* journal is already locked [get/put] */ @ 1.44.16.2 log @Merge changes from current as of 20200406 @ text @d1 1 a1 1 /* $NetBSD$ */ a137 3 /* mark object dirty */ void (*pgo_markdirty)(struct uvm_object *); a151 1 #define PGO_NOBUSY 0x100 /* don't busy returned pages (read locked) */ @ 1.44.14.1 log @Sync with HEAD, resolve a few conflicts @ text @d1 1 a1 1 /* $NetBSD$ */ d149 1 a149 1 #define PGO_JOURNALLOCKED 0x020 /* journal is already locked [get/put] */ @ 1.43 log @change vflushbuf() to take the full FSYNC_* flags. translate FSYNC_LAZY into PGO_LAZY for VOP_PUTPAGES() so that genfs_do_io() can set the appropriate io priority for the I/O. this is the first part of addressing PR 46325. @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.42 2011/09/28 22:52:15 matt Exp $ */ d111 1 @ 1.43.2.1 log @update from HEAD @ text @d1 1 a1 1 /* $NetBSD$ */ a110 1 struct uvm_object; @ 1.43.20.1 log @Sync with HEAD @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.44 2017/01/13 04:43:16 christos Exp $ */ a110 1 struct uvm_object; @ 1.43.16.1 log @Sync with HEAD @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.44 2017/01/13 04:43:16 christos Exp $ */ a110 1 struct uvm_object; @ 1.42 log @Reallocate emergency pager va when ncolors is increased. (modication of patch from mrg). @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.41 2011/02/02 20:07:25 chuck Exp $ */ d157 1 @ 1.42.6.1 log @sync to latest -current. @ text @d1 1 a1 1 /* $NetBSD$ */ a156 1 #define PGO_LAZY 0x8000 /* equivalent of MNT_LAZY / FSYNC_LAZY */ @ 1.42.2.1 log @sync with head. @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.42 2011/09/28 22:52:15 matt Exp $ */ a156 1 #define PGO_LAZY 0x8000 /* equivalent of MNT_LAZY / FSYNC_LAZY */ @ 1.42.8.1 log @Pull up following revision(s) (requested by chs in ticket #204): sys/fs/sysvbfs/sysvbfs_vnops.c: revision 1.44 sys/ufs/ffs/ffs_vfsops.c: revision 1.277 sys/fs/v7fs/v7fs_vnops.c: revision 1.11 sys/ufs/chfs/chfs_vnops.c: revision 1.7 sys/ufs/ext2fs/ext2fs_readwrite.c: revision 1.61 sys/miscfs/genfs/genfs_io.c: revision 1.54 sys/kern/vfs_wapbl.c: revision 1.52 sys/uvm/uvm_pager.h: revision 1.43 sys/ufs/ffs/ffs_vnops.c: revision 1.121 sys/kern/vfs_subr.c: revision 1.434 sys/fs/msdosfs/msdosfs_vnops.c: revision 1.83 sys/fs/ntfs/ntfs_vnops.c: revision 1.51 sys/fs/udf/udf_subr.c: revision 1.119 sys/miscfs/specfs/spec_vnops.c: revision 1.135 sys/ufs/ext2fs/ext2fs_vnops.c: revision 1.103 sys/fs/udf/udf_vnops.c: revision 1.71 sys/ufs/ufs/ufs_readwrite.c: revision 1.104 change vflushbuf() to take the full FSYNC_* flags. translate FSYNC_LAZY into PGO_LAZY for VOP_PUTPAGES() so that genfs_do_io() can set the appropriate io priority for the I/O. this is the first part of addressing PR 46325. mark all wapbl I/O as BPRIO_TIMECRITICAL. this is the second part of addressing PR 46325. @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.42 2011/09/28 22:52:15 matt Exp $ */ a156 1 #define PGO_LAZY 0x8000 /* equivalent of MNT_LAZY / FSYNC_LAZY */ @ 1.41 log @udpate license clauses on my code to match the new-style BSD licenses. verified with Mike Hibler it is ok to remove clause 3 on utah copyright, as per UCB. based on diff that rmind@@ sent me. no functional change with this commit. @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.40 2011/02/02 15:13:34 chuck Exp $ */ d168 1 @ 1.40 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_pager.h,v 1.39 2010/09/01 16:56:19 chs Exp $ */ d80 1 a80 5 * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * This product includes software developed by the University of * California, Berkeley and its contributors. * 4. Neither the name of the University nor the names of its contributors @ 1.39 log @replace the earlier workaround for PR 40389 with a better fix. the earlier change caused data corruption by freeing pages without invaliding their mappings. instead of the trylock/retry, just take the genfs-node lock before calling VOP_GETPAGES() and pass a new flag to tell it that we're already holding this lock. @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.38 2008/08/22 10:48:22 hannken 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.39.2.1 log @Sync with HEAD. @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.41 2011/02/02 20:07:25 chuck Exp $ */ d4 1 d16 6 d87 5 a91 1 * 3. Neither the name of the University nor the names of its contributors @ 1.39.4.1 log @Sync with HEAD @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.41 2011/02/02 20:07:25 chuck Exp $ */ d4 1 d16 6 d87 5 a91 1 * 3. Neither the name of the University nor the names of its contributors @ 1.38 log @Add snapshot support for logging ffs file systems. - Add UFS_WAPBL_BEGIN() / UFS_WAPBL_END() where needed. - Expunge WAPBL log inodes from snapshots. - Ffs_copyonwrite() and ffs_snapblkfree() must run inside a WAPBL transaction. - Add ffs_gop_write() as a wrapper around genfs_gop_write() that makes sure genfs_gop_write() gets always called inside a WAPBL transaction. - Add VOP_PUTPAGES() flag PGO_JOURNALLOCKED to tag calls to VOP_PUTPAGES() inside a WAPBL transaction. Reviewed by: Simon Burge , Greg Oster PGO_JOURNALLOCKED / ffs_gop_write() part presented on tech-kern@@. @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.37 2007/10/25 13:03:06 yamt Exp $ */ d167 1 @ 1.38.12.1 log @bring matt-nb5-mips64 up to date with netbsd-5-1-RELEASE (except compat). @ text @d1 1 a1 1 /* $NetBSD$ */ a166 1 #define PGO_GLOCKHELD 0x4000 /* genfs_node's lock is already held */ @ 1.38.16.1 log @sync with head @ text @d1 1 a1 1 /* $NetBSD$ */ d4 1 d16 6 d87 5 a91 1 * 3. Neither the name of the University nor the names of its contributors a166 1 #define PGO_GLOCKHELD 0x4000 /* genfs_node's lock is already held */ @ 1.38.14.1 log @Sync with HEAD (-D20101022). @ text @d1 1 a1 1 /* $NetBSD$ */ a166 1 #define PGO_GLOCKHELD 0x4000 /* genfs_node's lock is already held */ @ 1.38.14.2 log @Resurrect PGO_ZERO support. When vnode pager encounters hole pages in XIP'ed vnodes, it fills page slots with PGO_ZERO and returns them back to the caller (fault handler). Fault handlers are responsible to check page slots and redirect PGO_ZERO to the single "zero page" allocated by calling uvm_page_zeropage_alloc(9). The zero page is wired, read-only (PG_RDONLY) page. It's shared by multiple vnodes, it has no single owner. XIP'ed vnodes are supposed to be "stable" during I/O (unlocked). Because XIP'ed mounts are always read-only. There's no chance to change mappings of XIP'ed vnodes and their XIP'ed pages. Thus the cached uobj is reused after pgo_get() for PGO_ZERO. (Do we need a new concept of "read-only UVM object"?) @ text @a170 2 /* page redirected to zero page (XIP hole page) */ #define PGO_ZERO ((struct vm_page *) -2L) /* [get only] */ @ 1.38.14.3 log @Rename PGO_ZERO as PGO_HOLE, and s/uvm_page_zeropage/uvm_page_holepage/. @ text @d171 2 a172 2 /* page redirected to hole page (XIP) */ #define PGO_HOLE ((struct vm_page *) -2L) /* [get only] */ @ 1.38.10.1 log @Pull up following revision(s) (requested by chs in ticket #1448): sys/uvm/uvm_pager.h: revision 1.39 via patch sys/miscfs/genfs/genfs_vnops.c: revision 1.183 via patch sys/ufs/ufs/ufs_inode.c: revision 1.83 via patch sys/miscfs/genfs/genfs_io.c: revision 1.40 via patch sys/miscfs/genfs/genfs_node.h: revision 1.20 via patch replace the earlier workaround for PR 40389 with a better fix. the earlier change caused data corruption by freeing pages without invaliding their mappings. instead of the trylock/retry, just take the genfs-node lock before calling VOP_GETPAGES() and pass a new flag to tell it that we're already holding this lock. @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.38 2008/08/22 10:48:22 hannken Exp $ */ a166 1 #define PGO_GLOCKHELD 0x4000 /* genfs_node's lock is already held */ @ 1.38.4.1 log @Pull up following revision(s) (requested by chs in ticket #1448): sys/uvm/uvm_pager.h: revision 1.39 via patch sys/miscfs/genfs/genfs_vnops.c: revision 1.183 via patch sys/ufs/ufs/ufs_inode.c: revision 1.83 via patch sys/miscfs/genfs/genfs_io.c: revision 1.40 via patch sys/miscfs/genfs/genfs_node.h: revision 1.20 via patch replace the earlier workaround for PR 40389 with a better fix. the earlier change caused data corruption by freeing pages without invaliding their mappings. instead of the trylock/retry, just take the genfs-node lock before calling VOP_GETPAGES() and pass a new flag to tell it that we're already holding this lock. @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.38 2008/08/22 10:48:22 hannken Exp $ */ a166 1 #define PGO_GLOCKHELD 0x4000 /* genfs_node's lock is already held */ @ 1.37 log @defparam PAGER_MAP_SIZE. @ text @d1 1 a1 1 /* $NetBSD$ */ d159 1 @ 1.37.20.1 log @sync with head. @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.37 2007/10/25 13:03:06 yamt Exp $ */ a158 1 #define PGO_JOURNALLOCKED 0x020 /* journal is already locked [put] */ @ 1.37.20.2 log @sync with head @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.37.20.1 2009/05/04 08:14:39 yamt Exp $ */ a166 1 #define PGO_GLOCKHELD 0x4000 /* genfs_node's lock is already held */ @ 1.37.26.1 log @Sync with HEAD. @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.38 2008/08/22 10:48:22 hannken Exp $ */ a158 1 #define PGO_JOURNALLOCKED 0x020 /* journal is already locked [put] */ @ 1.37.16.1 log @Sync with HEAD. @ text @a158 1 #define PGO_JOURNALLOCKED 0x020 /* journal is already locked [put] */ @ 1.37.22.1 log @Sync with wrstuden-revivesa-base-2. @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.37 2007/10/25 13:03:06 yamt Exp $ */ a158 1 #define PGO_JOURNALLOCKED 0x020 /* journal is already locked [put] */ @ 1.36 log @adjust misleading comment: PGO_SYNCIO does not depend on PGO_CLEANIT @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.35 2007/04/16 05:14:54 chs Exp $ */ d181 2 a187 10 /* * XXX * this is needed until the device strategy interface * is changed to do physically-addressed i/o. */ #ifndef PAGER_MAP_SIZE #define PAGER_MAP_SIZE (16 * 1024 * 1024) #endif @ 1.36.12.1 log @Sync with HEAD @ text @d1 1 a1 1 /* $NetBSD$ */ a180 2 extern size_t pager_map_size; d186 10 @ 1.36.8.1 log @sync with HEAD @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.37 2007/10/25 13:03:06 yamt Exp $ */ a180 2 extern size_t pager_map_size; d186 10 @ 1.36.6.1 log @Sync with HEAD. @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.36 2007/04/23 20:10:50 pooka Exp $ */ a180 2 extern size_t pager_map_size; d186 10 @ 1.35 log @define a pager flag PGO_RECLAIM, similar to FSYNC_RECLAIM, and use it to skip unnecessary flushing when layered file system vnodes are recycled. this also prevents a deadlock with the dodgy LFS putpages routine. fixes the non-LFS part of PR 36150. @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.34 2006/02/22 22:28:18 drochner Exp $ */ d153 1 a153 1 #define PGO_SYNCIO 0x002 /* if PGO_CLEANIT: use sync I/O? */ @ 1.34 log @kill the "fault_type" argument to pager's pgo_fault() methods it is never used (and using it would comprise an abstraction violation imho) @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.33 2006/02/11 12:45:07 yamt Exp $ */ d165 1 @ 1.34.26.1 log @Sync with head. @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.36 2007/04/23 20:10:50 pooka Exp $ */ d153 1 a153 1 #define PGO_SYNCIO 0x002 /* use sync I/O */ a164 1 #define PGO_RECLAIM 0x2000 /* object is being reclaimed */ @ 1.34.24.1 log @Sync with head. @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.34 2006/02/22 22:28:18 drochner Exp $ */ d153 1 a153 1 #define PGO_SYNCIO 0x002 /* use sync I/O */ a164 1 #define PGO_RECLAIM 0x2000 /* object is being reclaimed */ @ 1.34.20.1 log @sync with head. @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.34 2006/02/22 22:28:18 drochner Exp $ */ d153 1 a153 1 #define PGO_SYNCIO 0x002 /* use sync I/O */ a164 1 #define PGO_RECLAIM 0x2000 /* object is being reclaimed */ @ 1.34.18.1 log @Pull up following revision(s) (requested by chs in ticket #577): sys/kern/vfs_subr.c: revision 1.287 sys/fs/union/union_vnops.c: revision 1.20 sys/miscfs/genfs/layer_vnops.c: revision 1.30 sys/uvm/uvm_pager.h: revision 1.35 define a pager flag PGO_RECLAIM, similar to FSYNC_RECLAIM, and use it to skip unnecessary flushing when layered file system vnodes are recycled. this also prevents a deadlock with the dodgy LFS putpages routine. fixes the non-LFS part of PR 36150. @ text @d1 1 a1 1 /* $NetBSD$ */ a164 1 #define PGO_RECLAIM 0x2000 /* object is being reclaimed */ @ 1.33 log @remove the following options. no objections on tech-kern@@. UVM_PAGER_INLINE UVM_AMAP_INLINE UVM_PAGE_INLINE UVM_MAP_INLINE @ text @d1 1 a1 1 /* $NetBSD$ */ d140 1 a140 1 int, int, vm_fault_t, vm_prot_t, int); @ 1.32 log @Remove leading __ from __(const|inline|signed|volatile) -- it is obsolete. @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.31 2005/12/11 12:25:29 christos Exp $ */ a171 10 * handle inline options */ #ifdef UVM_PAGER_INLINE #define PAGER_INLINE static inline #else #define PAGER_INLINE /* nothing */ #endif /* UVM_PAGER_INLINE */ /* d176 1 a176 1 PAGER_INLINE struct vm_page *uvm_pageratop(vaddr_t); @ 1.32.4.1 log @sync with head @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.34 2006/02/22 22:28:18 drochner Exp $ */ d140 1 a140 1 int, int, vm_prot_t, int); d172 10 d186 1 a186 1 struct vm_page *uvm_pageratop(vaddr_t); @ 1.32.6.1 log @Sync with head. @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.34 2006/02/22 22:28:18 drochner Exp $ */ d140 1 a140 1 int, int, vm_prot_t, int); d172 10 d186 1 a186 1 struct vm_page *uvm_pageratop(vaddr_t); @ 1.32.2.1 log @sync with head. @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.32 2005/12/24 20:45:10 perry Exp $ */ d172 10 d186 1 a186 1 struct vm_page *uvm_pageratop(vaddr_t); @ 1.32.2.2 log @sync with head. @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.32.2.1 2006/02/18 15:39:31 yamt Exp $ */ d140 1 a140 1 int, int, vm_prot_t, int); @ 1.31 log @merge ktrace-lwp. @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.26.2.4 2005/11/10 14:12:40 skrll Exp $ */ d176 1 a176 1 #define PAGER_INLINE static __inline @ 1.30 log @update file timestamps for nfsd loaned-read and mmap. PR/25279. discussed on tech-kern@@. @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.29 2005/07/17 09:13:35 yamt Exp $ */ @ 1.29 log @- introduce PGO_NOBLOCKALLOC and use it for ubc mapping to prevent unnecessary block allocations in the case that page size > block size. - ufs_balloc_range: use VM_PROT_WRITE+PGO_NOBLOCKALLOC rather than VM_PROT_READ. @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.28 2004/03/24 07:55:01 junyoung Exp $ */ d164 1 @ 1.28 log @Nuke __P(). @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.27 2003/08/07 16:34:49 agc Exp $ */ d163 1 @ 1.28.16.1 log @sync with head. @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.28 2004/03/24 07:55:01 junyoung Exp $ */ d140 1 a140 1 int, int, vm_prot_t, int); a162 2 #define PGO_NOBLOCKALLOC 0x800 /* backing block allocation is not needed */ #define PGO_NOTIMESTAMP 0x1000 /* don't mark object accessed/modified */ d170 10 d184 1 a184 1 struct vm_page *uvm_pageratop(vaddr_t); @ 1.28.16.2 log @sync with head. @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.28.16.1 2006/06/21 15:12:40 yamt Exp $ */ d153 1 a153 1 #define PGO_SYNCIO 0x002 /* use sync I/O */ a164 1 #define PGO_RECLAIM 0x2000 /* object is being reclaimed */ @ 1.28.16.3 log @sync with head. @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.28.16.2 2007/09/03 14:47:11 yamt Exp $ */ a180 2 extern size_t pager_map_size; d186 10 @ 1.28.14.1 log @Pull up following revision(s) (requested by yamt in ticket #688): sys/miscfs/genfs/genfs_vnops.c: revision 1.98 via patch sys/ufs/ffs/ffs_vfsops.c: revision 1.165 sys/ufs/lfs/lfs_extern.h: revision 1.69 sys/fs/filecorefs/filecore_vfsops.c: revision 1.20 sys/nfs/nfs_node.c: revision 1.80 sys/fs/smbfs/smbfs_node.c: revision 1.24 sys/fs/cd9660/cd9660_vfsops.c: revision 1.24 sys/fs/msdosfs/msdosfs_denode.c: revision 1.8 sys/miscfs/genfs/genfs_node.h: revision 1.6 sys/ufs/lfs/lfs_vfsops.c: revision 1.183 sys/ufs/ext2fs/ext2fs_vfsops.c: revision 1.86 sys/fs/adosfs/advfsops.c: revision 1.23 sys/fs/ntfs/ntfs_vfsops.c: revision 1.31 - constify genfs_ops. - use member designators. sys/miscfs/genfs/genfs_vnops.c: revision 1.99 via patch genfs_getpages: don't forget to put the vnode onto the syncer's work que ue even in the case of PGO_LOCKED. sys/uvm/uvm_bio.c: revision 1.40 sys/uvm/uvm_pager.h: revision 1.29 sys/miscfs/genfs/genfs_vnops.c: revision 1.100 via patch sys/ufs/ufs/ufs_inode.c: revision 1.50 - introduce PGO_NOBLOCKALLOC and use it for ubc mapping to prevent unnecessary block allocations in the case that page size > block size. - ufs_balloc_range: use VM_PROT_WRITE+PGO_NOBLOCKALLOC rather than VM_PROT_READ. sys/uvm/uvm_fault.c: revision 1.96 sys/miscfs/genfs/genfs_vnops.c: revision 1.101 via patch sys/uvm/uvm_object.h: revision 1.19 sys/miscfs/genfs/genfs_node.h: revision 1.7 ensure that vnodes with dirty pages are always on syncer's queue. - genfs_putpages: wait for i/o completion of PG_RELEASED/PG_PAGEOUT pages by setting "wasclean" false when encountering them. suggested by Stephan Uphoff in PR/24596 (1). - genfs_putpages: write protect pages when cleaning out, if we're going to take the vnode off the syncer's queue. uvm_fault: don't write-map pages unless its vnode is already on the syncer's queue. fix PR/24596 (3) but in the different way from the suggested fix. (to keep our current behaviour, ie. not to require explicit msync. discussed on tech-kern@@.) - genfs_putpages: don't mistakenly take a vnode off the queue by introducing a generation number in genfs_node. genfs_getpages: increment the generation number. suggested by Stephan Uphoff in PR/24596 (2). - add some assertions. sys/miscfs/genfs/genfs_vnops.c: revision 1.102 via patch genfs_putpages: don't bother to clean the vnode unless VONWORKLST. sys/ufs/ffs/ffs_vnops.c: revision 1.71 ffs_full_fsync: because VBLK/VCHR can be mmap'ed, do VOP_PUTPAGES for them as well. sys/uvm/uvm_fault.c: revision 1.97 uvm_fault: check a correct object in the case of layered filesystems. fix PR/30811 from Jukka Salmi. sys/uvm/uvm_object.h: revision 1.20 sys/ufs/ffs/ffs_vfsops.c: revision 1.167 sys/uvm/uvm_bio.c: revision 1.41 sys/ufs/ufs/ufs_vnops.c: revision 1.129 sys/uvm/uvm_mmap.c: revision 1.92 sys/uvm/uvm_fault.c: revision 1.98 sys/kern/vfs_subr.c: revision 1.252 sys/fs/msdosfs/denode.h: revision 1.5 sys/miscfs/genfs/genfs_vnops.c: revision 1.103 via patch sys/fs/msdosfs/msdosfs_denode.c: revision 1.9 sys/sys/vnode.h: revision 1.141 sys/ufs/ufs/ufs_inode.c: revision 1.51 sys/ufs/ufs/ufs_extern.h: revision 1.45 via patch sys/miscfs/genfs/genfs_node.h: revision 1.8 sys/ufs/lfs/lfs_vfsops.c: revision 1.184 sys/uvm/uvm_pager.h: revision 1.30 sys/ufs/ext2fs/ext2fs_vfsops.c: revision 1.87 update file timestamps for nfsd loaned-read and mmap. PR/25279. discussed on tech-kern@@. sys/miscfs/genfs/genfs_vnops.c: revision 1.104 via patch don't write-protect wired pages. pointed by Chuck Silvers. for now, leave a vnode on the syncer's queue, as suggested by him. sys/ufs/ffs/ffs_vnops.c: revision 1.72 revert VCHR part of ffs_vnops.c 1.71. as VCHR uses the device pager, no point to call VOP_PUTPAGES here. pointed by Chuck Silvers. @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.28 2004/03/24 07:55:01 junyoung Exp $ */ a162 2 #define PGO_NOBLOCKALLOC 0x800 /* backing block allocation is not needed */ #define PGO_NOTIMESTAMP 0x1000 /* don't mark object accessed/modified */ @ 1.27 log @Move UCB-licensed code from 4-clause to 3-clause licence. Patches provided by Joel Baker in PR 22364, verified by myself. @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.26 2003/02/17 23:48:24 perseant Exp $ */ d130 1 a130 1 void (*pgo_init) __P((void)); d183 4 a186 4 void uvm_pager_init __P((void)); PAGER_INLINE struct vm_page *uvm_pageratop __P((vaddr_t)); vaddr_t uvm_pagermapin __P((struct vm_page **, int, int)); void uvm_pagermapout __P((vaddr_t, int)); @ 1.26 log @Add code to UBCify LFS. This is still behind "#ifdef LFS_UBC" for now (there are still some details to work out) but expect that to go away soon. To support these basic changes (creation of lfs_putpages, lfs_gop_write, mods to lfs_balloc) several other changes were made, to wit: * Create a writer daemon kernel thread whose purpose is to handle page writes for the pagedaemon, but which also takes over some of the functions of lfs_check(). This thread is started the first time an LFS is mounted. * Add a "flags" parameter to GOP_SIZE. Current values are GOP_SIZE_READ, meaning that the call should return the size of the in-core version of the file, and GOP_SIZE_WRITE, meaning that it should return the on-disk size. One of GOP_SIZE_READ or GOP_SIZE_WRITE must be specified. * Instead of using malloc(...M_WAITOK) for everything, reserve enough resources to get by and use malloc(...M_NOWAIT), using the reserves if necessary. Use the pool subsystem for structures small enough that this is feasible. This also obsoletes LFS_THROTTLE. And a few that are not strictly necessary: * Moves the LFS inode extensions off onto a separately allocated structure; getting closer to LFS as an LKM. "Welcome to 1.6O." * Unified GOP_ALLOC between FFS and LFS. * Update LFS copyright headers to correct values. * Actually cast to unsigned in lfs_shellsort, like the comment says. * Keep track of which segments were empty before the previous checkpoint; any segments that pass two checkpoints both dirty and empty can be summarily cleaned. Do this. Right now lfs_segclean still works, but this should be turned into an effectless compatibility syscall. @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.25 2002/03/25 02:08:10 chs Exp $ */ a37 1 * Copyright (c) 1990 University of Utah. d40 34 @ 1.26.2.1 log @Sync with HEAD @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.28 2004/03/24 07:55:01 junyoung Exp $ */ d38 1 a53 34 * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``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 REGENTS OR CONTRIBUTORS 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. * * @@(#)vm_pager.h 8.5 (Berkeley) 7/7/94 */ /* * Copyright (c) 1990 University of Utah. * * This code is derived from software contributed to Berkeley by * the Systems Programming Group of the University of Utah Computer * Science Department. * * 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. d97 1 a97 1 void (*pgo_init)(void); d150 4 a153 4 void uvm_pager_init(void); PAGER_INLINE struct vm_page *uvm_pageratop(vaddr_t); vaddr_t uvm_pagermapin(struct vm_page **, int, int); void uvm_pagermapout(vaddr_t, int); @ 1.26.2.2 log @Sync with HEAD. @ text @@ 1.26.2.3 log @Fix the sync with head I botched. @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.26.2.1 2004/08/03 10:57:08 skrll Exp $ */ @ 1.26.2.4 log @Sync with HEAD. Here we go again... @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.26.2.3 2004/09/21 13:39:29 skrll Exp $ */ a162 2 #define PGO_NOBLOCKALLOC 0x800 /* backing block allocation is not needed */ #define PGO_NOTIMESTAMP 0x1000 /* don't mark object accessed/modified */ @ 1.25 log @remove PGO_WEAK, it isn't needed anymore. @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.24 2001/09/15 20:36:47 chs Exp $ */ d127 1 @ 1.24 log @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. @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.23 2001/05/26 21:27:21 chs Exp $ */ d128 1 a128 2 #define PGO_WEAK 0x400 /* "weak" put, for nfs */ #define PGO_PASTEOF 0x800 /* allow allocation of pages past EOF */ @ 1.23 log @replace vm_page_t with struct vm_page *. @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.22 2001/05/25 04:06:16 chs Exp $ */ d85 6 d95 20 a114 27 void (*pgo_init) __P((void));/* init pager */ void (*pgo_reference) /* add reference to obj */ __P((struct uvm_object *)); void (*pgo_detach) /* drop reference to obj */ __P((struct uvm_object *)); int (*pgo_fault) /* special nonstd fault fn */ __P((struct uvm_faultinfo *, vaddr_t, struct vm_page **, int, int, vm_fault_t, vm_prot_t, int)); boolean_t (*pgo_flush) /* flush pages out of obj */ __P((struct uvm_object *, voff_t, voff_t, int)); int (*pgo_get) /* get/read page */ __P((struct uvm_object *, voff_t, struct vm_page **, int *, int, vm_prot_t, int, int)); int (*pgo_put) /* put/write page */ __P((struct uvm_object *, struct vm_page **, int, boolean_t)); void (*pgo_cluster) /* return range of cluster */ __P((struct uvm_object *, voff_t, voff_t *, voff_t *)); struct vm_page ** (*pgo_mk_pcluster) /* make "put" cluster */ __P((struct uvm_object *, struct vm_page **, int *, struct vm_page *, int, voff_t, voff_t)); boolean_t (*pgo_releasepg) /* release page */ __P((struct vm_page *, struct vm_page **)); a125 1 #define PGO_DOACTCLUST 0x020 /* flag to mk_pcluster to include active */ a126 2 #define PGO_PDFREECLUST 0x080 /* daemon's free cluster flag [uvm_pager_put] */ #define PGO_REALLOCSWAP 0x100 /* reallocate swap area [pager_dropcluster] */ d150 1 a150 8 void uvm_pager_dropcluster __P((struct uvm_object *, struct vm_page *, struct vm_page **, int *, int)); void uvm_pager_init __P((void)); int uvm_pager_put __P((struct uvm_object *, struct vm_page *, struct vm_page ***, int *, int, voff_t, voff_t)); d152 2 a153 6 vaddr_t uvm_pagermapin __P((struct vm_page **, int, int)); void uvm_pagermapout __P((vaddr_t, int)); struct vm_page **uvm_mk_pcluster __P((struct uvm_object *, struct vm_page **, int *, struct vm_page *, int, voff_t, voff_t)); d157 2 a158 2 #define UVMPAGER_MAPIN_READ 0x02 /* host <- device */ #define UVMPAGER_MAPIN_WRITE 0x00 /* device -> host (pseudo flag) */ @ 1.23.2.1 log @Sync kqueue branch with -current. @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.24 2001/09/15 20:36:47 chs Exp $ */ a84 6 * forward structure declarations */ struct uvm_faultinfo; /* d89 27 a115 20 /* init pager */ void (*pgo_init) __P((void)); /* add reference to obj */ void (*pgo_reference)(struct uvm_object *); /* drop reference to obj */ void (*pgo_detach)(struct uvm_object *); /* special non-standard fault processing */ int (*pgo_fault)(struct uvm_faultinfo *, vaddr_t, struct vm_page **, int, int, vm_fault_t, vm_prot_t, int); /* get/read pages */ int (*pgo_get)(struct uvm_object *, voff_t, struct vm_page **, int *, int, vm_prot_t, int, int); /* put/write pages */ int (*pgo_put)(struct uvm_object *, voff_t, voff_t, int); d127 1 d129 2 d154 8 a161 1 void uvm_pager_init __P((void)); d163 6 a168 2 vaddr_t uvm_pagermapin __P((struct vm_page **, int, int)); void uvm_pagermapout __P((vaddr_t, int)); d172 2 a173 2 #define UVMPAGER_MAPIN_READ 0x02 /* device -> host */ #define UVMPAGER_MAPIN_WRITE 0x00 /* host -> device (pseudo flag) */ @ 1.23.2.2 log @catch up with -current on kqueue branch @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.23.2.1 2002/01/10 20:05:45 thorpej Exp $ */ d128 2 a129 1 #define PGO_PASTEOF 0x400 /* allow allocation of pages past EOF */ @ 1.23.4.1 log @Catch up with -current. @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.24 2001/09/15 20:36:47 chs Exp $ */ a84 6 * forward structure declarations */ struct uvm_faultinfo; /* d89 27 a115 20 /* init pager */ void (*pgo_init) __P((void)); /* add reference to obj */ void (*pgo_reference)(struct uvm_object *); /* drop reference to obj */ void (*pgo_detach)(struct uvm_object *); /* special non-standard fault processing */ int (*pgo_fault)(struct uvm_faultinfo *, vaddr_t, struct vm_page **, int, int, vm_fault_t, vm_prot_t, int); /* get/read pages */ int (*pgo_get)(struct uvm_object *, voff_t, struct vm_page **, int *, int, vm_prot_t, int, int); /* put/write pages */ int (*pgo_put)(struct uvm_object *, voff_t, voff_t, int); d127 1 d129 2 d154 8 a161 1 void uvm_pager_init __P((void)); d163 6 a168 2 vaddr_t uvm_pagermapin __P((struct vm_page **, int, int)); void uvm_pagermapout __P((vaddr_t, int)); d172 2 a173 2 #define UVMPAGER_MAPIN_READ 0x02 /* device -> host */ #define UVMPAGER_MAPIN_WRITE 0x00 /* host -> device (pseudo flag) */ @ 1.22 log @remove trailing whitespace. @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.21 2001/03/10 22:46:50 chs Exp $ */ d96 1 a96 1 vm_page_t *, int, int, vm_fault_t, d102 2 a103 1 vm_page_t *, int *, int, vm_prot_t, int, int)); d105 1 a105 1 __P((struct uvm_object *, vm_page_t *, @ 1.21 log @eliminate the VM_PAGER_* error codes in favor of the traditional E* codes. the mapping is: VM_PAGER_OK 0 VM_PAGER_BAD VM_PAGER_FAIL 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. @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.20 2000/11/27 08:40:05 chs Exp $ */ d91 1 a91 1 __P((struct uvm_object *)); d104 1 a104 1 __P((struct uvm_object *, vm_page_t *, d145 1 a145 1 #else d153 2 a154 2 void uvm_pager_dropcluster __P((struct uvm_object *, struct vm_page *, struct vm_page **, d157 2 a158 2 int uvm_pager_put __P((struct uvm_object *, struct vm_page *, struct vm_page ***, int *, int, d166 1 a166 1 int *, struct vm_page *, int, @ 1.20 log @Initial integration of the Unified Buffer Cache project. @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.19 2000/11/27 08:19:51 chs Exp $ */ a167 1 int uvm_errno2vmerror __P((int)); a172 21 /* * get/put return values * OK operation was successful * BAD specified data was out of the accepted range * FAIL specified data was in range, but doesn't exist * PEND operations was initiated but not completed * ERROR error while accessing data that is in range and exists * AGAIN temporary resource shortage prevented operation from happening * UNLOCK unlock the map and try again * REFAULT [uvm_fault internal use only!] unable to relock data structures, * thus the mapping needs to be reverified before we can procede */ #define VM_PAGER_OK 0 #define VM_PAGER_BAD 1 #define VM_PAGER_FAIL 2 #define VM_PAGER_PEND 3 #define VM_PAGER_ERROR 4 #define VM_PAGER_AGAIN 5 #define VM_PAGER_UNLOCK 6 #define VM_PAGER_REFAULT 7 @ 1.20.2.1 log @Catch up with -current. @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.21 2001/03/10 22:46:50 chs Exp $ */ d168 1 d174 21 @ 1.20.2.2 log @Catch up to -current. @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.20.2.1 2001/04/09 01:59:21 nathanw Exp $ */ d91 1 a91 1 __P((struct uvm_object *)); d96 1 a96 1 struct vm_page **, int, int, vm_fault_t, d102 1 a102 2 struct vm_page **, int *, int, vm_prot_t, int, int)); d104 1 a104 1 __P((struct uvm_object *, struct vm_page **, d145 1 a145 1 #else d153 2 a154 2 void uvm_pager_dropcluster __P((struct uvm_object *, struct vm_page *, struct vm_page **, d157 2 a158 2 int uvm_pager_put __P((struct uvm_object *, struct vm_page *, struct vm_page ***, int *, int, d166 1 a166 1 int *, struct vm_page *, int, @ 1.20.2.3 log @Catch up to -current. @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.20.2.2 2001/06/21 20:10:42 nathanw Exp $ */ a84 6 * forward structure declarations */ struct uvm_faultinfo; /* d89 27 a115 20 /* init pager */ void (*pgo_init) __P((void)); /* add reference to obj */ void (*pgo_reference)(struct uvm_object *); /* drop reference to obj */ void (*pgo_detach)(struct uvm_object *); /* special non-standard fault processing */ int (*pgo_fault)(struct uvm_faultinfo *, vaddr_t, struct vm_page **, int, int, vm_fault_t, vm_prot_t, int); /* get/read pages */ int (*pgo_get)(struct uvm_object *, voff_t, struct vm_page **, int *, int, vm_prot_t, int, int); /* put/write pages */ int (*pgo_put)(struct uvm_object *, voff_t, voff_t, int); d127 1 d129 2 d154 8 a161 1 void uvm_pager_init __P((void)); d163 6 a168 2 vaddr_t uvm_pagermapin __P((struct vm_page **, int, int)); void uvm_pagermapout __P((vaddr_t, int)); d172 2 a173 2 #define UVMPAGER_MAPIN_READ 0x02 /* device -> host */ #define UVMPAGER_MAPIN_WRITE 0x00 /* host -> device (pseudo flag) */ @ 1.20.2.4 log @Catch up to -current. (CVS: It's not just a program. It's an adventure!) @ text @d1 1 a1 1 /* $NetBSD$ */ d128 2 a129 1 #define PGO_PASTEOF 0x400 /* allow allocation of pages past EOF */ @ 1.19 log @allow ports to override PAGER_MAP_SIZE in machine/vmparam.h. some ports (such as arm32) don't have enough KVA for the increased default size once the UBC mapping is also present. @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.18 2000/11/24 22:41:39 chs Exp $ */ a84 15 * async pager i/o descriptor structure */ TAILQ_HEAD(uvm_aiohead, uvm_aiodesc); struct uvm_aiodesc { void (*aiodone) __P((struct uvm_aiodesc *)); /* aio done function */ vaddr_t kva; /* KVA of mapped page(s) */ int npages; /* # of pages in I/O req */ void *pd_ptr; /* pager-dependent pointer */ TAILQ_ENTRY(uvm_aiodesc) aioq; /* linked list of aio's */ }; /* d120 1 a120 5 #define PGO_SYNCIO 0x002 /* if PGO_CLEAN: use sync I/O? */ /* * obviously if neither PGO_INVALIDATE or PGO_FREE are set then the pages * stay where they are. */ d123 1 d130 3 d135 1 a135 1 #define PGO_DONTCARE ((struct vm_page *) -1) /* [get only] */ d163 1 a163 2 vaddr_t uvm_pagermapin __P((struct vm_page **, int, struct uvm_aiodesc **, int)); d168 1 @ 1.18 log @increase PAGER_MAP_SIZE to 16MB and move it to uvm_pager.h since the alpha and mips pmaps use it. @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.17 2000/11/24 20:34:01 chs Exp $ */ d217 1 d219 1 @ 1.17 log @g/c unused pager ops "asyncget" and "aiodone". @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.16 2000/06/26 14:21:18 mrg Exp $ */ d210 8 @ 1.16 log @remove/move more mach vm header files: -> -> -> into -> nothing -> into also includes a bunch of include removals (due to redudancy with ), and a scattering of other similar headers. @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.15 2000/05/19 03:45:04 thorpej Exp $ */ a117 2 int (*pgo_asyncget) /* start async get */ __P((struct uvm_object *, voff_t, int)); a127 2 void (*pgo_aiodone) /* async iodone */ __P((struct uvm_aiodesc *)); @ 1.15 log @Tell uvm_pagermapin() the direction of the I/O so that it can map with only the protection that it needs. @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.14 2000/04/03 08:09:02 chs Exp $ */ d37 40 d193 21 @ 1.14 log @remove uvm_shareprot(). no longer needed since the demise of share maps. @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.13 2000/04/03 07:35:24 chs Exp $ */ d148 5 @ 1.13 log @remove the "shareprot" pagerop. it's not needed anymore since share maps are long gone. @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.12 2000/03/26 20:54:47 kleink Exp $ */ a147 1 void uvm_shareprot __P((vm_map_entry_t, vm_prot_t)); @ 1.12 log @Merge parts of chs-ubc2 into the trunk: Add a new type voff_t (defined as a synonym for off_t) to describe offsets into uvm objects, and update the appropriate interfaces to use it, the most visible effect being the ability to mmap() file offsets beyond the range of a vaddr_t. Originally by Chuck Silvers; blame me for problems caused by merging this into non-UBC. @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.11 2000/01/11 06:57:50 chs Exp $ */ a89 2 void (*pgo_shareprot) /* share protect */ __P((vm_map_entry_t, vm_prot_t)); @ 1.11 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_pager.h,v 1.10 1999/06/21 17:25:12 thorpej Exp $ */ d74 1 a74 2 __P((struct uvm_object *, vaddr_t, vaddr_t, int)); d76 1 a76 1 __P((struct uvm_object *, vaddr_t, d79 1 a79 1 __P((struct uvm_object *, vaddr_t, int)); d84 2 a85 2 __P((struct uvm_object *, vaddr_t, vaddr_t *, vaddr_t *)); d88 2 a89 2 int *, struct vm_page *, int, vaddr_t, vaddr_t)); d140 1 a140 1 vaddr_t, vaddr_t)); d149 1 a149 1 vaddr_t, vaddr_t)); @ 1.10 log @Protect prototypes, certain macros, and inlines from userland. @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.9 1999/03/25 18:48:55 mrg Exp $ */ d137 1 a137 1 int *, int, int)); @ 1.10.2.1 log @Update thorpej_scsipi to -current as of a month ago @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.16 2000/06/26 14:21:18 mrg Exp $ */ a36 40 /* * Copyright (c) 1990 University of Utah. * Copyright (c) 1991, 1993 * The Regents of the University of California. All rights reserved. * * This code is derived from software contributed to Berkeley by * the Systems Programming Group of the University of Utah Computer * Science Department. * * 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. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * This product includes software developed by the University of * California, Berkeley and its contributors. * 4. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``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 REGENTS OR CONTRIBUTORS 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. * * @@(#)vm_pager.h 8.5 (Berkeley) 7/7/94 */ d74 2 a75 1 __P((struct uvm_object *, voff_t, voff_t, int)); d77 1 a77 1 __P((struct uvm_object *, voff_t, d80 1 a80 1 __P((struct uvm_object *, voff_t, int)); d85 2 a86 2 __P((struct uvm_object *, voff_t, voff_t *, voff_t *)); d89 4 a92 2 int *, struct vm_page *, int, voff_t, voff_t)); d137 1 a137 1 int *, int)); d141 1 a141 1 voff_t, voff_t)); d150 2 a151 27 voff_t, voff_t)); /* Flags to uvm_pagermapin() */ #define UVMPAGER_MAPIN_WAITOK 0x01 /* it's okay to wait */ #define UVMPAGER_MAPIN_READ 0x02 /* host <- device */ #define UVMPAGER_MAPIN_WRITE 0x00 /* device -> host (pseudo flag) */ /* * get/put return values * OK operation was successful * BAD specified data was out of the accepted range * FAIL specified data was in range, but doesn't exist * PEND operations was initiated but not completed * ERROR error while accessing data that is in range and exists * AGAIN temporary resource shortage prevented operation from happening * UNLOCK unlock the map and try again * REFAULT [uvm_fault internal use only!] unable to relock data structures, * thus the mapping needs to be reverified before we can procede */ #define VM_PAGER_OK 0 #define VM_PAGER_BAD 1 #define VM_PAGER_FAIL 2 #define VM_PAGER_PEND 3 #define VM_PAGER_ERROR 4 #define VM_PAGER_AGAIN 5 #define VM_PAGER_UNLOCK 6 #define VM_PAGER_REFAULT 7 @ 1.10.2.2 log @Sync with HEAD. @ text @d1 1 a1 1 /* $NetBSD$ */ d85 15 d118 2 d130 2 d139 5 a143 1 #define PGO_SYNCIO 0x002 /* if PGO_CLEANIT: use sync I/O? */ a145 1 /* if PGO_FREE is not set then the pages stay where they are. */ a151 3 #define PGO_OVERWRITE 0x200 /* pages will be overwritten before unlocked */ #define PGO_WEAK 0x400 /* "weak" put, for nfs */ #define PGO_PASTEOF 0x800 /* allow allocation of pages past EOF */ d154 1 a154 1 #define PGO_DONTCARE ((struct vm_page *) -1L) /* [get only] */ d182 2 a183 1 vaddr_t uvm_pagermapin __P((struct vm_page **, int, int)); a187 1 int uvm_errno2vmerror __P((int)); a213 10 /* * XXX * this is needed until the device strategy interface * is changed to do physically-addressed i/o. */ #ifndef PAGER_MAP_SIZE #define PAGER_MAP_SIZE (16 * 1024 * 1024) #endif @ 1.10.2.3 log @Sync with HEAD. @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.10.2.2 2000/12/08 09:21:04 bouyer Exp $ */ d168 1 d174 21 @ 1.9 log @remove now >1 year old pre-release message. @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.8 1999/03/24 03:45:28 cgd Exp $ */ d119 2 d153 1 @ 1.9.4.1 log @merge everything from chs-ubc branch. @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.9 1999/03/25 18:48:55 mrg Exp $ */ a39 2 #include d53 1 a53 1 vaddr_t kva; /* KVA of mapped page(s) */ a55 1 int flags; /* misc flags */ a58 7 #define UVM_AIO_PAGEDAEMON 0x0001 /* i/o is from pagedaemon */ struct uvm_aiobuf { struct buf buf; struct uvm_aiodesc aio; }; a114 2 #define PGO_OVERWRITE 0x200 /* page will be overwritten immediately */ @ 1.9.4.2 log @Sync w/ -current. @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.9.4.1 1999/06/07 04:25:37 chs Exp $ */ a130 2 #ifdef _KERNEL a162 1 #endif /* _KERNEL */ @ 1.9.4.3 log @remove uvm_aiodesc and uvm_aiobuf. update uvm_pagermapin() proto. @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.9.4.2 1999/07/01 23:55:17 thorpej Exp $ */ d47 23 d114 1 a114 1 * if neither PGO_INVALIDATE or PGO_FREE are set then the pages d125 1 d129 1 a129 1 #define PGO_DONTCARE ((struct vm_page *) -1L) /* [get only] */ d157 2 a158 1 vaddr_t uvm_pagermapin __P((struct vm_page **, int, int)); @ 1.9.4.4 log @add uvm_errno2vmerror(). @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.9.4.3 1999/07/04 02:03:21 chs Exp $ */ a138 1 int uvm_errno2vmerror __P((int)); @ 1.9.4.5 log @create a new type "voff_t" for uvm_object offsets and define it to be "off_t". also, remove pgo_asyncget(). @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.9.4.4 1999/07/11 05:47:29 chs Exp $ */ d61 2 a62 1 __P((struct uvm_object *, voff_t, voff_t, int)); d64 1 a64 1 __P((struct uvm_object *, voff_t, d66 2 d72 2 a73 2 __P((struct uvm_object *, voff_t, voff_t *, voff_t *)); d76 2 a77 2 int *, struct vm_page *, int, voff_t, voff_t)); d129 1 a129 1 voff_t, voff_t)); d137 1 a137 1 voff_t, voff_t)); @ 1.8 log @after discussion with chuck, nuke pgo_attach from uvm_pagerops @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.7 1998/08/13 02:11:03 eeh Exp $ */ a2 4 /* * XXXCDC: "ROUGH DRAFT" QUALITY UVM PRE-RELEASE FILE! * >>>USE AT YOUR OWN RISK, WORK IS NOT FINISHED<<< */ @ 1.7 log @Merge paddr_t changes into the main branch. @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.6.2.1 1998/07/30 14:04:15 eeh Exp $ */ a68 2 struct uvm_object * (*pgo_attach) /* get uvm_object */ __P((void *, vm_prot_t)); @ 1.7.2.1 log @initial snapshot. lots left to do. @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.7 1998/08/13 02:11:03 eeh Exp $ */ a120 2 #define PGO_OVERWRITE 0x200 /* page will be overwritten immediately */ @ 1.7.2.2 log @add aio stuff. @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.7.2.1 1998/11/09 06:06:39 chs Exp $ */ a43 2 #include d57 1 a57 1 vaddr_t kva; /* KVA of mapped page(s) */ a60 5 }; struct uvm_aiobuf { struct buf buf; struct uvm_aiodesc aio; @ 1.7.2.3 log @add a flags field to struct uvm_aiodesc and define a flag for it. @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.7.2.2 1999/02/25 04:25:05 chs Exp $ */ a61 1 int flags; /* misc flags */ a63 2 #define UVM_AIO_PAGEDAEMON 0x0001 /* i/o is from pagedaemon */ @ 1.6 log @KNF. @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.5 1998/02/10 14:12:26 mrg Exp $ */ d57 1 a57 1 vm_offset_t kva; /* KVA of mapped page(s) */ d76 1 a76 1 __P((struct uvm_faultinfo *, vm_offset_t, d80 2 a81 2 __P((struct uvm_object *, vm_offset_t, vm_offset_t, int)); d83 1 a83 1 __P((struct uvm_object *, vm_offset_t, d86 1 a86 1 __P((struct uvm_object *, vm_offset_t, int)); d91 2 a92 2 __P((struct uvm_object *, vm_offset_t, vm_offset_t *, vm_offset_t *)); d95 2 a96 2 int *, struct vm_page *, int, vm_offset_t, vm_offset_t)); d145 1 a145 1 vm_offset_t, vm_offset_t)); d147 1 a147 1 PAGER_INLINE struct vm_page *uvm_pageratop __P((vm_offset_t)); d149 1 a149 1 vm_offset_t uvm_pagermapin __P((struct vm_page **, int, d151 1 a151 1 void uvm_pagermapout __P((vm_offset_t, int)); d154 1 a154 1 vm_offset_t, vm_offset_t)); @ 1.6.2.1 log @Split vm_offset_t and vm_size_t into paddr_t, psize_t, vaddr_t, and vsize_t. @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.6 1998/03/09 00:58:58 mrg Exp $ */ d57 1 a57 1 vaddr_t kva; /* KVA of mapped page(s) */ d76 1 a76 1 __P((struct uvm_faultinfo *, vaddr_t, d80 2 a81 2 __P((struct uvm_object *, vaddr_t, vaddr_t, int)); d83 1 a83 1 __P((struct uvm_object *, vaddr_t, d86 1 a86 1 __P((struct uvm_object *, vaddr_t, int)); d91 2 a92 2 __P((struct uvm_object *, vaddr_t, vaddr_t *, vaddr_t *)); d95 2 a96 2 int *, struct vm_page *, int, vaddr_t, vaddr_t)); d145 1 a145 1 vaddr_t, vaddr_t)); d147 1 a147 1 PAGER_INLINE struct vm_page *uvm_pageratop __P((vaddr_t)); d149 1 a149 1 vaddr_t uvm_pagermapin __P((struct vm_page **, int, d151 1 a151 1 void uvm_pagermapout __P((vaddr_t, int)); d154 1 a154 1 vaddr_t, vaddr_t)); @ 1.5 log @- add defopt's for UVM, UVMHIST and PMAP_NEW. - remove unnecessary UVMHIST_DECL's. @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.4 1998/02/10 02:34:56 perry Exp $ */ d55 6 a60 6 void (*aiodone) __P((struct uvm_aiodesc *)); /* aio done function */ vm_offset_t kva; /* KVA of mapped page(s) */ int npages; /* # of pages in I/O req */ void *pd_ptr; /* pager-dependent pointer */ TAILQ_ENTRY(uvm_aiodesc) aioq; /* linked list of aio's */ d68 9 a76 9 void (*pgo_init) __P((void)); /* init pager */ struct uvm_object * (*pgo_attach) /* get uvm_object */ __P((void *, vm_prot_t)); void (*pgo_reference) /* add reference to obj */ __P((struct uvm_object *)); void (*pgo_detach) /* drop reference to obj */ __P((struct uvm_object *)); int (*pgo_fault) /* special nonstd fault fn */ __P((struct uvm_faultinfo *, vm_offset_t, d79 2 a80 2 boolean_t (*pgo_flush) /* flush pages out of obj */ __P((struct uvm_object *, vm_offset_t, d82 2 a83 2 int (*pgo_get) /* get/read page */ __P((struct uvm_object *, vm_offset_t, d85 4 a88 4 int (*pgo_asyncget) /* start async get */ __P((struct uvm_object *, vm_offset_t, int)); int (*pgo_put) /* put/write page */ __P((struct uvm_object *, vm_page_t *, d90 5 a94 5 void (*pgo_cluster) /* return range of cluster */ __P((struct uvm_object *, vm_offset_t, vm_offset_t *, vm_offset_t *)); struct vm_page ** (*pgo_mk_pcluster) /* make "put" cluster */ __P((struct uvm_object *, struct vm_page **, d97 6 a102 6 void (*pgo_shareprot) /* share protect */ __P((vm_map_entry_t, vm_prot_t)); void (*pgo_aiodone) /* async iodone */ __P((struct uvm_aiodesc *)); boolean_t (*pgo_releasepg) /* release page */ __P((struct vm_page *, struct vm_page **)); @ 1.4 log @add/cleanup multiple inclusion protection. @ text @d1 1 a1 1 /* $NetBSD: uvm_pager.h,v 1.3 1998/02/07 11:09:29 mrg Exp $ */ a46 3 UVMHIST_DECL(maphist); @ 1.3 log @restore rcsids @ text @d1 1 a1 1 /* $NetBSD$ */ d41 3 d160 2 @ 1.2 log @RCS ID police. @ text @d37 2 @ 1.1 log @Initial revision @ text @d1 1 a1 1 /* $Id: uvm_pager.h,v 1.1.2.14 1998/01/13 19:00:50 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 @@