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