fault.c (9a87ffc99ec8eb8d35eed7c4f816d75f5cc9662e) fault.c (a050ba1e7422f2cc60ff8bfde3f96d34d00cb585)
1/*
2 * Copyright (C) 2009 Wind River Systems Inc
3 * Implemented by fredrik.markstrom@gmail.com and ivarholmqvist@gmail.com
4 *
5 * based on arch/mips/mm/fault.c which is:
6 *
7 * Copyright (C) 1995-2000 Ralf Baechle
8 *

--- 72 unchanged lines hidden (view full) ---

81 if (faulthandler_disabled() || !mm)
82 goto bad_area_nosemaphore;
83
84 if (user_mode(regs))
85 flags |= FAULT_FLAG_USER;
86
87 perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS, 1, regs, address);
88
1/*
2 * Copyright (C) 2009 Wind River Systems Inc
3 * Implemented by fredrik.markstrom@gmail.com and ivarholmqvist@gmail.com
4 *
5 * based on arch/mips/mm/fault.c which is:
6 *
7 * Copyright (C) 1995-2000 Ralf Baechle
8 *

--- 72 unchanged lines hidden (view full) ---

81 if (faulthandler_disabled() || !mm)
82 goto bad_area_nosemaphore;
83
84 if (user_mode(regs))
85 flags |= FAULT_FLAG_USER;
86
87 perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS, 1, regs, address);
88
89 if (!mmap_read_trylock(mm)) {
90 if (!user_mode(regs) && !search_exception_tables(regs->ea))
91 goto bad_area_nosemaphore;
92retry:
89retry:
93 mmap_read_lock(mm);
94 }
95
96 vma = find_vma(mm, address);
90 vma = lock_mm_and_find_vma(mm, address, regs);
97 if (!vma)
91 if (!vma)
98 goto bad_area;
99 if (vma->vm_start <= address)
100 goto good_area;
101 if (!(vma->vm_flags & VM_GROWSDOWN))
102 goto bad_area;
103 if (expand_stack(vma, address))
104 goto bad_area;
92 goto bad_area_nosemaphore;
105/*
106 * Ok, we have a good vm_area for this memory access, so
107 * we can handle it..
108 */
93/*
94 * Ok, we have a good vm_area for this memory access, so
95 * we can handle it..
96 */
109good_area:
110 code = SEGV_ACCERR;
111
112 switch (cause) {
113 case EXC_SUPERV_INSN_ACCESS:
114 goto bad_area;
115 case EXC_SUPERV_DATA_ACCESS:
116 goto bad_area;
117 case EXC_X_PROTECTION_FAULT:

--- 160 unchanged lines hidden ---
97 code = SEGV_ACCERR;
98
99 switch (cause) {
100 case EXC_SUPERV_INSN_ACCESS:
101 goto bad_area;
102 case EXC_SUPERV_DATA_ACCESS:
103 goto bad_area;
104 case EXC_X_PROTECTION_FAULT:

--- 160 unchanged lines hidden ---