Changes in kernel/arch/sparc64/src/mm/sun4u/tlb.c [1dbc43f:9d58539] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/sparc64/src/mm/sun4u/tlb.c
r1dbc43f r9d58539 58 58 static void dtlb_pte_copy(pte_t *, size_t, bool); 59 59 static void itlb_pte_copy(pte_t *, size_t); 60 static void do_fast_instruction_access_mmu_miss_fault(istate_t *, uintptr_t, 61 const char *); 62 static void do_fast_data_access_mmu_miss_fault(istate_t *, tlb_tag_access_reg_t, 63 const char *); 64 static void do_fast_data_access_protection_fault(istate_t *, 65 tlb_tag_access_reg_t, const char *); 60 66 61 67 const char *context_encoding[] = { … … 216 222 * handler. 217 223 */ 218 as_page_fault(page_16k, PF_ACCESS_EXEC, istate); 224 if (as_page_fault(page_16k, PF_ACCESS_EXEC, istate) == 225 AS_PF_FAULT) { 226 do_fast_instruction_access_mmu_miss_fault(istate, 227 istate->tpc, __func__); 228 } 219 229 } 220 230 } … … 246 256 if (!tag.vpn) { 247 257 /* NULL access in kernel */ 248 panic("NULL pointer dereference."); 258 do_fast_data_access_mmu_miss_fault(istate, tag, 259 "Dereferencing NULL pointer."); 249 260 } else if (page_8k >= end_of_identity) { 250 261 /* Kernel non-identity. */ 251 262 as = AS_KERNEL; 252 263 } else { 253 panic("Unexpected kernel page fault."); 264 do_fast_data_access_mmu_miss_fault(istate, tag, 265 "Unexpected kernel page fault."); 254 266 } 255 267 } … … 271 283 * handler. 272 284 */ 273 as_page_fault(page_16k, PF_ACCESS_READ, istate); 285 if (as_page_fault(page_16k, PF_ACCESS_READ, istate) == 286 AS_PF_FAULT) { 287 do_fast_data_access_mmu_miss_fault(istate, tag, 288 __func__); 289 } 274 290 } 275 291 } … … 316 332 * handler. 317 333 */ 318 as_page_fault(page_16k, PF_ACCESS_WRITE, istate); 334 if (as_page_fault(page_16k, PF_ACCESS_WRITE, istate) == 335 AS_PF_FAULT) { 336 do_fast_data_access_protection_fault(istate, tag, 337 __func__); 338 } 319 339 } 320 340 } … … 408 428 409 429 #endif 430 431 void do_fast_instruction_access_mmu_miss_fault(istate_t *istate, 432 uintptr_t va, const char *str) 433 { 434 fault_if_from_uspace(istate, "%s, address=%p.", str, (void *) va); 435 panic_memtrap(istate, PF_ACCESS_EXEC, va, str); 436 } 437 438 void do_fast_data_access_mmu_miss_fault(istate_t *istate, 439 tlb_tag_access_reg_t tag, const char *str) 440 { 441 uintptr_t va; 442 443 va = tag.vpn << MMU_PAGE_WIDTH; 444 fault_if_from_uspace(istate, "%s, page=%p (asid=%u).", str, 445 (void *) va, tag.context); 446 panic_memtrap(istate, PF_ACCESS_UNKNOWN, va, str); 447 } 448 449 void do_fast_data_access_protection_fault(istate_t *istate, 450 tlb_tag_access_reg_t tag, const char *str) 451 { 452 uintptr_t va; 453 454 va = tag.vpn << MMU_PAGE_WIDTH; 455 fault_if_from_uspace(istate, "%s, page=%p (asid=%u).", str, 456 (void *) va, tag.context); 457 panic_memtrap(istate, PF_ACCESS_WRITE, va, str); 458 } 410 459 411 460 void describe_dmmu_fault(void)
Note:
See TracChangeset
for help on using the changeset viewer.