summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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);