head 1.11; access; symbols netbsd-10-0-RELEASE:1.11 netbsd-10-0-RC6:1.11 netbsd-10-0-RC5:1.11 netbsd-10-0-RC4:1.11 netbsd-10-0-RC3:1.11 netbsd-10-0-RC2:1.11 thorpej-ifq:1.11.0.24 thorpej-ifq-base:1.11 thorpej-altq-separation:1.11.0.22 thorpej-altq-separation-base:1.11 netbsd-10-0-RC1:1.11 netbsd-10:1.11.0.20 netbsd-10-base:1.11 bouyer-sunxi-drm:1.11.0.18 bouyer-sunxi-drm-base:1.11 netbsd-9-3-RELEASE:1.8 thorpej-i2c-spi-conf2:1.11.0.16 thorpej-i2c-spi-conf2-base:1.11 thorpej-futex2:1.11.0.14 thorpej-futex2-base:1.11 thorpej-cfargs2:1.11.0.12 thorpej-cfargs2-base:1.11 cjep_sun2x-base1:1.11 cjep_sun2x:1.11.0.10 cjep_sun2x-base:1.11 cjep_staticlib_x-base1:1.11 netbsd-9-2-RELEASE:1.8 cjep_staticlib_x:1.11.0.8 cjep_staticlib_x-base:1.11 thorpej-i2c-spi-conf:1.11.0.6 thorpej-i2c-spi-conf-base:1.11 thorpej-cfargs:1.11.0.4 thorpej-cfargs-base:1.11 thorpej-futex:1.11.0.2 thorpej-futex-base:1.11 netbsd-9-1-RELEASE:1.8 bouyer-xenpvh-base2:1.11 phil-wifi-20200421:1.11 bouyer-xenpvh-base1:1.11 phil-wifi-20200411:1.10 bouyer-xenpvh:1.10.0.6 bouyer-xenpvh-base:1.10 is-mlppp:1.10.0.4 is-mlppp-base:1.10 phil-wifi-20200406:1.10 netbsd-8-2-RELEASE:1.8 ad-namecache-base3:1.10 netbsd-9-0-RELEASE:1.8 netbsd-9-0-RC2:1.8 ad-namecache-base2:1.10 ad-namecache-base1:1.10 ad-namecache:1.10.0.2 ad-namecache-base:1.10 netbsd-9-0-RC1:1.8 phil-wifi-20191119:1.8 netbsd-9:1.8.0.64 netbsd-9-base:1.8 phil-wifi-20190609:1.8 netbsd-8-1-RELEASE:1.8 netbsd-8-1-RC1:1.8 isaki-audio2:1.8.0.62 isaki-audio2-base:1.8 pgoyette-compat-merge-20190127:1.8 pgoyette-compat-20190127:1.8 pgoyette-compat-20190118:1.8 pgoyette-compat-1226:1.8 pgoyette-compat-1126:1.8 pgoyette-compat-1020:1.8 pgoyette-compat-0930:1.8 pgoyette-compat-0906:1.8 netbsd-7-2-RELEASE:1.8 pgoyette-compat-0728:1.8 netbsd-8-0-RELEASE:1.8 phil-wifi:1.8.0.60 phil-wifi-base:1.8 pgoyette-compat-0625:1.8 netbsd-8-0-RC2:1.8 pgoyette-compat-0521:1.8 pgoyette-compat-0502:1.8 pgoyette-compat-0422:1.8 netbsd-8-0-RC1:1.8 pgoyette-compat-0415:1.8 pgoyette-compat-0407:1.8 pgoyette-compat-0330:1.8 pgoyette-compat-0322:1.8 pgoyette-compat-0315:1.8 netbsd-7-1-2-RELEASE:1.8 pgoyette-compat:1.8.0.58 pgoyette-compat-base:1.8 netbsd-7-1-1-RELEASE:1.8 tls-maxphys-base-20171202:1.8 matt-nb8-mediatek:1.8.0.56 matt-nb8-mediatek-base:1.8 nick-nhusb-base-20170825:1.8 perseant-stdc-iso10646:1.8.0.54 perseant-stdc-iso10646-base:1.8 netbsd-8:1.8.0.52 netbsd-8-base:1.8 prg-localcount2-base3:1.8 prg-localcount2-base2:1.8 prg-localcount2-base1:1.8 prg-localcount2:1.8.0.50 prg-localcount2-base:1.8 pgoyette-localcount-20170426:1.8 bouyer-socketcan-base1:1.8 jdolecek-ncq:1.8.0.48 jdolecek-ncq-base:1.8 pgoyette-localcount-20170320:1.8 netbsd-7-1:1.8.0.46 netbsd-7-1-RELEASE:1.8 netbsd-7-1-RC2:1.8 nick-nhusb-base-20170204:1.8 netbsd-7-nhusb-base-20170116:1.8 bouyer-socketcan:1.8.0.44 bouyer-socketcan-base:1.8 pgoyette-localcount-20170107:1.8 netbsd-7-1-RC1:1.8 nick-nhusb-base-20161204:1.8 pgoyette-localcount-20161104:1.8 netbsd-7-0-2-RELEASE:1.8 nick-nhusb-base-20161004:1.8 localcount-20160914:1.8 netbsd-7-nhusb:1.8.0.42 netbsd-7-nhusb-base:1.8 pgoyette-localcount-20160806:1.8 pgoyette-localcount-20160726:1.8 pgoyette-localcount:1.8.0.40 pgoyette-localcount-base:1.8 nick-nhusb-base-20160907:1.8 nick-nhusb-base-20160529:1.8 netbsd-7-0-1-RELEASE:1.8 nick-nhusb-base-20160422:1.8 nick-nhusb-base-20160319:1.8 nick-nhusb-base-20151226:1.8 netbsd-7-0:1.8.0.38 netbsd-7-0-RELEASE:1.8 nick-nhusb-base-20150921:1.8 netbsd-7-0-RC3:1.8 netbsd-7-0-RC2:1.8 netbsd-7-0-RC1:1.8 nick-nhusb-base-20150606:1.8 nick-nhusb-base-20150406:1.8 nick-nhusb:1.8.0.36 nick-nhusb-base:1.8 netbsd-5-2-3-RELEASE:1.7 netbsd-5-1-5-RELEASE:1.7 netbsd-6-0-6-RELEASE:1.8 netbsd-6-1-5-RELEASE:1.8 netbsd-7:1.8.0.34 netbsd-7-base:1.8 yamt-pagecache-base9:1.8 yamt-pagecache-tag8:1.8 netbsd-6-1-4-RELEASE:1.8 netbsd-6-0-5-RELEASE:1.8 tls-earlyentropy:1.8.0.32 tls-earlyentropy-base:1.8 riastradh-xf86-video-intel-2-7-1-pre-2-21-15:1.8 riastradh-drm2-base3:1.8 netbsd-6-1-3-RELEASE:1.8 netbsd-6-0-4-RELEASE:1.8 netbsd-5-2-2-RELEASE:1.7 netbsd-5-1-4-RELEASE:1.7 netbsd-6-1-2-RELEASE:1.8 netbsd-6-0-3-RELEASE:1.8 netbsd-5-2-1-RELEASE:1.7 netbsd-5-1-3-RELEASE:1.7 rmind-smpnet-nbase:1.8 netbsd-6-1-1-RELEASE:1.8 riastradh-drm2-base2:1.8 riastradh-drm2-base1:1.8 riastradh-drm2:1.8.0.30 riastradh-drm2-base:1.8 rmind-smpnet:1.8.0.22 rmind-smpnet-base:1.8 netbsd-6-1:1.8.0.28 netbsd-6-0-2-RELEASE:1.8 netbsd-6-1-RELEASE:1.8 khorben-n900:1.8.0.26 netbsd-6-1-RC4:1.8 netbsd-6-1-RC3:1.8 agc-symver:1.8.0.24 agc-symver-base:1.8 netbsd-6-1-RC2:1.8 netbsd-6-1-RC1:1.8 yamt-pagecache-base8:1.8 netbsd-5-2:1.7.0.26 netbsd-6-0-1-RELEASE:1.8 yamt-pagecache-base7:1.8 netbsd-5-2-RELEASE:1.7 netbsd-5-2-RC1:1.7 matt-nb6-plus-nbase:1.8 yamt-pagecache-base6:1.8 netbsd-6-0:1.8.0.20 netbsd-6-0-RELEASE:1.8 netbsd-6-0-RC2:1.8 tls-maxphys:1.8.0.18 tls-maxphys-base:1.8 matt-nb6-plus:1.8.0.16 matt-nb6-plus-base:1.8 netbsd-6-0-RC1:1.8 jmcneill-usbmp-base10:1.8 yamt-pagecache-base5:1.8 jmcneill-usbmp-base9:1.8 yamt-pagecache-base4:1.8 jmcneill-usbmp-base8:1.8 jmcneill-usbmp-base7:1.8 jmcneill-usbmp-base6:1.8 jmcneill-usbmp-base5:1.8 jmcneill-usbmp-base4:1.8 jmcneill-usbmp-base3:1.8 jmcneill-usbmp-pre-base2:1.8 jmcneill-usbmp-base2:1.8 netbsd-6:1.8.0.14 netbsd-6-base:1.8 netbsd-5-1-2-RELEASE:1.7 netbsd-5-1-1-RELEASE:1.7 jmcneill-usbmp:1.8.0.12 jmcneill-usbmp-base:1.8 jmcneill-audiomp3:1.8.0.10 jmcneill-audiomp3-base:1.8 yamt-pagecache-base3:1.8 yamt-pagecache-base2:1.8 yamt-pagecache:1.8.0.8 yamt-pagecache-base:1.8 rmind-uvmplock-nbase:1.8 cherry-xenmp:1.8.0.6 cherry-xenmp-base:1.8 uebayasi-xip-base7:1.8 bouyer-quota2-nbase:1.8 bouyer-quota2:1.8.0.4 bouyer-quota2-base:1.8 jruoho-x86intr:1.8.0.2 jruoho-x86intr-base:1.8 matt-mips64-premerge-20101231:1.8 matt-nb5-mips64-premerge-20101231:1.7 matt-nb5-pq3:1.7.0.24 matt-nb5-pq3-base:1.7 netbsd-5-1:1.7.0.22 uebayasi-xip-base6:1.8 uebayasi-xip-base5:1.8 netbsd-5-1-RELEASE:1.7 uebayasi-xip-base4:1.7 uebayasi-xip-base3:1.7 yamt-nfs-mp-base11:1.7 netbsd-5-1-RC4:1.7 matt-nb5-mips64-k15:1.7 uebayasi-xip-base2:1.7 yamt-nfs-mp-base10:1.7 netbsd-5-1-RC3:1.7 netbsd-5-1-RC2:1.7 uebayasi-xip-base1:1.7 netbsd-5-1-RC1:1.7 rmind-uvmplock:1.7.0.20 rmind-uvmplock-base:1.8 yamt-nfs-mp-base9:1.7 uebayasi-xip:1.7.0.18 uebayasi-xip-base:1.7 netbsd-5-0-2-RELEASE:1.7 matt-nb5-mips64-premerge-20091211:1.7 matt-premerge-20091211:1.7 yamt-nfs-mp-base8:1.7 matt-nb5-mips64-u2-k2-k4-k7-k8-k9:1.7 matt-nb4-mips64-k7-u2a-k9b:1.7 matt-nb5-mips64-u1-k1-k5:1.7 yamt-nfs-mp-base7:1.7 matt-nb5-mips64:1.7.0.16 netbsd-5-0-1-RELEASE:1.7 jymxensuspend-base:1.7 yamt-nfs-mp-base6:1.7 yamt-nfs-mp-base5:1.7 yamt-nfs-mp-base4:1.7 jym-xensuspend-nbase:1.7 yamt-nfs-mp-base3:1.7 nick-hppapmap-base4:1.7 nick-hppapmap-base3:1.7 netbsd-5-0:1.7.0.14 netbsd-5-0-RELEASE:1.7 netbsd-5-0-RC4:1.7 netbsd-5-0-RC3:1.7 nick-hppapmap-base2:1.7 netbsd-5-0-RC2:1.7 jym-xensuspend:1.7.0.12 jym-xensuspend-base:1.7 netbsd-5-0-RC1:1.7 haad-dm-base2:1.7 haad-nbase2:1.7 ad-audiomp2:1.7.0.10 ad-audiomp2-base:1.7 netbsd-5:1.7.0.8 netbsd-5-base:1.7 nick-hppapmap:1.7.0.6 nick-hppapmap-base:1.7 matt-mips64-base2:1.7 matt-mips64:1.5.0.124 haad-dm-base1:1.7 wrstuden-revivesa-base-4:1.7 netbsd-4-0-1-RELEASE:1.5 wrstuden-revivesa-base-3:1.7 wrstuden-revivesa-base-2:1.7 wrstuden-fixsa-newbase:1.5 nick-csl-alignment-base5:1.5 haad-dm:1.7.0.4 haad-dm-base:1.7 wrstuden-revivesa-base-1:1.7 simonb-wapbl-nbase:1.7 yamt-pf42-base4:1.7 simonb-wapbl:1.7.0.2 simonb-wapbl-base:1.7 yamt-pf42-base3:1.6 hpcarm-cleanup-nbase:1.6 yamt-pf42-baseX:1.5 yamt-pf42-base2:1.6 yamt-nfs-mp-base2:1.6 wrstuden-revivesa:1.6.0.2 wrstuden-revivesa-base:1.7 yamt-nfs-mp:1.5.0.122 yamt-nfs-mp-base:1.5 yamt-pf42:1.5.0.120 yamt-pf42-base:1.5 ad-socklock-base1:1.5 yamt-lazymbuf-base15:1.5 yamt-lazymbuf-base14:1.5 keiichi-mipv6-nbase:1.5 mjf-devfs2:1.5.0.118 mjf-devfs2-base:1.7 nick-net80211-sync:1.5.0.116 nick-net80211-sync-base:1.5 keiichi-mipv6:1.5.0.114 keiichi-mipv6-base:1.5 bouyer-xeni386-merge1:1.5 matt-armv6-prevmlocking:1.5 wrstuden-fixsa-base-1:1.5 vmlocking2-base3:1.5 netbsd-4-0:1.5.0.112 netbsd-4-0-RELEASE:1.5 bouyer-xeni386-nbase:1.5 yamt-kmem-base3:1.5 cube-autoconf:1.5.0.110 cube-autoconf-base:1.5 yamt-kmem-base2:1.5 bouyer-xeni386:1.5.0.108 bouyer-xeni386-base:1.5 yamt-kmem:1.5.0.106 yamt-kmem-base:1.5 vmlocking2-base2:1.5 reinoud-bufcleanup-nbase:1.5 vmlocking2:1.5.0.104 vmlocking2-base1:1.5 netbsd-4-0-RC5:1.5 matt-nb4-arm:1.5.0.102 matt-nb4-arm-base:1.5 matt-armv6-nbase:1.5 jmcneill-base:1.5 netbsd-4-0-RC4:1.5 mjf-devfs:1.5.0.100 mjf-devfs-base:1.5 bouyer-xenamd64-base2:1.5 vmlocking-nbase:1.5 yamt-x86pmap-base4:1.5 bouyer-xenamd64:1.5.0.98 bouyer-xenamd64-base:1.5 netbsd-4-0-RC3:1.5 yamt-x86pmap-base3:1.5 yamt-x86pmap-base2:1.5 netbsd-4-0-RC2:1.5 yamt-x86pmap:1.5.0.96 yamt-x86pmap-base:1.5 netbsd-4-0-RC1:1.5 matt-armv6:1.5.0.94 matt-armv6-base:1.5 matt-mips64-base:1.5 jmcneill-pm:1.5.0.92 jmcneill-pm-base:1.5 hpcarm-cleanup:1.5.0.90 hpcarm-cleanup-base:1.5 nick-csl-alignment:1.5.0.88 nick-csl-alignment-base:1.5 netbsd-3-1-1-RELEASE:1.5 netbsd-3-0-3-RELEASE:1.5 yamt-idlelwp-base8:1.5 wrstuden-fixsa:1.5.0.86 wrstuden-fixsa-base:1.5 thorpej-atomic:1.5.0.84 thorpej-atomic-base:1.5 reinoud-bufcleanup:1.5.0.82 reinoud-bufcleanup-base:1.5 mjf-ufs-trans:1.5.0.80 mjf-ufs-trans-base:1.5 vmlocking:1.5.0.78 vmlocking-base:1.5 ad-audiomp:1.5.0.76 ad-audiomp-base:1.5 yamt-idlelwp:1.5.0.74 post-newlock2-merge:1.5 newlock2-nbase:1.5 yamt-splraiseipl-base5:1.5 yamt-splraiseipl-base4:1.5 yamt-splraiseipl-base3:1.5 abandoned-netbsd-4-base:1.5 abandoned-netbsd-4:1.5.0.64 netbsd-3-1:1.5.0.70 netbsd-3-1-RELEASE:1.5 netbsd-3-0-2-RELEASE:1.5 yamt-splraiseipl-base2:1.5 netbsd-3-1-RC4:1.5 yamt-splraiseipl:1.5.0.68 yamt-splraiseipl-base:1.5 netbsd-3-1-RC3:1.5 yamt-pdpolicy-base9:1.5 newlock2:1.5.0.66 newlock2-base:1.5 yamt-pdpolicy-base8:1.5 netbsd-3-1-RC2:1.5 netbsd-3-1-RC1:1.5 yamt-pdpolicy-base7:1.5 netbsd-4:1.5.0.72 netbsd-4-base:1.5 yamt-pdpolicy-base6:1.5 chap-midi-nbase:1.5 netbsd-3-0-1-RELEASE:1.5 gdamore-uart:1.5.0.62 gdamore-uart-base:1.5 simonb-timcounters-final:1.5 yamt-pdpolicy-base5:1.5 chap-midi:1.5.0.60 chap-midi-base:1.5 yamt-pdpolicy-base4:1.5 yamt-pdpolicy-base3:1.5 peter-altq-base:1.5 peter-altq:1.5.0.58 yamt-pdpolicy-base2:1.5 elad-kernelauth-base:1.5 elad-kernelauth:1.5.0.56 yamt-pdpolicy:1.5.0.54 yamt-pdpolicy-base:1.5 yamt-uio_vmspace-base5:1.5 simonb-timecounters:1.5.0.52 simonb-timecounters-base:1.5 rpaulo-netinet-merge-pcb:1.5.0.50 rpaulo-netinet-merge-pcb-base:1.5 yamt-uio_vmspace:1.5.0.48 netbsd-3-0:1.5.0.46 netbsd-3-0-RELEASE:1.5 netbsd-3-0-RC6:1.5 yamt-readahead-base3:1.5 netbsd-3-0-RC5:1.5 netbsd-3-0-RC4:1.5 netbsd-3-0-RC3:1.5 yamt-readahead-base2:1.5 netbsd-3-0-RC2:1.5 yamt-readahead-pervnode:1.5 yamt-readahead-perfile:1.5 yamt-readahead:1.5.0.44 yamt-readahead-base:1.5 netbsd-3-0-RC1:1.5 yamt-vop-base3:1.5 netbsd-2-0-3-RELEASE:1.5 netbsd-2-1:1.5.0.42 yamt-vop-base2:1.5 thorpej-vnode-attr:1.5.0.40 thorpej-vnode-attr-base:1.5 netbsd-2-1-RELEASE:1.5 yamt-vop:1.5.0.38 yamt-vop-base:1.5 netbsd-2-1-RC6:1.5 netbsd-2-1-RC5:1.5 netbsd-2-1-RC4:1.5 netbsd-2-1-RC3:1.5 netbsd-2-1-RC2:1.5 netbsd-2-1-RC1:1.5 yamt-lazymbuf:1.5.0.36 yamt-km-base4:1.5 netbsd-2-0-2-RELEASE:1.5 yamt-km-base3:1.5 netbsd-3:1.5.0.34 netbsd-3-base:1.5 yamt-km-base2:1.5 yamt-km:1.5.0.30 yamt-km-base:1.5 kent-audio2:1.5.0.28 kent-audio2-base:1.5 netbsd-2-0-1-RELEASE:1.5 kent-audio1-beforemerge:1.5 netbsd-2:1.5.0.26 netbsd-2-base:1.5 kent-audio1:1.5.0.24 kent-audio1-base:1.5 netbsd-2-0-RELEASE:1.5 netbsd-2-0-RC5:1.5 netbsd-2-0-RC4:1.5 netbsd-2-0-RC3:1.5 netbsd-2-0-RC2:1.5 netbsd-2-0-RC1:1.5 netbsd-2-0:1.5.0.22 netbsd-2-0-base:1.5 netbsd-1-6-PATCH002-RELEASE:1.5 netbsd-1-6-PATCH002:1.5 netbsd-1-6-PATCH002-RC4:1.5 netbsd-1-6-PATCH002-RC3:1.5 netbsd-1-6-PATCH002-RC2:1.5 netbsd-1-6-PATCH002-RC1:1.5 ktrace-lwp:1.5.0.20 ktrace-lwp-base:1.5 netbsd-1-6-PATCH001:1.5 netbsd-1-6-PATCH001-RELEASE:1.5 netbsd-1-6-PATCH001-RC3:1.5 netbsd-1-6-PATCH001-RC2:1.5 netbsd-1-6-PATCH001-RC1:1.5 nathanw_sa_end:1.1.4.2 nathanw_sa_before_merge:1.5 fvdl_fs64_base:1.5 gmcgarry_ctxsw:1.5.0.18 gmcgarry_ctxsw_base:1.5 gmcgarry_ucred:1.5.0.16 gmcgarry_ucred_base:1.5 nathanw_sa_base:1.5 kqueue-aftermerge:1.5 kqueue-beforemerge:1.5 netbsd-1-6-RELEASE:1.5 netbsd-1-6-RC3:1.5 netbsd-1-6-RC2:1.5 netbsd-1-6-RC1:1.5 netbsd-1-6:1.5.0.14 netbsd-1-6-base:1.5 gehenna-devsw:1.5.0.12 gehenna-devsw-base:1.5 eeh-devprop:1.5.0.10 eeh-devprop-base:1.5 newlock:1.5.0.8 newlock-base:1.5 ifpoll-base:1.5 thorpej-mips-cache:1.5.0.4 thorpej-mips-cache-base:1.5 thorpej-devvp-base3:1.5 thorpej-devvp-base2:1.5 post-chs-ubcperf:1.5 pre-chs-ubcperf:1.5 thorpej-devvp:1.5.0.2 thorpej-devvp-base:1.5 kqueue:1.4.0.2 kqueue-base:1.5 thorpej_scsipi_beforemerge:1.1 nathanw_sa:1.1.0.4 thorpej_scsipi_nbase:1.1 thorpej_scsipi_base:1.1 thorpej_scsipi:1.1.0.2; locks; strict; comment @ * @; 1.11 date 2020.04.13.15.16.14; author ad; state Exp; branches; next 1.10; commitid cuRQSywLhxBHKe4C; 1.10 date 2019.12.28.08.33.35; author martin; state Exp; branches 1.10.6.1; next 1.9; commitid 5QfXF2B9gFwIXrQB; 1.9 date 2019.12.27.12.51.57; author ad; state Exp; branches; next 1.8; commitid kavNWDzTg832qlQB; 1.8 date 2010.11.06.15.48.00; author uebayasi; state Exp; branches 1.8.60.1; next 1.7; 1.7 date 2008.06.04.12.45.28; author ad; state Exp; branches 1.7.16.1 1.7.18.1 1.7.20.1; next 1.6; 1.6 date 2008.04.28.20.24.12; author martin; state Exp; branches 1.6.2.1; next 1.5; 1.5 date 2001.08.25.20.37.46; author chs; state Exp; branches 1.5.118.1 1.5.120.1 1.5.122.1; next 1.4; 1.4 date 2001.05.25.04.06.17; author chs; state Exp; branches 1.4.2.1; next 1.3; 1.3 date 2001.05.02.01.22.20; author thorpej; state Exp; branches; next 1.2; 1.2 date 2001.04.29.04.23.21; author thorpej; state Exp; branches; next 1.1; 1.1 date 2000.06.26.14.21.19; author mrg; state Exp; branches 1.1.2.1 1.1.4.1; next ; 1.10.6.1 date 2020.04.20.11.29.14; author bouyer; state Exp; branches; next ; commitid 4WLfIgNPymVsg75C; 1.8.60.1 date 2020.04.08.14.09.05; author martin; state Exp; branches; next 1.8.60.2; commitid Qli2aW9E74UFuA3C; 1.8.60.2 date 2020.04.21.18.42.46; author martin; state Exp; branches; next ; commitid 86tA4aEmdr3VCh5C; 1.7.16.1 date 2011.06.03.02.43.42; author matt; state Exp; branches; next 1.7.16.2; 1.7.16.2 date 2011.06.03.07.56.08; author matt; state Exp; branches; next 1.7.16.3; 1.7.16.3 date 2011.11.04.15.32.27; author matt; state Exp; branches; next 1.7.16.4; 1.7.16.4 date 2012.02.09.03.05.01; author matt; state Exp; branches; next 1.7.16.5; 1.7.16.5 date 2012.02.16.04.20.46; author matt; state Exp; branches; next 1.7.16.6; 1.7.16.6 date 2013.12.19.01.22.02; author matt; state Exp; branches; next ; 1.7.18.1 date 2010.04.28.08.22.05; author uebayasi; state Exp; branches; next ; 1.7.20.1 date 2011.03.05.20.56.38; author rmind; state Exp; branches; next ; 1.6.2.1 date 2008.06.23.04.32.06; author wrstuden; state Exp; branches; next ; 1.5.118.1 date 2008.06.02.13.24.38; author mjf; state Exp; branches; next 1.5.118.2; 1.5.118.2 date 2008.06.05.19.14.38; author mjf; state Exp; branches; next ; 1.5.120.1 date 2008.05.18.12.35.56; author yamt; state Exp; branches; next 1.5.120.2; 1.5.120.2 date 2008.06.17.09.15.17; author yamt; state Exp; branches; next ; 1.5.122.1 date 2008.05.16.02.26.01; author yamt; state Exp; branches; next 1.5.122.2; 1.5.122.2 date 2009.05.04.08.14.40; author yamt; state Exp; branches; next ; 1.4.2.1 date 2001.09.13.01.16.34; author thorpej; state Exp; branches; next ; 1.1.2.1 date 2000.06.26.14.21.19; author bouyer; state dead; branches; next 1.1.2.2; 1.1.2.2 date 2000.11.20.18.12.06; author bouyer; state Exp; branches; next ; 1.1.4.1 date 2001.06.21.20.10.46; author nathanw; state Exp; branches; next 1.1.4.2; 1.1.4.2 date 2001.09.21.22.37.17; author nathanw; state Exp; branches; next ; desc @@ 1.11 log @Comments @ text @/* $NetBSD: uvm_pglist.h,v 1.10 2019/12/28 08:33:35 martin Exp $ */ /*- * Copyright (c) 2000, 2001, 2008, 2019 The NetBSD Foundation, Inc. * All rights reserved. * * This code is derived from software contributed to The NetBSD Foundation * by Jason R. Thorpe, and by Andrew Doran. * * 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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. */ #ifndef _UVM_UVM_PGLIST_H_ #define _UVM_UVM_PGLIST_H_ #include /* * This defines the type of a page queue, e.g. active list, inactive * list, etc. */ struct vm_page; TAILQ_HEAD(pglist, vm_page); LIST_HEAD(pgflist, vm_page); /* * The global uvm.page_free list (uvm_page.c, uvm_pglist.c). Free pages are * stored according to freelist, bucket, and cache colour. * * pglist = &uvm.page_free[freelist].pgfl_buckets[bucket].pgb_color[color]; * * Freelists provide a priority ordering of pages for allocation, based upon * how valuable they are for special uses (e.g. device driver DMA). MD * code decides the number and structure of these. They are always arranged * in descending order of allocation priority. * * Pages are then grouped in buckets according to some common factor, for * example L2/L3 cache locality. Each bucket has its own lock, and the * locks are shared among freelists for the same numbered buckets. * * Inside each bucket, pages are further distributed by cache color. * * We want these data structures to occupy as few cache lines as possible, * as they will be highly contended. */ struct pgflbucket { uintptr_t pgb_nfree; /* total # free pages, all colors */ struct pgflist pgb_colors[1]; /* variable size array */ }; /* * 8 buckets should be enough to cover most all current x86 systems (2019), * given the way package/core/smt IDs are structured on x86. For systems * that report high package counts despite having a single physical CPU * package (e.g. Ampere eMAG) a little bit of sharing isn't going to hurt. */ #define PGFL_MAX_BUCKETS 8 struct pgfreelist { struct pgflbucket *pgfl_buckets[PGFL_MAX_BUCKETS]; }; /* * Lock for each bucket. */ union uvm_freelist_lock { kmutex_t lock; uint8_t padding[COHERENCY_UNIT]; }; extern union uvm_freelist_lock uvm_freelist_locks[PGFL_MAX_BUCKETS]; #endif /* _UVM_UVM_PGLIST_H_ */ @ 1.10 log @Include here directly to have a sane default for COHERENCY_UNIT. @ text @d1 1 a1 1 /* $NetBSD: uvm_pglist.h,v 1.9 2019/12/27 12:51:57 ad Exp $ */ d52 3 a54 1 * how valuable they are for special uses (e.g. device driver DMA). a70 4 * At the root, the freelists. MD code decides the number and structure of * these. They are always arranged in descending order of allocation * priority. * d74 1 a74 2 * package (e.g. Ampere eMAG) a little bit of sharing isn't going to hurt * in the least. @ 1.10.6.1 log @Sync with HEAD @ text @d1 1 a1 1 /* $NetBSD: uvm_pglist.h,v 1.11 2020/04/13 15:16:14 ad Exp $ */ d52 1 a52 3 * how valuable they are for special uses (e.g. device driver DMA). MD * code decides the number and structure of these. They are always arranged * in descending order of allocation priority. d69 4 d76 2 a77 1 * package (e.g. Ampere eMAG) a little bit of sharing isn't going to hurt. @ 1.9 log @Redo the page allocator to perform better, especially on multi-core and multi-socket systems. Proposed on tech-kern. While here: - add rudimentary NUMA support - needs more work. - remove now unused "listq" from vm_page. @ text @d1 1 a1 1 /* $NetBSD: uvm_pglist.h,v 1.8 2010/11/06 15:48:00 uebayasi Exp $ */ d35 2 @ 1.8 log @Provide a forward declaration of "struct vm_page", whose internal is opaque to uvm_pglist.h users. Users don't need to pull in uvm_page.h. @ text @d1 1 a1 1 /* $NetBSD$ */ d4 1 a4 1 * Copyright (c) 2000, 2001, 2008 The NetBSD Foundation, Inc. d8 1 a8 1 * by Jason R. Thorpe. d44 16 a59 2 * A page free list consists of free pages of unknown contents and free * pages of all zeros. a60 4 #define PGFL_UNKNOWN 0 #define PGFL_ZEROS 1 #define PGFL_NQUEUES 2 d62 2 a63 1 struct pgflist pgfl_queues[PGFL_NQUEUES]; d66 12 d79 9 a87 1 struct pgflbucket *pgfl_buckets; d89 1 @ 1.8.60.1 log @Merge changes from current as of 20200406 @ text @d4 1 a4 1 * Copyright (c) 2000, 2001, 2008, 2019 The NetBSD Foundation, Inc. d8 1 a8 1 * by Jason R. Thorpe, and by Andrew Doran. a34 2 #include d44 2 a45 16 * The global uvm.page_free list (uvm_page.c, uvm_pglist.c). Free pages are * stored according to freelist, bucket, and cache colour. * * pglist = &uvm.page_free[freelist].pgfl_buckets[bucket].pgb_color[color]; * * Freelists provide a priority ordering of pages for allocation, based upon * how valuable they are for special uses (e.g. device driver DMA). * * Pages are then grouped in buckets according to some common factor, for * example L2/L3 cache locality. Each bucket has its own lock, and the * locks are shared among freelists for the same numbered buckets. * * Inside each bucket, pages are further distributed by cache color. * * We want these data structures to occupy as few cache lines as possible, * as they will be highly contended. d47 4 d52 1 a52 2 uintptr_t pgb_nfree; /* total # free pages, all colors */ struct pgflist pgb_colors[1]; /* variable size array */ a54 12 /* * At the root, the freelists. MD code decides the number and structure of * these. They are always arranged in descending order of allocation * priority. * * 8 buckets should be enough to cover most all current x86 systems (2019), * given the way package/core/smt IDs are structured on x86. For systems * that report high package counts despite having a single physical CPU * package (e.g. Ampere eMAG) a little bit of sharing isn't going to hurt * in the least. */ #define PGFL_MAX_BUCKETS 8 d56 1 a56 9 struct pgflbucket *pgfl_buckets[PGFL_MAX_BUCKETS]; }; /* * Lock for each bucket. */ union uvm_freelist_lock { kmutex_t lock; uint8_t padding[COHERENCY_UNIT]; a57 1 extern union uvm_freelist_lock uvm_freelist_locks[PGFL_MAX_BUCKETS]; @ 1.8.60.2 log @Sync with HEAD @ text @d52 1 a52 3 * how valuable they are for special uses (e.g. device driver DMA). MD * code decides the number and structure of these. They are always arranged * in descending order of allocation priority. d69 4 d76 2 a77 1 * package (e.g. Ampere eMAG) a little bit of sharing isn't going to hurt. @ 1.7 log @- vm_page: put listq, pageq into a union alongside a LIST_ENTRY, so we can use both types of list. - Make page coloring and idle zero state per-CPU. - Maintain per-CPU page freelists. When freeing, put pages onto the local CPU's lists and the global lists. When allocating, prefer to take pages from the local CPU. If none are available take from the global list as done now. Proposed on tech-kern@@. @ text @d1 1 a1 1 /* $NetBSD: uvm_pglist.h,v 1.6 2008/04/28 20:24:12 martin Exp $ */ d39 1 @ 1.7.16.1 log @Rework page free lists to be sorted by color first rather than free_list. Kept per color PGFL_* counter in each page free list. Minor cleanups. @ text @d1 1 a1 1 /* uvm_pglist.h,v 1.7 2008/06/04 12:45:28 ad Exp */ d44 1 a44 2 * pages of all zeros. For each color, there is a global page free list * as well as one for each cpu. d50 4 d55 1 a55 2 u_long pgfl_pages[PGFL_NQUEUES]; struct pgflist pgfl_queues[VM_NFREELIST][PGFL_NQUEUES]; @ 1.7.16.2 log @Restore $NetBSD$ @ text @d1 1 a1 1 /* $NetBSD$ */ @ 1.7.16.3 log @#include if VM_NFREELIST isn't defined. @ text @d1 1 a1 1 /* $NetBSD: uvm_pglist.h,v 1.7.16.2 2011/06/03 07:56:08 matt Exp $ */ a34 4 #ifndef VM_NFREELIST #include #endif @ 1.7.16.4 log @Major changes to uvm. Support multiple collections (groups) of free pages and run the page reclaimation algorithm on each group independently. @ text @d1 1 a1 1 /* $NetBSD: uvm_pglist.h,v 1.7.16.3 2011/11/04 15:32:27 matt Exp $ */ a57 6 /* pagealloc counters */ uint64_t pgfl_colorfail;/* pagealloc where we got no page */ uint64_t pgfl_colorhit; /* pagealloc where we got optimal color */ uint64_t pgfl_colormiss;/* pagealloc where we didn't */ uint64_t pgfl_colorany; /* pagealloc where we wanted any color */ @ 1.7.16.5 log @Track the victims selected by the pagedaemon and what happens to then. Keep a hint for what page group has the most free pages for a given color. @ text @d1 1 a1 1 /* $NetBSD: uvm_pglist.h,v 1.7.16.4 2012/02/09 03:05:01 matt Exp $ */ a57 2 struct uvm_pggroup *pgfl_pggroups[VM_NFREELIST]; struct uvm_pggroup *pgfl_hint; @ 1.7.16.6 log @error out if VM_NFREELIST isn't defined @ text @d1 1 a1 1 /* $NetBSD: uvm_pglist.h,v 1.7.16.5 2012/02/16 04:20:46 matt Exp $ */ a36 3 #ifndef VM_NFREELIST #error did not define VM_NFREELIST #endif @ 1.7.20.1 log @sync with head @ text @d1 1 a1 1 /* $NetBSD$ */ a38 1 struct vm_page; @ 1.7.18.1 log @Don't expose uvm_page.h internal for usual uvm(9) users. @ text @d1 1 a1 1 /* $NetBSD$ */ a38 1 struct vm_page; @ 1.6 log @Remove clause 3 and 4 from TNF licenses @ text @d1 1 a1 1 /* $NetBSD: uvm_pglist.h,v 1.5 2001/08/25 20:37:46 chs Exp $ */ d4 1 a4 1 * Copyright (c) 2000, 2001 The NetBSD Foundation, Inc. d40 1 d51 1 a51 1 struct pglist pgfl_queues[PGFL_NQUEUES]; @ 1.6.2.1 log @Sync w/ -current. 34 merge conflicts to follow. @ text @d1 1 a1 1 /* $NetBSD: uvm_pglist.h,v 1.6 2008/04/28 20:24:12 martin Exp $ */ d4 1 a4 1 * Copyright (c) 2000, 2001, 2008 The NetBSD Foundation, Inc. a39 1 LIST_HEAD(pgflist, vm_page); d50 1 a50 1 struct pgflist pgfl_queues[PGFL_NQUEUES]; @ 1.5 log @use the correct symbol for multi-include protection. @ text @d1 1 a1 1 /* $NetBSD: uvm_pglist.h,v 1.4 2001/05/25 04:06:17 chs Exp $ */ a17 7 * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * This product includes software developed by the NetBSD * Foundation, Inc. and its contributors. * 4. Neither the name of The NetBSD Foundation nor the names of its * contributors may be used to endorse or promote products derived * from this software without specific prior written permission. @ 1.5.118.1 log @Sync with HEAD. @ text @d1 1 a1 1 /* $NetBSD$ */ d18 7 @ 1.5.118.2 log @Sync with HEAD. Also fix build. @ text @d4 1 a4 1 * Copyright (c) 2000, 2001, 2008 The NetBSD Foundation, Inc. a39 1 LIST_HEAD(pgflist, vm_page); d50 1 a50 1 struct pgflist pgfl_queues[PGFL_NQUEUES]; @ 1.5.120.1 log @sync with head. @ text @d1 1 a1 1 /* $NetBSD: uvm_pglist.h,v 1.5 2001/08/25 20:37:46 chs Exp $ */ d18 7 @ 1.5.120.2 log @sync with head. @ text @d1 1 a1 1 /* $NetBSD: uvm_pglist.h,v 1.5.120.1 2008/05/18 12:35:56 yamt Exp $ */ d4 1 a4 1 * Copyright (c) 2000, 2001, 2008 The NetBSD Foundation, Inc. a39 1 LIST_HEAD(pgflist, vm_page); d50 1 a50 1 struct pgflist pgfl_queues[PGFL_NQUEUES]; @ 1.5.122.1 log @sync with head. @ text @d1 1 a1 1 /* $NetBSD: uvm_pglist.h,v 1.5 2001/08/25 20:37:46 chs Exp $ */ d18 7 @ 1.5.122.2 log @sync with head. @ text @d1 1 a1 1 /* $NetBSD: uvm_pglist.h,v 1.5.122.1 2008/05/16 02:26:01 yamt Exp $ */ d4 1 a4 1 * Copyright (c) 2000, 2001, 2008 The NetBSD Foundation, Inc. a39 1 LIST_HEAD(pgflist, vm_page); d50 1 a50 1 struct pgflist pgfl_queues[PGFL_NQUEUES]; @ 1.4 log @remove trailing whitespace. @ text @d1 1 a1 1 /* $NetBSD: uvm_pglist.h,v 1.3 2001/05/02 01:22:20 thorpej Exp $ */ d39 2 a40 2 #ifndef _PGLIST_H_ #define _PGLIST_H_ d64 1 a64 1 #endif /* _PGLIST_H_ */ @ 1.4.2.1 log @Update the kqueue branch to HEAD. @ text @d1 1 a1 1 /* $NetBSD: uvm_pglist.h,v 1.5 2001/08/25 20:37:46 chs Exp $ */ d39 2 a40 2 #ifndef _UVM_UVM_PGLIST_H_ #define _UVM_UVM_PGLIST_H_ d64 1 a64 1 #endif /* _UVM_UVM_PGLIST_H_ */ @ 1.3 log @Support dynamic sizing of the page color bins. We also support dynamically re-coloring pages; as machine-dependent code discovers the size of the system's caches, it may call uvm_page_recolor() with the new number of colors to use. If the new mumber of colors is smaller (or equal to) the current number of colors, then uvm_page_recolor() is a no-op. The system defaults to one bucket if machine-dependent code does not initialize uvmexp.ncolors before uvm_page_init() is called. Note that the number of color bins should be initialized to something reasonable as early as possible -- for many early memory allocations, we live with the consequences of the page choice for the lifetime of the boot. @ text @d1 1 a1 1 /* $NetBSD: uvm_pglist.h,v 1.2 2001/04/29 04:23:21 thorpej Exp $ */ d46 1 a46 1 TAILQ_HEAD(pglist, vm_page); @ 1.2 log @Implement page coloring, using a round-robin bucket selection algorithm (Solaris calls this "Bin Hopping"). This implementation currently relies on MD code to define a constant defining the number of buckets. This will change reasonably soon (MD code will be able to dynamically size the bucket array). @ text @d1 1 a1 1 /* $NetBSD: uvm_pglist.h,v 1.1 2000/06/26 14:21:19 mrg Exp $ */ d61 1 a61 1 struct pgflbucket pgfl_buckets[VM_PGCOLOR_BUCKETS]; @ 1.1 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: pglist.h,v 1.3 2000/04/24 17:12:02 thorpej Exp $ */ d4 1 a4 1 * Copyright (c) 2000 The NetBSD Foundation, Inc. d56 4 d61 1 a61 1 struct pglist pgfl_queues[PGFL_NQUEUES]; d64 1 a64 1 #endif @ 1.1.2.1 log @file uvm_pglist.h was added on branch thorpej_scsipi on 2000-11-20 18:12:06 +0000 @ text @d1 60 @ 1.1.2.2 log @Update thorpej_scsipi to -current as of a month ago @ text @a0 60 /* $NetBSD: uvm_pglist.h,v 1.1.2.1 2000/11/20 18:12:06 bouyer Exp $ */ /*- * Copyright (c) 2000 The NetBSD Foundation, Inc. * All rights reserved. * * This code is derived from software contributed to The NetBSD Foundation * by Jason R. Thorpe. * * 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 NetBSD * Foundation, Inc. and its contributors. * 4. Neither the name of The NetBSD Foundation 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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. */ #ifndef _PGLIST_H_ #define _PGLIST_H_ /* * This defines the type of a page queue, e.g. active list, inactive * list, etc. */ TAILQ_HEAD(pglist, vm_page); /* * A page free list consists of free pages of unknown contents and free * pages of all zeros. */ #define PGFL_UNKNOWN 0 #define PGFL_ZEROS 1 #define PGFL_NQUEUES 2 struct pgfreelist { struct pglist pgfl_queues[PGFL_NQUEUES]; }; #endif @ 1.1.4.1 log @Catch up to -current. @ text @d1 1 a1 1 /* $NetBSD: uvm_pglist.h,v 1.1 2000/06/26 14:21:19 mrg Exp $ */ d4 1 a4 1 * Copyright (c) 2000, 2001 The NetBSD Foundation, Inc. d46 1 a46 1 TAILQ_HEAD(pglist, vm_page); d56 1 a56 1 struct pgflbucket { d60 1 a60 5 struct pgfreelist { struct pgflbucket *pgfl_buckets; }; #endif /* _PGLIST_H_ */ @ 1.1.4.2 log @Catch up to -current. @ text @d1 1 a1 1 /* $NetBSD: uvm_pglist.h,v 1.1.4.1 2001/06/21 20:10:46 nathanw Exp $ */ d39 2 a40 2 #ifndef _UVM_UVM_PGLIST_H_ #define _UVM_UVM_PGLIST_H_ d64 1 a64 1 #endif /* _UVM_UVM_PGLIST_H_ */ @