diff options
-rw-r--r-- | sys/uvm/uvm_page.c | 22 | ||||
-rw-r--r-- | sys/uvm/uvm_page.h | 3 |
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); |