xref: /freebsd/share/man/man9/vm_page_bits.9 (revision 571dba6ec9f25ecf7582dc2192daf1ceea70065f)
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