Lines Matching +full:no +full:- +full:pc +full:- +full:write
1 // SPDX-License-Identifier: GPL-2.0
49 printk(KERN_ALERT "tsk->{mm,active_mm}->context = %08lx\n", in unhandled_fault()
50 (tsk->mm ? tsk->mm->context : tsk->active_mm->context)); in unhandled_fault()
51 printk(KERN_ALERT "tsk->{mm,active_mm}->pgd = %08lx\n", in unhandled_fault()
52 (tsk->mm ? (unsigned long) tsk->mm->pgd : in unhandled_fault()
53 (unsigned long) tsk->active_mm->pgd)); in unhandled_fault()
57 asmlinkage int lookup_fault(unsigned long pc, unsigned long ret_pc, in lookup_fault() argument
74 insn = *((unsigned int *) pc); in lookup_fault()
82 insn = *((unsigned int *) pc); in lookup_fault()
92 regs.pc = pc; in lookup_fault()
93 regs.npc = pc + 4; in lookup_fault()
117 tsk->comm, task_pid_nr(tsk), address, in show_signal_msg()
118 (void *)regs->pc, (void *)regs->u_regs[UREG_I7], in show_signal_msg()
119 (void *)regs->u_regs[UREG_FP], code); in show_signal_msg()
121 print_vma_addr(KERN_CONT " in ", regs->pc); in show_signal_msg()
141 return regs->pc; in compute_si_addr()
143 if (regs->psr & PSR_PS) in compute_si_addr()
144 insn = *(unsigned int *) regs->pc; in compute_si_addr()
146 __get_user(insn, (unsigned int *) regs->pc); in compute_si_addr()
159 asmlinkage void do_sparc_fault(struct pt_regs *regs, int text_fault, int write, in do_sparc_fault() argument
164 struct mm_struct *mm = tsk->mm; in do_sparc_fault()
167 int from_user = !(regs->psr & PSR_PS); in do_sparc_fault()
173 address = regs->pc; in do_sparc_fault()
176 * We fault-in kernel-space virtual memory on-demand. The in do_sparc_fault()
189 * If we're in an interrupt or have no user in do_sparc_fault()
206 if (vma->vm_start <= address) in do_sparc_fault()
208 if (!(vma->vm_flags & VM_GROWSDOWN)) in do_sparc_fault()
218 if (write) { in do_sparc_fault()
219 if (!(vma->vm_flags & VM_WRITE)) in do_sparc_fault()
222 /* Allow reads even for write-only mappings */ in do_sparc_fault()
223 if (!(vma->vm_flags & (VM_READ | VM_EXEC))) in do_sparc_fault()
229 if (write) in do_sparc_fault()
256 /* No need to mmap_read_unlock(mm) as we would in do_sparc_fault()
284 g2 = regs->u_regs[UREG_G2]; in do_sparc_fault()
286 fixup = search_extables_range(regs->pc, &g2); in do_sparc_fault()
293 printk("Exception: PC<%08lx> faddr<%08lx>\n", in do_sparc_fault()
294 regs->pc, address); in do_sparc_fault()
296 regs->pc, fixup, g2); in do_sparc_fault()
298 if ((regs->pc >= (unsigned long)__memset_start && in do_sparc_fault()
299 regs->pc < (unsigned long)__memset_end)) { in do_sparc_fault()
300 regs->u_regs[UREG_I4] = address; in do_sparc_fault()
301 regs->u_regs[UREG_I5] = regs->pc; in do_sparc_fault()
303 regs->u_regs[UREG_G2] = g2; in do_sparc_fault()
304 regs->pc = fixup; in do_sparc_fault()
305 regs->npc = regs->pc + 4; in do_sparc_fault()
334 * Synchronize this task's top level page-table in do_sparc_fault()
343 pgd = tsk->active_mm->pgd + offset; in do_sparc_fault()
370 static void force_user_fault(unsigned long address, int write) in force_user_fault() argument
374 struct mm_struct *mm = tsk->mm; in force_user_fault()
384 if (vma->vm_start <= address) in force_user_fault()
386 if (!(vma->vm_flags & VM_GROWSDOWN)) in force_user_fault()
392 if (write) { in force_user_fault()
393 if (!(vma->vm_flags & VM_WRITE)) in force_user_fault()
397 if (!(vma->vm_flags & (VM_READ | VM_EXEC))) in force_user_fault()
409 __do_fault_siginfo(code, SIGSEGV, tsk->thread.kregs, address); in force_user_fault()
414 __do_fault_siginfo(BUS_ADRERR, SIGBUS, tsk->thread.kregs, address); in force_user_fault()
427 sp = current_thread_info()->rwbuf_stkptrs[0]; in window_overflow_fault()
448 sp = regs->u_regs[UREG_FP]; in window_ret_fault()