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.\" $FreeBSD$ 2821642577SAlfred Perlstein.\" 2921642577SAlfred Perlstein.Dd December 1, 2001 3021642577SAlfred Perlstein.Dt VM_PAGE_BITS 9 3121642577SAlfred Perlstein.Os 3221642577SAlfred Perlstein.Sh NAME 3321642577SAlfred Perlstein.Nm vm_page_bits , 3421642577SAlfred Perlstein.Nm vm_page_set_validclean , 3521642577SAlfred Perlstein.Nm vm_page_clear_dirty , 3621642577SAlfred Perlstein.Nm vm_page_set_invalid , 3721642577SAlfred Perlstein.Nm vm_page_zero_invalid , 3821642577SAlfred Perlstein.Nm vm_page_is_valid , 3921642577SAlfred Perlstein.Nm vm_page_test_dirty , 4021642577SAlfred Perlstein.Nm vm_page_dirty , 4121642577SAlfred Perlstein.Nm vm_page_undirty 4221642577SAlfred Perlstein.Nd "manage page clean and dirty bits" 4321642577SAlfred Perlstein.Sh SYNOPSIS 4421642577SAlfred Perlstein.In sys/param.h 4521642577SAlfred Perlstein.In vm/vm.h 4621642577SAlfred Perlstein.In vm/vm_page.h 4721642577SAlfred Perlstein.Ft int 4821642577SAlfred Perlstein.Fn vm_page_bits "int base" "int size" 4921642577SAlfred Perlstein.Ft void 5021642577SAlfred Perlstein.Fn vm_page_set_validclean "vm_page_t m" "int base" "int size" 5121642577SAlfred Perlstein.Ft void 5221642577SAlfred Perlstein.Fn vm_page_clear_dirty "vm_page_t m" "int base" "int size" 5321642577SAlfred Perlstein.Ft void 5421642577SAlfred Perlstein.Fn vm_page_set_invalid "vm_page_t m" "int base" "int size" 5521642577SAlfred Perlstein.Ft void 5621642577SAlfred Perlstein.Fn vm_page_zero_invalid "vm_page_t m" "boolean_t setvalid" 5721642577SAlfred Perlstein.Ft int 5821642577SAlfred Perlstein.Fn vm_page_is_valid "vm_page_t m" "int base" "int size" 5921642577SAlfred Perlstein.Ft void 6021642577SAlfred Perlstein.Fn vm_page_test_dirty "vm_page_t m" 6121642577SAlfred Perlstein.Ft void 6221642577SAlfred Perlstein.Fn vm_page_dirty "vm_page_t m" 6321642577SAlfred Perlstein.Ft void 6421642577SAlfred Perlstein.Fn vm_page_undirty "vm_page_t m" 6521642577SAlfred Perlstein.Sh DESCRIPTION 6621642577SAlfred Perlstein.Fn vm_page_bits 6721642577SAlfred Perlsteincalculates the bits representing the 6821642577SAlfred Perlstein.Dv DEV_BSIZE 6921642577SAlfred Perlsteinrange of bytes between 7021642577SAlfred Perlstein.Fa base 7121642577SAlfred Perlsteinand 7221642577SAlfred Perlstein.Fa size . 7321642577SAlfred PerlsteinThe byte range is expected to be within a single page, and if 7421642577SAlfred Perlstein.Fa size 751f620c2eSRuslan Ermilovis zero, no bits will be set. 7621642577SAlfred Perlstein.Pp 7721642577SAlfred Perlstein.Fn vm_page_set_validclean 7821642577SAlfred Perlsteinflags the byte range between 7921642577SAlfred Perlstein.Fa base 8021642577SAlfred Perlsteinand 8121642577SAlfred Perlstein.Fa size 8221642577SAlfred Perlsteinas valid and clean. 8321642577SAlfred PerlsteinThe range is expected to be 8421642577SAlfred Perlstein.Dv DEV_BSIZE 8521642577SAlfred Perlsteinaligned and no larger than 8621642577SAlfred Perlstein.Dv PAGE_SIZE . 8721642577SAlfred PerlsteinIf it is not properly aligned, any unaligned chucks of the 8821642577SAlfred Perlstein.Dv DEV_BSIZE 8921642577SAlfred Perlsteinblocks at the beginning and end of the range will be zeroed. 9021642577SAlfred Perlstein.Pp 9121642577SAlfred PerlsteinIf 9221642577SAlfred Perlstein.Fa base 9321642577SAlfred Perlsteinis zero and 9421642577SAlfred Perlstein.Fa size 951f620c2eSRuslan Ermilovis one page, the modified bit in the page map is cleared; as well, 9621642577SAlfred Perlsteinthe 9721642577SAlfred Perlstein.Dv PG_NOSYNC 9821642577SAlfred Perlsteinflag is cleared. 9921642577SAlfred Perlstein.Pp 10021642577SAlfred Perlstein.Fn vm_page_clear_dirty 10121642577SAlfred Perlsteinclears the dirty bits within a page in the range between 10221642577SAlfred Perlstein.Fa base 10321642577SAlfred Perlsteinand 10421642577SAlfred Perlstein.Fa size . 10521642577SAlfred PerlsteinThe bits representing the range are calculated by calling 10621642577SAlfred Perlstein.Fn vm_page_bits . 10721642577SAlfred Perlstein.Pp 10821642577SAlfred Perlstein.Fn vm_page_set_invalid 10921642577SAlfred Perlsteinclears the bits in both the valid and dirty flags representing 11021642577SAlfred Perlsteinthe 11121642577SAlfred Perlstein.Dv DEV_BSIZE 11221642577SAlfred Perlsteinblocks between 11321642577SAlfred Perlstein.Fa base 11421642577SAlfred Perlsteinand 11521642577SAlfred Perlstein.Fa size 11621642577SAlfred Perlsteinin the page. 11721642577SAlfred PerlsteinThe bits are calculated by calling 11821642577SAlfred Perlstein.Fn vm_page_bits . 11921642577SAlfred PerlsteinAs well as clearing the bits within the page, the generation 12021642577SAlfred Perlsteinnumber within the object holding the page is incremented. 12121642577SAlfred Perlstein.Pp 12221642577SAlfred Perlstein.Fn vm_page_zero_invalid 1231f620c2eSRuslan Ermilovzeroes all of the blocks within the page that are currently 1241f620c2eSRuslan Ermilovflagged as invalid. 12521642577SAlfred PerlsteinIf 12621642577SAlfred Perlstein.Fa setvalid 1271f620c2eSRuslan Ermilovis 1281f620c2eSRuslan Ermilov.Dv TRUE , 1291f620c2eSRuslan Ermilovall of the valid bits within the page are set. 13021642577SAlfred Perlstein.Pp 13121642577SAlfred PerlsteinIn some cases, such as NFS, the valid bits cannot be set 13221642577SAlfred Perlsteinin order to maintain cache consistency. 13321642577SAlfred Perlstein.Pp 13421642577SAlfred Perlstein.Fn vm_page_is_valid 13521642577SAlfred Perlsteinchecks to determine if the all of the 13621642577SAlfred Perlstein.Dv DEV_BSIZE 13721642577SAlfred Perlsteinblocks between 13821642577SAlfred Perlstein.Fa base 13921642577SAlfred Perlsteinand 14021642577SAlfred Perlstein.Fa size 14121642577SAlfred Perlsteinof the page are valid. 14221642577SAlfred PerlsteinIf 14321642577SAlfred Perlstein.Fa size 14421642577SAlfred Perlsteinis zero and the page is entirely invalid 14521642577SAlfred Perlstein.Fn vm_page_is_valid 1461f620c2eSRuslan Ermilovwill return 1471f620c2eSRuslan Ermilov.Dv TRUE , 1481f620c2eSRuslan Ermilovin all other cases a size of zero will return 1491f620c2eSRuslan Ermilov.Dv FALSE . 15021642577SAlfred Perlstein.Pp 15121642577SAlfred Perlstein.Fn vm_page_test_dirty 15221642577SAlfred Perlsteinchecks if a page has been modified via any of its physical maps, 1531f620c2eSRuslan Ermilovand if so, flags the entire page as dirty. 15421642577SAlfred Perlstein.Fn vm_page_dirty 15521642577SAlfred Perlsteinis called to modify the dirty bits. 15621642577SAlfred Perlstein.Pp 15721642577SAlfred Perlstein.Fn vm_page_dirty 15821642577SAlfred Perlsteinflags the entire page as dirty. 15921642577SAlfred PerlsteinIt is expected that the page is not currently on the cache queue. 16021642577SAlfred Perlstein.Pp 16121642577SAlfred Perlstein.Fn vm_page_undirty 16221642577SAlfred Perlsteinclears all of the dirty bits in a page. 16321642577SAlfred Perlstein.Sh NOTES 16421642577SAlfred PerlsteinNone of these functions are allowed to block. 16521642577SAlfred Perlstein.Sh AUTHORS 166571dba6eSHiten PandyaThis manual page was written by 16721642577SAlfred Perlstein.An Chad David Aq davidc@acns.ab.ca . 168