Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/uvm Describe PG_ flags (for struct vm_page). Reviewed b...
details: https://anonhg.NetBSD.org/src/rev/9a955bd4256a
branches: trunk
changeset: 779132:9a955bd4256a
user: rmind <rmind%NetBSD.org@localhost>
date: Sat May 05 20:45:35 2012 +0000
description:
Describe PG_ flags (for struct vm_page). Reviewed by yamt@.
diffstat:
sys/uvm/uvm_page.h | 90 ++++++++++++++++++++++++++++++++++++++++-------------
1 files changed, 67 insertions(+), 23 deletions(-)
diffs (106 lines):
diff -r bd6cd473d043 -r 9a955bd4256a sys/uvm/uvm_page.h
--- a/sys/uvm/uvm_page.h Sat May 05 19:49:13 2012 +0000
+++ b/sys/uvm/uvm_page.h Sat May 05 20:45:35 2012 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: uvm_page.h,v 1.74 2012/01/28 19:12:10 rmind Exp $ */
+/* $NetBSD: uvm_page.h,v 1.75 2012/05/05 20:45:35 rmind Exp $ */
/*
* Copyright (c) 1997 Charles D. Cranor and Washington University.
@@ -145,30 +145,74 @@
};
/*
- * These are the flags defined for vm_page.
+ * Overview of UVM page flags.
+ *
+ * Locking notes:
+ *
+ * PG_, struct vm_page::flags => locked by the owner
+ * PQ_, struct vm_page::pqflags => locked by the page-queue lock
+ * PQ_FREE => additionally locked by free-queue lock
+ *
+ * Flag descriptions:
+ *
+ * PG_BUSY:
+ * Page is long-term locked, usually because of I/O (transfer from the
+ * page memory to the backing store) is in progress. LWP attempting
+ * to access the page shall set PG_WANTED and wait.
+ *
+ * PG_WANTED:
+ * Indicates that the page, which is currently PG_BUSY, is wanted by
+ * some other LWP. The page owner (i.e. LWP which set PG_BUSY) is
+ * responsible to clear both flags and wake up any waiters once it has
+ * released the long-term lock (PG_BUSY).
+ *
+ * PG_RELEASED:
+ * Indicates that the page, which is currently PG_BUSY, should be freed
+ * after the release of long-term lock. It is responsibility of the
+ * owning LWP (i.e. which set PG_BUSY) to do it.
+ *
+ * PG_CLEAN:
+ * Page has not been modified since it was loaded from the backing
+ * store. If this flag is not set, page is considered "dirty".
+ * XXX: Currently it means that the page *might* be clean; will be
+ * fixed with yamt-pagecache merge.
+ *
+ * PG_FAKE:
+ * Page has been allocated, but not yet initialised. The flag is used
+ * to avoid overwriting of valid data, e.g. to prevent read from the
+ * backing store when in-core data is newer.
+ *
+ * PG_TABLED:
+ * Indicates that the page is currently in the object's offset queue,
+ * and that it should be removed from it once the page is freed. Used
+ * diagnostic purposes.
+ *
+ * PG_PAGEOUT:
+ * Indicates that the page is being paged-out in preparation for
+ * being freed.
+ *
+ * PG_RDONLY:
+ * Indicates that the page must be mapped read-only.
+ *
+ * PG_ZERO:
+ * Indicates that the page has been pre-zeroed. This flag is only
+ * set when the page is not in the queues and is cleared when the
+ * page is placed on the free list.
+ *
+ * PG_MARKER:
+ * Dummy marker page.
*/
-/*
- * locking rules:
- * PG_ ==> locked by object lock
- * PQ_ ==> lock by page queue lock
- * PQ_FREE is locked by free queue lock and is mutex with all other PQs
- *
- * PG_ZERO is used to indicate that a page has been pre-zero'd. This flag
- * is only set when the page is on no queues, and is cleared when the page
- * is placed on the free list.
- */
-
-#define PG_BUSY 0x0001 /* page is locked */
-#define PG_WANTED 0x0002 /* someone is waiting for page */
-#define PG_TABLED 0x0004 /* page is in VP table */
-#define PG_CLEAN 0x0008 /* page has not been modified */
-#define PG_PAGEOUT 0x0010 /* page to be freed for pagedaemon */
-#define PG_RELEASED 0x0020 /* page to be freed when unbusied */
-#define PG_FAKE 0x0040 /* page is not yet initialized */
-#define PG_RDONLY 0x0080 /* page must be mapped read-only */
-#define PG_ZERO 0x0100 /* page is pre-zero'd */
-#define PG_MARKER 0x0200 /* dummy marker page */
+#define PG_BUSY 0x0001
+#define PG_WANTED 0x0002
+#define PG_TABLED 0x0004
+#define PG_CLEAN 0x0008
+#define PG_PAGEOUT 0x0010
+#define PG_RELEASED 0x0020
+#define PG_FAKE 0x0040
+#define PG_RDONLY 0x0080
+#define PG_ZERO 0x0100
+#define PG_MARKER 0x0200
#define PG_PAGER1 0x1000 /* pager-specific flag */
Home |
Main Index |
Thread Index |
Old Index