summaryrefslogtreecommitdiffstats
path: root/sys/uvm
diff options
context:
space:
mode:
authorkettenis <kettenis@openbsd.org>2019-11-29 18:32:40 +0000
committerkettenis <kettenis@openbsd.org>2019-11-29 18:32:40 +0000
commit9a4c9b180839edab1d0456e6fa145d15720d0482 (patch)
treed4c34c04058397d692996f53141de5520092949e /sys/uvm
parentremove two items from the todo list (diff)
downloadwireguard-openbsd-9a4c9b180839edab1d0456e6fa145d15720d0482.tar.xz
wireguard-openbsd-9a4c9b180839edab1d0456e6fa145d15720d0482.zip
Split out the code that removes a page from uvm objects and clears the flags
into a separate uvm_pageclean() function and call it from uvm_pagefree(). ok mpi@, guenther@, beck@
Diffstat (limited to 'sys/uvm')
-rw-r--r--sys/uvm/uvm_page.c22
-rw-r--r--sys/uvm/uvm_page.h3
2 files changed, 18 insertions, 7 deletions
diff --git a/sys/uvm/uvm_page.c b/sys/uvm/uvm_page.c
index 6986c70ed80..194150cf7fd 100644
--- a/sys/uvm/uvm_page.c
+++ b/sys/uvm/uvm_page.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: uvm_page.c,v 1.148 2019/02/26 14:24:21 visa Exp $ */
+/* $OpenBSD: uvm_page.c,v 1.149 2019/11/29 18:32:40 kettenis Exp $ */
/* $NetBSD: uvm_page.c,v 1.44 2000/11/27 08:40:04 chs Exp $ */
/*
@@ -961,17 +961,15 @@ uvm_pagerealloc(struct vm_page *pg, struct uvm_object *newobj, voff_t newoff)
}
}
-
/*
- * uvm_pagefree: free page
+ * uvm_pageclean: clean page
*
* => erase page's identity (i.e. remove from object)
- * => put page on free list
* => caller must lock page queues
* => assumes all valid mappings of pg are gone
*/
void
-uvm_pagefree(struct vm_page *pg)
+uvm_pageclean(struct vm_page *pg)
{
u_int flags_to_clear = 0;
@@ -1021,13 +1019,25 @@ uvm_pagefree(struct vm_page *pg)
PG_RELEASED|PG_CLEAN|PG_CLEANCHK;
atomic_clearbits_int(&pg->pg_flags, flags_to_clear);
- /* and put on free queue */
#ifdef DEBUG
pg->uobject = (void *)0xdeadbeef;
pg->offset = 0xdeadbeef;
pg->uanon = (void *)0xdeadbeef;
#endif
+}
+/*
+ * uvm_pagefree: free page
+ *
+ * => erase page's identity (i.e. remove from object)
+ * => put page on free list
+ * => caller must lock page queues
+ * => assumes all valid mappings of pg are gone
+ */
+void
+uvm_pagefree(struct vm_page *pg)
+{
+ uvm_pageclean(pg);
uvm_pmr_freepages(pg, 1);
}
diff --git a/sys/uvm/uvm_page.h b/sys/uvm/uvm_page.h
index 6ea58655b01..415cae0a4cc 100644
--- a/sys/uvm/uvm_page.h
+++ b/sys/uvm/uvm_page.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: uvm_page.h,v 1.63 2016/11/07 00:26:33 guenther Exp $ */
+/* $OpenBSD: uvm_page.h,v 1.64 2019/11/29 18:32:40 kettenis Exp $ */
/* $NetBSD: uvm_page.h,v 1.19 2000/12/28 08:24:55 chs Exp $ */
/*
@@ -227,6 +227,7 @@ void uvm_pageactivate(struct vm_page *);
vaddr_t uvm_pageboot_alloc(vsize_t);
void uvm_pagecopy(struct vm_page *, struct vm_page *);
void uvm_pagedeactivate(struct vm_page *);
+void uvm_pageclean(struct vm_page *);
void uvm_pagefree(struct vm_page *);
void uvm_page_unbusy(struct vm_page **, int);
struct vm_page *uvm_pagelookup(struct uvm_object *, voff_t);