Changeset View
Changeset View
Standalone View
Standalone View
sys/powerpc/powerpc/trap.c
Show First 20 Lines • Show All 694 Lines • ▼ Show 20 Lines | |||||
} | } | ||||
#include "../../kern/subr_syscall.c" | #include "../../kern/subr_syscall.c" | ||||
void | void | ||||
syscall(struct trapframe *frame) | syscall(struct trapframe *frame) | ||||
{ | { | ||||
struct thread *td; | struct thread *td; | ||||
int error; | |||||
td = curthread; | td = curthread; | ||||
td->td_frame = frame; | td->td_frame = frame; | ||||
#if defined(__powerpc64__) && defined(AIM) | #if defined(__powerpc64__) && defined(AIM) | ||||
/* | /* | ||||
* Speculatively restore last user SLB segment, which we know is | * Speculatively restore last user SLB segment, which we know is | ||||
* invalid already, since we are likely to do copyin()/copyout(). | * invalid already, since we are likely to do copyin()/copyout(). | ||||
*/ | */ | ||||
if (td->td_pcb->pcb_cpu.aim.usr_vsid != 0) | if (td->td_pcb->pcb_cpu.aim.usr_vsid != 0) | ||||
__asm __volatile ("slbmte %0, %1; isync" :: | __asm __volatile ("slbmte %0, %1; isync" :: | ||||
"r"(td->td_pcb->pcb_cpu.aim.usr_vsid), "r"(USER_SLB_SLBE)); | "r"(td->td_pcb->pcb_cpu.aim.usr_vsid), "r"(USER_SLB_SLBE)); | ||||
#endif | #endif | ||||
error = syscallenter(td); | syscallenter(td); | ||||
syscallret(td, error); | syscallret(td); | ||||
} | } | ||||
static int | static int | ||||
trap_pfault(struct trapframe *frame, int user) | trap_pfault(struct trapframe *frame, int user) | ||||
{ | { | ||||
vm_offset_t eva, va; | vm_offset_t eva, va; | ||||
struct thread *td; | struct thread *td; | ||||
struct proc *p; | struct proc *p; | ||||
▲ Show 20 Lines • Show All 220 Lines • Show Last 20 Lines |