diff options
author | kib <kib@FreeBSD.org> | 2011-07-09 15:21:10 +0000 |
---|---|---|
committer | kib <kib@FreeBSD.org> | 2011-07-09 15:21:10 +0000 |
commit | 61e3fec296fa6c27ba164bba06c2773c8f52d5ae (patch) | |
tree | 2e4765a311744587c5b4fff81d2ac15360a89ca0 /sys/vm/vm_fault.c | |
parent | 08e1095b2da00c4acdc7a1b5d5eaec9704712578 (diff) | |
download | FreeBSD-src-61e3fec296fa6c27ba164bba06c2773c8f52d5ae.zip FreeBSD-src-61e3fec296fa6c27ba164bba06c2773c8f52d5ae.tar.gz |
Add a facility to disable processing page faults. When activated,
uiomove generates EFAULT if any accessed address is not mapped, as
opposed to handling the fault.
Sponsored by: The FreeBSD Foundation
Reviewed by: alc (previous version)
Diffstat (limited to 'sys/vm/vm_fault.c')
-rw-r--r-- | sys/vm/vm_fault.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/sys/vm/vm_fault.c b/sys/vm/vm_fault.c index 55abe86..eeb10a4 100644 --- a/sys/vm/vm_fault.c +++ b/sys/vm/vm_fault.c @@ -209,6 +209,8 @@ vm_fault(vm_map_t map, vm_offset_t vaddr, vm_prot_t fault_type, int fault_flags) { + if ((curthread->td_pflags & TDP_NOFAULTING) != 0) + return (KERN_PROTECTION_FAILURE); return (vm_fault_hold(map, vaddr, fault_type, fault_flags, NULL)); } @@ -1475,3 +1477,17 @@ vm_fault_additional_pages(m, rbehind, rahead, marray, reqpage) /* return number of pages */ return i; } + +int +vm_fault_disable_pagefaults(void) +{ + + return (curthread_pflags_set(TDP_NOFAULTING)); +} + +void +vm_fault_enable_pagefaults(int save) +{ + + curthread_pflags_restore(save); +} |