diff options
author | alc <alc@FreeBSD.org> | 2004-03-16 19:04:28 +0000 |
---|---|---|
committer | alc <alc@FreeBSD.org> | 2004-03-16 19:04:28 +0000 |
commit | a2e820d27ba39950df6b8aae95fdca17e3eeb69d (patch) | |
tree | 23b7ae48f580ace96e1510d279da96896036cc35 /sys/powerpc | |
parent | 71c3a1c44c43ab6da664e5414fb5ae531038d5c5 (diff) | |
download | FreeBSD-src-a2e820d27ba39950df6b8aae95fdca17e3eeb69d.zip FreeBSD-src-a2e820d27ba39950df6b8aae95fdca17e3eeb69d.tar.gz |
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.
Diffstat (limited to 'sys/powerpc')
-rw-r--r-- | sys/powerpc/aim/vm_machdep.c | 21 | ||||
-rw-r--r-- | sys/powerpc/powerpc/vm_machdep.c | 21 |
2 files changed, 6 insertions, 36 deletions
diff --git a/sys/powerpc/aim/vm_machdep.c b/sys/powerpc/aim/vm_machdep.c index 857822c..d174bc9 100644 --- a/sys/powerpc/aim/vm_machdep.c +++ b/sys/powerpc/aim/vm_machdep.c @@ -292,28 +292,13 @@ 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; - pmap_qremove((vm_offset_t)addr, 1); - 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; + pmap_qremove(sf->kva, 1); mtx_lock(&sf_freelist.sf_lock); SLIST_INSERT_HEAD(&sf_freelist.sf_head, sf, free_list); nsfbufsused--; diff --git a/sys/powerpc/powerpc/vm_machdep.c b/sys/powerpc/powerpc/vm_machdep.c index 857822c..d174bc9 100644 --- a/sys/powerpc/powerpc/vm_machdep.c +++ b/sys/powerpc/powerpc/vm_machdep.c @@ -292,28 +292,13 @@ 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; - pmap_qremove((vm_offset_t)addr, 1); - 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; + pmap_qremove(sf->kva, 1); mtx_lock(&sf_freelist.sf_lock); SLIST_INSERT_HEAD(&sf_freelist.sf_head, sf, free_list); nsfbufsused--; |