Lines Matching +full:no +full:- +full:pc +full:- +full:write
1 // SPDX-License-Identifier: GPL-2.0
27 signo = current->thread.signo; in send_fault_sig()
28 si_code = current->thread.code; in send_fault_sig()
29 addr = (void __user *)current->thread.faddr; in send_fault_sig()
36 return -1; in send_fault_sig()
62 * bit 0 == 0 means no page found, 1 means protection fault
63 * bit 1 == 0 means read, 1 means write
71 struct mm_struct *mm = current->mm; in do_page_fault()
76 pr_debug("do page fault:\nregs->sr=%#x, regs->pc=%#lx, address=%#lx, %ld, %p\n", in do_page_fault()
77 regs->sr, regs->pc, address, error_code, mm ? mm->pgd : NULL); in do_page_fault()
80 * If we're in an interrupt or have no user in do_page_fault()
96 if (vma->vm_start <= address) in do_page_fault()
98 if (!(vma->vm_flags & VM_GROWSDOWN)) in do_page_fault()
103 pre-decrement on the stack and that doesn't show up in do_page_fault()
118 default: /* 3: write, present */ in do_page_fault()
120 case 2: /* write, not present */ in do_page_fault()
121 if (!(vma->vm_flags & VM_WRITE)) in do_page_fault()
162 * No need to mmap_read_unlock(mm) as we would in do_page_fault()
185 current->thread.signo = SIGBUS; in do_page_fault()
186 current->thread.faddr = address; in do_page_fault()
190 current->thread.signo = SIGBUS; in do_page_fault()
191 current->thread.code = BUS_ADRERR; in do_page_fault()
192 current->thread.faddr = address; in do_page_fault()
196 current->thread.signo = SIGSEGV; in do_page_fault()
197 current->thread.code = SEGV_MAPERR; in do_page_fault()
198 current->thread.faddr = address; in do_page_fault()
202 current->thread.signo = SIGSEGV; in do_page_fault()
203 current->thread.code = SEGV_ACCERR; in do_page_fault()
204 current->thread.faddr = address; in do_page_fault()