From 9a4c9b180839edab1d0456e6fa145d15720d0482 Mon Sep 17 00:00:00 2001 From: kettenis Date: Fri, 29 Nov 2019 18:32:40 +0000 Subject: 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@ --- sys/uvm/uvm_page.c | 22 ++++++++++++++++------ sys/uvm/uvm_page.h | 3 ++- 2 files changed, 18 insertions(+), 7 deletions(-) (limited to 'sys/uvm') 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); -- cgit v1.2.3-59-g8ed1b