diff options
author | royger <royger@FreeBSD.org> | 2014-10-24 09:48:58 +0000 |
---|---|---|
committer | royger <royger@FreeBSD.org> | 2014-10-24 09:48:58 +0000 |
commit | 0e3d9b8126c5ba0e3328ab6b3ba55b3d503d9715 (patch) | |
tree | e2b9160b6c3a1969d72f8ff01f8e9f734b08863d /contrib/netbsd-tests/lib/libc/stdlib/h_getopt_long.c | |
parent | 233b5312683de0c43509ba3e339e17452caa5eea (diff) | |
download | FreeBSD-src-0e3d9b8126c5ba0e3328ab6b3ba55b3d503d9715.zip FreeBSD-src-0e3d9b8126c5ba0e3328ab6b3ba55b3d503d9715.tar.gz |
amd64: make uiomove_fromphys functional for pages not mapped by the DMAP
Place the code introduced in r268660 into a separate function that can be
called from uiomove_fromphys. Instead of pre-allocating two KVA pages use
vmem_alloc to allocate them on demand when needed. This prevents blocking if
a page fault is taken while physical addresses from outside the DMAP are
used, since the lock is now removed.
Also introduce a safety catch in PHYS_TO_DMAP and DMAP_TO_PHYS.
Sponsored by: Citrix Systems R&D
Reviewed by: kib
Differential Revision: https://reviews.freebsd.org/D947
amd64/amd64/pmap.c:
- Factor out the code to deal with non DMAP addresses from pmap_copy_pages
and place it in pmap_map_io_transient.
- Change the code to use vmem_alloc instead of a set of pre-allocated
pages.
- Use pmap_qenter and don't pin the thread if there can be page faults.
amd64/amd64/uio_machdep.c:
- Use pmap_map_io_transient in order to correctly deal with physical
addresses not covered by the DMAP.
amd64/include/pmap.h:
- Add the prototypes for the new functions.
amd64/include/vmparam.h:
- Add safety catches to make sure PHYS_TO_DMAP and DMAP_TO_PHYS are only
used with addresses covered by the DMAP.
Diffstat (limited to 'contrib/netbsd-tests/lib/libc/stdlib/h_getopt_long.c')
0 files changed, 0 insertions, 0 deletions