diff options
author | jhb <jhb@FreeBSD.org> | 2012-04-05 17:13:14 +0000 |
---|---|---|
committer | jhb <jhb@FreeBSD.org> | 2012-04-05 17:13:14 +0000 |
commit | 5829de48d948e74cb77c117659140afff0ee33b3 (patch) | |
tree | c9ac7a271fa3242d8c2cd110bfe596a577e6f5f0 /sys/vm/vm_fault.c | |
parent | 1bdacb70cf554a29338ec17d997277abfc6f57e1 (diff) | |
download | FreeBSD-src-5829de48d948e74cb77c117659140afff0ee33b3.zip FreeBSD-src-5829de48d948e74cb77c117659140afff0ee33b3.tar.gz |
Add new ktrace records for the start and end of VM faults. This gives
a pair of records similar to syscall entry and return that a user can
use to determine how long page faults take. The new ktrace records are
enabled via the 'p' trace type, and are enabled in the default set of
trace points.
Reviewed by: kib
MFC after: 2 weeks
Diffstat (limited to 'sys/vm/vm_fault.c')
-rw-r--r-- | sys/vm/vm_fault.c | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/sys/vm/vm_fault.c b/sys/vm/vm_fault.c index 8477c35..b1a0d0c 100644 --- a/sys/vm/vm_fault.c +++ b/sys/vm/vm_fault.c @@ -74,6 +74,7 @@ #include <sys/cdefs.h> __FBSDID("$FreeBSD$"); +#include "opt_ktrace.h" #include "opt_vm.h" #include <sys/param.h> @@ -86,6 +87,9 @@ __FBSDID("$FreeBSD$"); #include <sys/sysctl.h> #include <sys/vmmeter.h> #include <sys/vnode.h> +#ifdef KTRACE +#include <sys/ktrace.h> +#endif #include <vm/vm.h> #include <vm/vm_param.h> @@ -208,10 +212,23 @@ int vm_fault(vm_map_t map, vm_offset_t vaddr, vm_prot_t fault_type, int fault_flags) { + struct thread *td; + int result; - if ((curthread->td_pflags & TDP_NOFAULTING) != 0) + td = curthread; + if ((td->td_pflags & TDP_NOFAULTING) != 0) return (KERN_PROTECTION_FAILURE); - return (vm_fault_hold(map, vaddr, fault_type, fault_flags, NULL)); +#ifdef KTRACE + if (map != kernel_map && KTRPOINT(td, KTR_FAULT)) + ktrfault(vaddr, fault_type); +#endif + result = vm_fault_hold(map, trunc_page(vaddr), fault_type, fault_flags, + NULL); +#ifdef KTRACE + if (map != kernel_map && KTRPOINT(td, KTR_FAULTEND)) + ktrfaultend(result); +#endif + return (result); } int |