Changeset View
Changeset View
Standalone View
Standalone View
sys/arm64/arm64/trap.c
Show All 22 Lines | |||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | ||||
* SUCH DAMAGE. | * SUCH DAMAGE. | ||||
* | * | ||||
*/ | */ | ||||
#include <sys/cdefs.h> | #include <sys/cdefs.h> | ||||
__FBSDID("$FreeBSD$"); | __FBSDID("$FreeBSD$"); | ||||
#include "opt_hwpmc_hooks.h" | |||||
#include <sys/param.h> | #include <sys/param.h> | ||||
#include <sys/systm.h> | #include <sys/systm.h> | ||||
#include <sys/kernel.h> | #include <sys/kernel.h> | ||||
#include <sys/ktr.h> | #include <sys/ktr.h> | ||||
#include <sys/lock.h> | #include <sys/lock.h> | ||||
#include <sys/mutex.h> | #include <sys/mutex.h> | ||||
#include <sys/proc.h> | #include <sys/proc.h> | ||||
#include <sys/ptrace.h> | #include <sys/ptrace.h> | ||||
Show All 15 Lines | |||||
#include <machine/pcb.h> | #include <machine/pcb.h> | ||||
#include <machine/pcpu.h> | #include <machine/pcpu.h> | ||||
#include <machine/undefined.h> | #include <machine/undefined.h> | ||||
#ifdef KDTRACE_HOOKS | #ifdef KDTRACE_HOOKS | ||||
#include <sys/dtrace_bsd.h> | #include <sys/dtrace_bsd.h> | ||||
#endif | #endif | ||||
#ifdef HWPMC_HOOKS | |||||
#include <sys/pmckern.h> | |||||
PMC_SOFT_DEFINE( , , page_fault, all); | |||||
PMC_SOFT_DEFINE( , , page_fault, read); | |||||
PMC_SOFT_DEFINE( , , page_fault, write); | |||||
#endif | |||||
#ifdef VFP | #ifdef VFP | ||||
#include <machine/vfp.h> | #include <machine/vfp.h> | ||||
#endif | #endif | ||||
#ifdef KDB | #ifdef KDB | ||||
#include <machine/db_machdep.h> | #include <machine/db_machdep.h> | ||||
#endif | #endif | ||||
▲ Show 20 Lines • Show All 232 Lines • ▼ Show 20 Lines | #endif | ||||
default: | default: | ||||
ftype = (esr & ISS_DATA_WnR) == 0 ? VM_PROT_READ : | ftype = (esr & ISS_DATA_WnR) == 0 ? VM_PROT_READ : | ||||
VM_PROT_WRITE; | VM_PROT_WRITE; | ||||
break; | break; | ||||
} | } | ||||
/* Fault in the page. */ | /* Fault in the page. */ | ||||
error = vm_fault_trap(map, far, ftype, VM_FAULT_NORMAL, &sig, &ucode); | error = vm_fault_trap(map, far, ftype, VM_FAULT_NORMAL, &sig, &ucode); | ||||
if (error != KERN_SUCCESS) { | if (error == KERN_SUCCESS) { | ||||
#ifdef HWPMC_HOOKS | |||||
pmc_soft_page_fault(ftype, frame); | |||||
#endif | |||||
} else { | |||||
if (lower) { | if (lower) { | ||||
call_trapsignal(td, sig, ucode, (void *)far, | call_trapsignal(td, sig, ucode, (void *)far, | ||||
ESR_ELx_EXCEPTION(esr)); | ESR_ELx_EXCEPTION(esr)); | ||||
} else { | } else { | ||||
if (td->td_intr_nesting_level == 0 && | if (td->td_intr_nesting_level == 0 && | ||||
pcb->pcb_onfault != 0) { | pcb->pcb_onfault != 0) { | ||||
frame->tf_x[0] = error; | frame->tf_x[0] = error; | ||||
frame->tf_elr = pcb->pcb_onfault; | frame->tf_elr = pcb->pcb_onfault; | ||||
▲ Show 20 Lines • Show All 296 Lines • Show Last 20 Lines |