void userret(struct lwp *l) { #if defined(__PROG32) && defined(ARM_MMU_EXTENDED) /* * If our ASID got released, access via TTBR0 will have been disabled. * So if it is disabled, activate the lwp again to get a new ASID. */ #ifdef __HAVE_PREEMPTION kpreempt_disable(); #endif KASSERT(curcpu()->ci_pmap_cur == l->l_proc->p_vmspace->vm_map.pmap); if (__predict_false(armreg_ttbcr_read() & TTBCR_S_PD0)) { pmap_activate(l); } KASSERT(!(armreg_ttbcr_read() & TTBCR_S_PD0)); #ifdef __HAVE_PREEMPTION kpreempt_enable(); #endif #endif /* Invoke MI userret code */ mi_userret(l); #if defined(__PROG32) && defined(DIAGNOSTIC) KASSERT(VALID_R15_PSR(lwp_trapframe(l)->tf_pc, lwp_trapframe(l)->tf_spsr)); #endif }
void db_show_fault_cmd(db_expr_t addr, bool have_addr, db_expr_t count, const char *modif) { db_printf("DFAR=%#x DFSR=%#x IFAR=%#x IFSR=%#x\n", armreg_dfar_read(), armreg_dfsr_read(), armreg_ifar_read(), armreg_ifsr_read()); db_printf("CONTEXTIDR=%#x TTBCR=%#x TTBR=%#x\n", armreg_contextidr_read(), armreg_ttbcr_read(), armreg_ttbr_read()); }