Changeset View
Changeset View
Standalone View
Standalone View
sys/mips/mips/trap.c
Show All 39 Lines | |||||
* from: @(#)trap.c 8.5 (Berkeley) 1/11/94 | * from: @(#)trap.c 8.5 (Berkeley) 1/11/94 | ||||
* JNPR: trap.c,v 1.13.2.2 2007/08/29 10:03:49 girish | * JNPR: trap.c,v 1.13.2.2 2007/08/29 10:03:49 girish | ||||
*/ | */ | ||||
#include <sys/cdefs.h> | #include <sys/cdefs.h> | ||||
__FBSDID("$FreeBSD$"); | __FBSDID("$FreeBSD$"); | ||||
#include "opt_ddb.h" | #include "opt_ddb.h" | ||||
#include "opt_ktrace.h" | #include "opt_ktrace.h" | ||||
#include "opt_hwpmc_hooks.h" | |||||
#include <sys/param.h> | #include <sys/param.h> | ||||
#include <sys/systm.h> | #include <sys/systm.h> | ||||
#include <sys/sysent.h> | #include <sys/sysent.h> | ||||
#include <sys/proc.h> | #include <sys/proc.h> | ||||
#include <sys/kernel.h> | #include <sys/kernel.h> | ||||
#include <sys/ktr.h> | #include <sys/ktr.h> | ||||
#include <sys/signalvar.h> | #include <sys/signalvar.h> | ||||
Show All 35 Lines | |||||
#include <ddb/ddb.h> | #include <ddb/ddb.h> | ||||
#include <sys/kdb.h> | #include <sys/kdb.h> | ||||
#endif | #endif | ||||
#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 TRAP_DEBUG | #ifdef TRAP_DEBUG | ||||
int trap_debug = 0; | int trap_debug = 0; | ||||
SYSCTL_INT(_machdep, OID_AUTO, trap_debug, CTLFLAG_RW, | SYSCTL_INT(_machdep, OID_AUTO, trap_debug, CTLFLAG_RW, | ||||
&trap_debug, 0, "Debug information on all traps"); | &trap_debug, 0, "Debug information on all traps"); | ||||
#endif | #endif | ||||
#define lbu_macro(data, addr) \ | #define lbu_macro(data, addr) \ | ||||
__asm __volatile ("lbu %0, 0x0(%1)" \ | __asm __volatile ("lbu %0, 0x0(%1)" \ | ||||
▲ Show 20 Lines • Show All 560 Lines • ▼ Show 20 Lines | case T_TLB_ST_MISS: | ||||
if (KERNLAND(trapframe->badvaddr)) { | if (KERNLAND(trapframe->badvaddr)) { | ||||
vm_offset_t va; | vm_offset_t va; | ||||
int rv; | int rv; | ||||
kernel_fault: | kernel_fault: | ||||
va = (vm_offset_t)trapframe->badvaddr; | va = (vm_offset_t)trapframe->badvaddr; | ||||
rv = vm_fault_trap(kernel_map, va, ftype, | rv = vm_fault_trap(kernel_map, va, ftype, | ||||
VM_FAULT_NORMAL, NULL, NULL); | VM_FAULT_NORMAL, NULL, NULL); | ||||
if (rv == KERN_SUCCESS) | if (rv == KERN_SUCCESS) { | ||||
#ifdef HWPMC_HOOKS | |||||
pmc_soft_page_fault(ftype, trapframe); | |||||
#endif | |||||
return (trapframe->pc); | return (trapframe->pc); | ||||
} | |||||
if (td->td_pcb->pcb_onfault != NULL) { | if (td->td_pcb->pcb_onfault != NULL) { | ||||
pc = (register_t)(intptr_t)td->td_pcb->pcb_onfault; | pc = (register_t)(intptr_t)td->td_pcb->pcb_onfault; | ||||
td->td_pcb->pcb_onfault = NULL; | td->td_pcb->pcb_onfault = NULL; | ||||
return (pc); | return (pc); | ||||
} | } | ||||
goto err; | goto err; | ||||
} | } | ||||
Show All 37 Lines | dofault: | ||||
*/ | */ | ||||
#ifdef VMFAULT_TRACE | #ifdef VMFAULT_TRACE | ||||
printf("vm_fault(%p (pmap %p), %p (%p), %x, %d) -> %x at pc %p\n", | printf("vm_fault(%p (pmap %p), %p (%p), %x, %d) -> %x at pc %p\n", | ||||
map, &vm->vm_pmap, (void *)va, (void *)(intptr_t)trapframe->badvaddr, | map, &vm->vm_pmap, (void *)va, (void *)(intptr_t)trapframe->badvaddr, | ||||
ftype, VM_FAULT_NORMAL, rv, (void *)(intptr_t)trapframe->pc); | ftype, VM_FAULT_NORMAL, rv, (void *)(intptr_t)trapframe->pc); | ||||
#endif | #endif | ||||
if (rv == KERN_SUCCESS) { | if (rv == KERN_SUCCESS) { | ||||
#ifdef HWPMC_HOOKS | |||||
pmc_soft_page_fault(ftype, trapframe); | |||||
#endif | |||||
if (!usermode) { | if (!usermode) { | ||||
return (trapframe->pc); | return (trapframe->pc); | ||||
} | } | ||||
goto out; | goto out; | ||||
} | } | ||||
nogo: | nogo: | ||||
if (!usermode) { | if (!usermode) { | ||||
if (td->td_pcb->pcb_onfault != NULL) { | if (td->td_pcb->pcb_onfault != NULL) { | ||||
▲ Show 20 Lines • Show All 963 Lines • Show Last 20 Lines |