Rev 4345 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 4345 | Rev 4346 | ||
|---|---|---|---|
| Line 32... | Line 32... | ||
| 32 | /** @file |
32 | /** @file |
| 33 | * @brief Page fault related functions. |
33 | * @brief Page fault related functions. |
| 34 | */ |
34 | */ |
| 35 | #include <panic.h> |
35 | #include <panic.h> |
| 36 | #include <arch/exception.h> |
36 | #include <arch/exception.h> |
| 37 | #include <arch/debug/print.h> |
- | |
| 38 | #include <arch/mm/page_fault.h> |
37 | #include <arch/mm/page_fault.h> |
| 39 | #include <mm/as.h> |
38 | #include <mm/as.h> |
| 40 | #include <genarch/mm/page_pt.h> |
39 | #include <genarch/mm/page_pt.h> |
| 41 | #include <arch.h> |
40 | #include <arch.h> |
| 42 | #include <interrupt.h> |
41 | #include <interrupt.h> |
| Line 180... | Line 179... | ||
| 180 | 179 | ||
| 181 | int ret = as_page_fault(badvaddr, access, istate); |
180 | int ret = as_page_fault(badvaddr, access, istate); |
| 182 | 181 | ||
| 183 | if (ret == AS_PF_FAULT) { |
182 | if (ret == AS_PF_FAULT) { |
| 184 | print_istate(istate); |
183 | print_istate(istate); |
| 185 | dprintf("page fault - pc: %x, va: %x, status: %x(%x), " |
184 | printf("page fault - pc: %x, va: %x, status: %x(%x), " |
| 186 | "access:%d\n", istate->pc, badvaddr, fsr.status, fsr, |
185 | "access:%d\n", istate->pc, badvaddr, fsr.status, fsr, |
| 187 | access); |
186 | access); |
| 188 | 187 | ||
| 189 | fault_if_from_uspace(istate, "Page fault: %#x.", badvaddr); |
188 | fault_if_from_uspace(istate, "Page fault: %#x.", badvaddr); |
| 190 | panic("Page fault."); |
189 | panic("Page fault."); |
| 191 | } |
190 | } |
| 192 | } |
191 | } |
| 193 | 192 | ||
| Line 199... | Line 198... | ||
| 199 | void prefetch_abort(int exc_no, istate_t *istate) |
198 | void prefetch_abort(int exc_no, istate_t *istate) |
| 200 | { |
199 | { |
| 201 | int ret = as_page_fault(istate->pc, PF_ACCESS_EXEC, istate); |
200 | int ret = as_page_fault(istate->pc, PF_ACCESS_EXEC, istate); |
| 202 | 201 | ||
| 203 | if (ret == AS_PF_FAULT) { |
202 | if (ret == AS_PF_FAULT) { |
| 204 | dprintf("prefetch_abort\n"); |
203 | printf("prefetch_abort\n"); |
| 205 | print_istate(istate); |
204 | print_istate(istate); |
| 206 | panic("page fault - prefetch_abort at address: %x.", |
205 | panic("page fault - prefetch_abort at address: %x.", |
| 207 | istate->pc); |
206 | istate->pc); |
| 208 | } |
207 | } |
| 209 | } |
208 | } |