diff options
author | jah <jah@FreeBSD.org> | 2015-08-04 19:46:13 +0000 |
---|---|---|
committer | jah <jah@FreeBSD.org> | 2015-08-04 19:46:13 +0000 |
commit | b8c4d76738c091ce972e522ec36c8dce6642f6fb (patch) | |
tree | c099d6990763d6142f37775aa84b5193ad0b77fb /sys/amd64/amd64/pmap.c | |
parent | d6d829914b43c5cfe1482a423d5466cd717a330c (diff) | |
download | FreeBSD-src-b8c4d76738c091ce972e522ec36c8dce6642f6fb.zip FreeBSD-src-b8c4d76738c091ce972e522ec36c8dce6642f6fb.tar.gz |
Add two new pmap functions:
vm_offset_t pmap_quick_enter_page(vm_page_t m)
void pmap_quick_remove_page(vm_offset_t kva)
These will create and destroy a temporary, CPU-local KVA mapping of a specified page.
Guarantees:
--Will not sleep and will not fail.
--Safe to call under a non-sleepable lock or from an ithread
Restrictions:
--Not guaranteed to be safe to call from an interrupt filter or under a spin mutex on all platforms
--Current implementation does not guarantee more than one page of mapping space across all platforms. MI code should not make nested calls to pmap_quick_enter_page.
--MI code should not perform locking while holding onto a mapping created by pmap_quick_enter_page
The idea is to use this in busdma, for bounce buffer copies as well as virtually-indexed cache maintenance on mips and arm.
NOTE: the non-i386, non-amd64 implementations of these functions still need review and testing.
Reviewed by: kib
Approved by: kib (mentor)
Differential Revision: http://reviews.freebsd.org/D3013
Diffstat (limited to 'sys/amd64/amd64/pmap.c')
-rw-r--r-- | sys/amd64/amd64/pmap.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/sys/amd64/amd64/pmap.c b/sys/amd64/amd64/pmap.c index 6a3de60..780d0e3 100644 --- a/sys/amd64/amd64/pmap.c +++ b/sys/amd64/amd64/pmap.c @@ -6940,6 +6940,18 @@ pmap_unmap_io_transient(vm_page_t page[], vm_offset_t vaddr[], int count, } } +vm_offset_t +pmap_quick_enter_page(vm_page_t m) +{ + + return (PHYS_TO_DMAP(VM_PAGE_TO_PHYS(m))); +} + +void +pmap_quick_remove_page(vm_offset_t addr) +{ +} + #include "opt_ddb.h" #ifdef DDB #include <ddb/ddb.h> |