4 * Copyright (C) 2000-2010 Axis Communications AB
8 #include <linux/interrupt.h>
9 #include <linux/module.h>
10 #include <linux/wait.h>
11 #include <asm/uaccess.h>
13 extern int find_fixup_code(struct pt_regs
*);
14 extern void die_if_kernel(const char *, struct pt_regs
*, long);
15 extern void show_registers(struct pt_regs
*regs
);
17 /* debug of low-level TLB reload */
26 /* debug of higher-level faults */
29 /* current active page directory */
31 DEFINE_PER_CPU(pgd_t
*, current_pgd
);
32 unsigned long cris_signal_return_page
;
35 * This routine handles page faults. It determines the address,
36 * and the problem, and then passes it off to one of the appropriate
39 * Notice that the address we're given is aligned to the page the fault
40 * occurred in, since we only get the PFN in R_MMU_CAUSE not the complete
44 * bit 0 == 0 means no page found, 1 means protection fault
45 * bit 1 == 0 means read, 1 means write
47 * If this routine detects a bad access, it returns 1, otherwise it
52 do_page_fault(unsigned long address
, struct pt_regs
*regs
,
53 int protection
, int writeaccess
)
55 struct task_struct
*tsk
;
57 struct vm_area_struct
* vma
;
62 "Page fault for %lX on %X at %lX, prot %d write %d\n",
63 address
, smp_processor_id(), instruction_pointer(regs
),
64 protection
, writeaccess
));
69 * We fault-in kernel-space virtual memory on-demand. The
70 * 'reference' page table is init_mm.pgd.
72 * NOTE! We MUST NOT take any locks for this case. We may
73 * be in an interrupt or a critical region, and should
74 * only copy the information from the master page table,
77 * NOTE2: This is done so that, when updating the vmalloc
78 * mappings we don't have to walk all processes pgdirs and
79 * add the high mappings all at once. Instead we do it as they
80 * are used. However vmalloc'ed page entries have the PAGE_GLOBAL
81 * bit set so sometimes the TLB can use a lingering entry.
83 * This verifies that the fault happens in kernel space
84 * and that the fault was not a protection error (error_code & 1).
87 if (address
>= VMALLOC_START
&&
92 /* When stack execution is not allowed we store the signal
93 * trampolines in the reserved cris_signal_return_page.
94 * Handle this in the exact same way as vmalloc (we know
95 * that the mapping is there and is valid so no need to
96 * call handle_mm_fault).
98 if (cris_signal_return_page
&&
99 address
== cris_signal_return_page
&&
100 !protection
&& user_mode(regs
))
103 /* we can and should enable interrupts at this point */
107 info
.si_code
= SEGV_MAPERR
;
110 * If we're in an interrupt or "atomic" operation or have no
111 * user context, we must not take the fault.
114 if (in_atomic() || !mm
)
117 down_read(&mm
->mmap_sem
);
118 vma
= find_vma(mm
, address
);
121 if (vma
->vm_start
<= address
)
123 if (!(vma
->vm_flags
& VM_GROWSDOWN
))
125 if (user_mode(regs
)) {
127 * accessing the stack below usp is always a bug.
128 * we get page-aligned addresses so we can only check
129 * if we're within a page from usp, but that might be
130 * enough to catch brutal errors at least.
132 if (address
+ PAGE_SIZE
< rdusp())
135 if (expand_stack(vma
, address
))
139 * Ok, we have a good vm_area for this memory access, so
144 info
.si_code
= SEGV_ACCERR
;
146 /* first do some preliminary protection checks */
148 if (writeaccess
== 2){
149 if (!(vma
->vm_flags
& VM_EXEC
))
151 } else if (writeaccess
== 1) {
152 if (!(vma
->vm_flags
& VM_WRITE
))
155 if (!(vma
->vm_flags
& (VM_READ
| VM_EXEC
)))
160 * If for any reason at all we couldn't handle the fault,
161 * make sure we exit gracefully rather than endlessly redo
165 fault
= handle_mm_fault(mm
, vma
, address
, (writeaccess
& 1) ? FAULT_FLAG_WRITE
: 0);
166 if (unlikely(fault
& VM_FAULT_ERROR
)) {
167 if (fault
& VM_FAULT_OOM
)
169 else if (fault
& VM_FAULT_SIGBUS
)
173 if (fault
& VM_FAULT_MAJOR
)
178 up_read(&mm
->mmap_sem
);
182 * Something tried to access memory that isn't in our memory map..
183 * Fix it, but check if it's kernel or user first..
187 up_read(&mm
->mmap_sem
);
189 bad_area_nosemaphore
:
190 DPG(show_registers(regs
));
192 /* User mode accesses just cause a SIGSEGV */
194 if (user_mode(regs
)) {
195 printk(KERN_NOTICE
"%s (pid %d) segfaults for page "
196 "address %08lx at pc %08lx\n",
198 address
, instruction_pointer(regs
));
200 /* With DPG on, we've already dumped registers above. */
202 show_registers(regs
);
204 #ifdef CONFIG_NO_SEGFAULT_TERMINATION
205 DECLARE_WAIT_QUEUE_HEAD(wq
);
206 wait_event_interruptible(wq
, 0 == 1);
208 info
.si_signo
= SIGSEGV
;
210 /* info.si_code has been set above */
211 info
.si_addr
= (void *)address
;
212 force_sig_info(SIGSEGV
, &info
, tsk
);
219 /* Are we prepared to handle this kernel fault?
221 * (The kernel has valid exception-points in the source
222 * when it accesses user-memory. When it fails in one
223 * of those points, we find it in a table and do a jump
224 * to some fixup code that loads an appropriate error
228 if (find_fixup_code(regs
))
232 * Oops. The kernel tried to access some bad page. We'll have to
233 * terminate things with extreme prejudice.
236 if (!oops_in_progress
) {
237 oops_in_progress
= 1;
238 if ((unsigned long) (address
) < PAGE_SIZE
)
239 printk(KERN_ALERT
"Unable to handle kernel NULL "
240 "pointer dereference");
242 printk(KERN_ALERT
"Unable to handle kernel access"
243 " at virtual address %08lx\n", address
);
245 die_if_kernel("Oops", regs
, (writeaccess
<< 1) | protection
);
246 oops_in_progress
= 0;
252 * We ran out of memory, or some other thing happened to us that made
253 * us unable to handle the page fault gracefully.
257 up_read(&mm
->mmap_sem
);
258 if (!user_mode(regs
))
260 pagefault_out_of_memory();
264 up_read(&mm
->mmap_sem
);
267 * Send a sigbus, regardless of whether we were in kernel
270 info
.si_signo
= SIGBUS
;
272 info
.si_code
= BUS_ADRERR
;
273 info
.si_addr
= (void *)address
;
274 force_sig_info(SIGBUS
, &info
, tsk
);
276 /* Kernel mode? Handle exceptions or die */
277 if (!user_mode(regs
))
284 * Synchronize this task's top level page-table
285 * with the 'reference' page table.
287 * Use current_pgd instead of tsk->active_mm->pgd
288 * since the latter might be unavailable if this
289 * code is executed in a misfortunately run irq
290 * (like inside schedule() between switch_mm and
294 int offset
= pgd_index(address
);
300 pgd
= (pgd_t
*)per_cpu(current_pgd
, smp_processor_id()) + offset
;
301 pgd_k
= init_mm
.pgd
+ offset
;
303 /* Since we're two-level, we don't need to do both
304 * set_pgd and set_pmd (they do the same thing). If
305 * we go three-level at some point, do the right thing
306 * with pgd_present and set_pgd here.
308 * Also, since the vmalloc area is global, we don't
309 * need to copy individual PTE's, it is enough to
310 * copy the pgd pointer into the pte page of the
311 * root task. If that is there, we'll find our pte if
315 pud
= pud_offset(pgd
, address
);
316 pud_k
= pud_offset(pgd_k
, address
);
317 if (!pud_present(*pud_k
))
320 pmd
= pmd_offset(pud
, address
);
321 pmd_k
= pmd_offset(pud_k
, address
);
323 if (!pmd_present(*pmd_k
))
324 goto bad_area_nosemaphore
;
326 set_pmd(pmd
, *pmd_k
);
328 /* Make sure the actual PTE exists as well to
329 * catch kernel vmalloc-area accesses to non-mapped
330 * addresses. If we don't do this, this will just
331 * silently loop forever.
334 pte_k
= pte_offset_kernel(pmd_k
, address
);
335 if (!pte_present(*pte_k
))
342 /* Find fixup code. */
344 find_fixup_code(struct pt_regs
*regs
)
346 const struct exception_table_entry
*fixup
;
347 /* in case of delay slot fault (v32) */
348 unsigned long ip
= (instruction_pointer(regs
) & ~0x1);
350 fixup
= search_exception_tables(ip
);
352 /* Adjust the instruction pointer in the stackframe. */
353 instruction_pointer(regs
) = fixup
->fixup
;