121642577SAlfred Perlstein.\" 221642577SAlfred Perlstein.\" Copyright (C) 2001 Chad David <davidc@acns.ab.ca>. All rights reserved. 321642577SAlfred Perlstein.\" 421642577SAlfred Perlstein.\" Redistribution and use in source and binary forms, with or without 521642577SAlfred Perlstein.\" modification, are permitted provided that the following conditions 621642577SAlfred Perlstein.\" are met: 721642577SAlfred Perlstein.\" 1. Redistributions of source code must retain the above copyright 821642577SAlfred Perlstein.\" notice(s), this list of conditions and the following disclaimer as 921642577SAlfred Perlstein.\" the first lines of this file unmodified other than the possible 1021642577SAlfred Perlstein.\" addition of one or more copyright notices. 1121642577SAlfred Perlstein.\" 2. Redistributions in binary form must reproduce the above copyright 1221642577SAlfred Perlstein.\" notice(s), this list of conditions and the following disclaimer in the 1321642577SAlfred Perlstein.\" documentation and/or other materials provided with the distribution. 1421642577SAlfred Perlstein.\" 1521642577SAlfred Perlstein.\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) ``AS IS'' AND ANY 1621642577SAlfred Perlstein.\" EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 1721642577SAlfred Perlstein.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 1821642577SAlfred Perlstein.\" DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) BE LIABLE FOR ANY 1921642577SAlfred Perlstein.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 2021642577SAlfred Perlstein.\" (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 2121642577SAlfred Perlstein.\" SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 2221642577SAlfred Perlstein.\" CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 2321642577SAlfred Perlstein.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 2421642577SAlfred Perlstein.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH 2521642577SAlfred Perlstein.\" DAMAGE. 2621642577SAlfred Perlstein.\" 2721642577SAlfred Perlstein.Dd December 1, 2001 2821642577SAlfred Perlstein.Dt VM_PAGE_BITS 9 2921642577SAlfred Perlstein.Os 3021642577SAlfred Perlstein.Sh NAME 3121642577SAlfred Perlstein.Nm vm_page_bits , 3221642577SAlfred Perlstein.Nm vm_page_set_validclean , 3321642577SAlfred Perlstein.Nm vm_page_clear_dirty , 3421642577SAlfred Perlstein.Nm vm_page_set_invalid , 3521642577SAlfred Perlstein.Nm vm_page_zero_invalid , 3621642577SAlfred Perlstein.Nm vm_page_is_valid , 3721642577SAlfred Perlstein.Nm vm_page_test_dirty , 3821642577SAlfred Perlstein.Nm vm_page_dirty , 3921642577SAlfred Perlstein.Nm vm_page_undirty 4021642577SAlfred Perlstein.Nd "manage page clean and dirty bits" 4121642577SAlfred Perlstein.Sh SYNOPSIS 4221642577SAlfred Perlstein.In sys/param.h 4321642577SAlfred Perlstein.In vm/vm.h 4421642577SAlfred Perlstein.In vm/vm_page.h 4521642577SAlfred Perlstein.Ft int 4621642577SAlfred Perlstein.Fn vm_page_bits "int base" "int size" 4721642577SAlfred Perlstein.Ft void 4821642577SAlfred Perlstein.Fn vm_page_set_validclean "vm_page_t m" "int base" "int size" 4921642577SAlfred Perlstein.Ft void 5021642577SAlfred Perlstein.Fn vm_page_clear_dirty "vm_page_t m" "int base" "int size" 5121642577SAlfred Perlstein.Ft void 5221642577SAlfred Perlstein.Fn vm_page_set_invalid "vm_page_t m" "int base" "int size" 5321642577SAlfred Perlstein.Ft void 5421642577SAlfred Perlstein.Fn vm_page_zero_invalid "vm_page_t m" "boolean_t setvalid" 5521642577SAlfred Perlstein.Ft int 5621642577SAlfred Perlstein.Fn vm_page_is_valid "vm_page_t m" "int base" "int size" 5721642577SAlfred Perlstein.Ft void 5821642577SAlfred Perlstein.Fn vm_page_test_dirty "vm_page_t m" 5921642577SAlfred Perlstein.Ft void 6021642577SAlfred Perlstein.Fn vm_page_dirty "vm_page_t m" 6121642577SAlfred Perlstein.Ft void 6221642577SAlfred Perlstein.Fn vm_page_undirty "vm_page_t m" 6321642577SAlfred Perlstein.Sh DESCRIPTION 6421642577SAlfred Perlstein.Fn vm_page_bits 6521642577SAlfred Perlsteincalculates the bits representing the 6621642577SAlfred Perlstein.Dv DEV_BSIZE 6721642577SAlfred Perlsteinrange of bytes between 6821642577SAlfred Perlstein.Fa base 6921642577SAlfred Perlsteinand 7021642577SAlfred Perlstein.Fa size . 7121642577SAlfred PerlsteinThe byte range is expected to be within a single page, and if 7221642577SAlfred Perlstein.Fa size 731f620c2eSRuslan Ermilovis zero, no bits will be set. 7421642577SAlfred Perlstein.Pp 7521642577SAlfred Perlstein.Fn vm_page_set_validclean 7621642577SAlfred Perlsteinflags the byte range between 7721642577SAlfred Perlstein.Fa base 7821642577SAlfred Perlsteinand 7921642577SAlfred Perlstein.Fa size 8021642577SAlfred Perlsteinas valid and clean. 8121642577SAlfred PerlsteinThe range is expected to be 8221642577SAlfred Perlstein.Dv DEV_BSIZE 8321642577SAlfred Perlsteinaligned and no larger than 8421642577SAlfred Perlstein.Dv PAGE_SIZE . 85c2025a76SJoel DahlIf it is not properly aligned, any unaligned chunks of the 8621642577SAlfred Perlstein.Dv DEV_BSIZE 8721642577SAlfred Perlsteinblocks at the beginning and end of the range will be zeroed. 8821642577SAlfred Perlstein.Pp 8921642577SAlfred PerlsteinIf 9021642577SAlfred Perlstein.Fa base 9121642577SAlfred Perlsteinis zero and 9221642577SAlfred Perlstein.Fa size 931f620c2eSRuslan Ermilovis one page, the modified bit in the page map is cleared; as well, 9421642577SAlfred Perlsteinthe 95ed127578SKonstantin Belousov.Dv VPO_NOSYNC 9621642577SAlfred Perlsteinflag is cleared. 9721642577SAlfred Perlstein.Pp 9821642577SAlfred Perlstein.Fn vm_page_clear_dirty 9921642577SAlfred Perlsteinclears the dirty bits within a page in the range between 10021642577SAlfred Perlstein.Fa base 10121642577SAlfred Perlsteinand 10221642577SAlfred Perlstein.Fa size . 10321642577SAlfred PerlsteinThe bits representing the range are calculated by calling 10421642577SAlfred Perlstein.Fn vm_page_bits . 10521642577SAlfred Perlstein.Pp 10621642577SAlfred Perlstein.Fn vm_page_set_invalid 10721642577SAlfred Perlsteinclears the bits in both the valid and dirty flags representing 10821642577SAlfred Perlsteinthe 10921642577SAlfred Perlstein.Dv DEV_BSIZE 11021642577SAlfred Perlsteinblocks between 11121642577SAlfred Perlstein.Fa base 11221642577SAlfred Perlsteinand 11321642577SAlfred Perlstein.Fa size 11421642577SAlfred Perlsteinin the page. 11521642577SAlfred PerlsteinThe bits are calculated by calling 11621642577SAlfred Perlstein.Fn vm_page_bits . 11721642577SAlfred PerlsteinAs well as clearing the bits within the page, the generation 11821642577SAlfred Perlsteinnumber within the object holding the page is incremented. 11921642577SAlfred Perlstein.Pp 12021642577SAlfred Perlstein.Fn vm_page_zero_invalid 1211f620c2eSRuslan Ermilovzeroes all of the blocks within the page that are currently 1221f620c2eSRuslan Ermilovflagged as invalid. 12321642577SAlfred PerlsteinIf 12421642577SAlfred Perlstein.Fa setvalid 1251f620c2eSRuslan Ermilovis 1261f620c2eSRuslan Ermilov.Dv TRUE , 1271f620c2eSRuslan Ermilovall of the valid bits within the page are set. 12821642577SAlfred Perlstein.Pp 12921642577SAlfred PerlsteinIn some cases, such as NFS, the valid bits cannot be set 13021642577SAlfred Perlsteinin order to maintain cache consistency. 13121642577SAlfred Perlstein.Pp 13221642577SAlfred Perlstein.Fn vm_page_is_valid 13321642577SAlfred Perlsteinchecks to determine if the all of the 13421642577SAlfred Perlstein.Dv DEV_BSIZE 13521642577SAlfred Perlsteinblocks between 13621642577SAlfred Perlstein.Fa base 13721642577SAlfred Perlsteinand 13821642577SAlfred Perlstein.Fa size 13921642577SAlfred Perlsteinof the page are valid. 14021642577SAlfred PerlsteinIf 14121642577SAlfred Perlstein.Fa size 14221642577SAlfred Perlsteinis zero and the page is entirely invalid 14321642577SAlfred Perlstein.Fn vm_page_is_valid 1441f620c2eSRuslan Ermilovwill return 1451f620c2eSRuslan Ermilov.Dv TRUE , 1461f620c2eSRuslan Ermilovin all other cases a size of zero will return 1471f620c2eSRuslan Ermilov.Dv FALSE . 14821642577SAlfred Perlstein.Pp 14921642577SAlfred Perlstein.Fn vm_page_test_dirty 15021642577SAlfred Perlsteinchecks if a page has been modified via any of its physical maps, 1511f620c2eSRuslan Ermilovand if so, flags the entire page as dirty. 15221642577SAlfred Perlstein.Fn vm_page_dirty 15321642577SAlfred Perlsteinis called to modify the dirty bits. 15421642577SAlfred Perlstein.Pp 15521642577SAlfred Perlstein.Fn vm_page_dirty 15621642577SAlfred Perlsteinflags the entire page as dirty. 15721642577SAlfred PerlsteinIt is expected that the page is not currently on the cache queue. 15821642577SAlfred Perlstein.Pp 15921642577SAlfred Perlstein.Fn vm_page_undirty 16021642577SAlfred Perlsteinclears all of the dirty bits in a page. 16121642577SAlfred Perlstein.Sh NOTES 16221642577SAlfred PerlsteinNone of these functions are allowed to block. 16321642577SAlfred Perlstein.Sh AUTHORS 164571dba6eSHiten PandyaThis manual page was written by 165*8a7314fcSBaptiste Daroussin.An Chad David Aq Mt davidc@acns.ab.ca . 166