aboutsummaryrefslogtreecommitdiff
path: root/sys/amd64/amd64/vm_machdep.c
diff options
context:
space:
mode:
authorAlan Cox <alc@FreeBSD.org>2004-03-16 19:04:28 +0000
committerAlan Cox <alc@FreeBSD.org>2004-03-16 19:04:28 +0000
commit90ecfebd8287b0c59fe80050d3026f7e94db5a3b (patch)
tree23b7ae48f580ace96e1510d279da96896036cc35 /sys/amd64/amd64/vm_machdep.c
parent27de234992dc74bdb8edec2114124454fc5ddc4c (diff)
downloadsrc-90ecfebd8287b0c59fe80050d3026f7e94db5a3b.tar.gz
src-90ecfebd8287b0c59fe80050d3026f7e94db5a3b.zip
Refactor the existing machine-dependent sf_buf_free() into a machine-
dependent function by the same name and a machine-independent function, sf_buf_mext(). Aside from the virtue of making more of the code machine- independent, this change also makes the interface more logical. Before, sf_buf_free() did more than simply undo an sf_buf_alloc(); it also unwired and if necessary freed the page. That is now the purpose of sf_buf_mext(). Thus, sf_buf_alloc() and sf_buf_free() can now be used as a general-purpose emphemeral map cache.
Notes
Notes: svn path=/head/; revision=127086
Diffstat (limited to 'sys/amd64/amd64/vm_machdep.c')
-rw-r--r--sys/amd64/amd64/vm_machdep.c19
1 files changed, 2 insertions, 17 deletions
diff --git a/sys/amd64/amd64/vm_machdep.c b/sys/amd64/amd64/vm_machdep.c
index 550cae003d26..215c8252bb7a 100644
--- a/sys/amd64/amd64/vm_machdep.c
+++ b/sys/amd64/amd64/vm_machdep.c
@@ -490,27 +490,12 @@ sf_buf_alloc(struct vm_page *m)
}
/*
- * Detatch mapped page and release resources back to the system.
+ * Release resources back to the system.
*/
void
-sf_buf_free(void *addr, void *args)
+sf_buf_free(struct sf_buf *sf)
{
- struct sf_buf *sf;
- struct vm_page *m;
- sf = args;
- m = sf->m;
- vm_page_lock_queues();
- vm_page_unwire(m, 0);
- /*
- * Check for the object going away on us. This can
- * happen since we don't hold a reference to it.
- * If so, we're responsible for freeing the page.
- */
- if (m->wire_count == 0 && m->object == NULL)
- vm_page_free(m);
- vm_page_unlock_queues();
- sf->m = NULL;
mtx_lock(&sf_freelist.sf_lock);
SLIST_INSERT_HEAD(&sf_freelist.sf_head, sf, free_list);
nsfbufsused--;