Lines Matching +full:no +full:- +full:pc +full:- +full:write
1 // SPDX-License-Identifier: GPL-2.0
50 printk(KERN_ALERT "tsk->{mm,active_mm}->context = %08lx\n", in unhandled_fault()
51 (tsk->mm ? tsk->mm->context : tsk->active_mm->context)); in unhandled_fault()
52 printk(KERN_ALERT "tsk->{mm,active_mm}->pgd = %08lx\n", in unhandled_fault()
53 (tsk->mm ? (unsigned long) tsk->mm->pgd : in unhandled_fault()
54 (unsigned long) tsk->active_mm->pgd)); in unhandled_fault()
58 asmlinkage int lookup_fault(unsigned long pc, unsigned long ret_pc, in lookup_fault() argument
75 insn = *((unsigned int *) pc); in lookup_fault()
83 insn = *((unsigned int *) pc); in lookup_fault()
93 regs.pc = pc; in lookup_fault()
94 regs.npc = pc + 4; in lookup_fault()
118 tsk->comm, task_pid_nr(tsk), address, in show_signal_msg()
119 (void *)regs->pc, (void *)regs->u_regs[UREG_I7], in show_signal_msg()
120 (void *)regs->u_regs[UREG_FP], code); in show_signal_msg()
122 print_vma_addr(KERN_CONT " in ", regs->pc); in show_signal_msg()
142 return regs->pc; in compute_si_addr()
144 if (regs->psr & PSR_PS) in compute_si_addr()
145 insn = *(unsigned int *) regs->pc; in compute_si_addr()
147 __get_user(insn, (unsigned int *) regs->pc); in compute_si_addr()
160 asmlinkage void do_sparc_fault(struct pt_regs *regs, int text_fault, int write, in do_sparc_fault() argument
165 struct mm_struct *mm = tsk->mm; in do_sparc_fault()
168 int from_user = !(regs->psr & PSR_PS); in do_sparc_fault()
174 address = regs->pc; in do_sparc_fault()
177 * We fault-in kernel-space virtual memory on-demand. The in do_sparc_fault()
190 * If we're in an interrupt or have no user in do_sparc_fault()
199 down_read(&mm->mmap_sem); in do_sparc_fault()
207 if (vma->vm_start <= address) in do_sparc_fault()
209 if (!(vma->vm_flags & VM_GROWSDOWN)) in do_sparc_fault()
219 if (write) { in do_sparc_fault()
220 if (!(vma->vm_flags & VM_WRITE)) in do_sparc_fault()
223 /* Allow reads even for write-only mappings */ in do_sparc_fault()
224 if (!(vma->vm_flags & (VM_READ | VM_EXEC))) in do_sparc_fault()
230 if (write) in do_sparc_fault()
255 current->maj_flt++; in do_sparc_fault()
259 current->min_flt++; in do_sparc_fault()
267 /* No need to up_read(&mm->mmap_sem) as we would in do_sparc_fault()
276 up_read(&mm->mmap_sem); in do_sparc_fault()
284 up_read(&mm->mmap_sem); in do_sparc_fault()
295 g2 = regs->u_regs[UREG_G2]; in do_sparc_fault()
297 fixup = search_extables_range(regs->pc, &g2); in do_sparc_fault()
306 printk("Exception: PC<%08lx> faddr<%08lx>\n", in do_sparc_fault()
307 regs->pc, address); in do_sparc_fault()
309 regs->pc, fixup, g2); in do_sparc_fault()
311 if ((regs->pc >= (unsigned long)__memset_start && in do_sparc_fault()
312 regs->pc < (unsigned long)__memset_end) || in do_sparc_fault()
313 (regs->pc >= (unsigned long)__csum_partial_copy_start && in do_sparc_fault()
314 regs->pc < (unsigned long)__csum_partial_copy_end)) { in do_sparc_fault()
315 regs->u_regs[UREG_I4] = address; in do_sparc_fault()
316 regs->u_regs[UREG_I5] = regs->pc; in do_sparc_fault()
318 regs->u_regs[UREG_G2] = g2; in do_sparc_fault()
319 regs->pc = fixup; in do_sparc_fault()
320 regs->npc = regs->pc + 4; in do_sparc_fault()
333 up_read(&mm->mmap_sem); in do_sparc_fault()
341 up_read(&mm->mmap_sem); in do_sparc_fault()
349 * Synchronize this task's top level page-table in do_sparc_fault()
356 pgd = tsk->active_mm->pgd + offset; in do_sparc_fault()
378 static void force_user_fault(unsigned long address, int write) in force_user_fault() argument
382 struct mm_struct *mm = tsk->mm; in force_user_fault()
388 down_read(&mm->mmap_sem); in force_user_fault()
392 if (vma->vm_start <= address) in force_user_fault()
394 if (!(vma->vm_flags & VM_GROWSDOWN)) in force_user_fault()
400 if (write) { in force_user_fault()
401 if (!(vma->vm_flags & VM_WRITE)) in force_user_fault()
405 if (!(vma->vm_flags & (VM_READ | VM_EXEC))) in force_user_fault()
413 up_read(&mm->mmap_sem); in force_user_fault()
416 up_read(&mm->mmap_sem); in force_user_fault()
417 __do_fault_siginfo(code, SIGSEGV, tsk->thread.kregs, address); in force_user_fault()
421 up_read(&mm->mmap_sem); in force_user_fault()
422 __do_fault_siginfo(BUS_ADRERR, SIGBUS, tsk->thread.kregs, address); in force_user_fault()
435 sp = current_thread_info()->rwbuf_stkptrs[0]; in window_overflow_fault()
456 sp = regs->u_regs[UREG_FP]; in window_ret_fault()