diff options
author | Alan Cox <alc@FreeBSD.org> | 2004-03-16 19:04:28 +0000 |
---|---|---|
committer | Alan Cox <alc@FreeBSD.org> | 2004-03-16 19:04:28 +0000 |
commit | 90ecfebd8287b0c59fe80050d3026f7e94db5a3b (patch) | |
tree | 23b7ae48f580ace96e1510d279da96896036cc35 /sys/amd64/amd64/vm_machdep.c | |
parent | 27de234992dc74bdb8edec2114124454fc5ddc4c (diff) | |
download | src-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.c | 19 |
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--; |