Changeset 46c20c8 in mainline for kernel/arch/sparc64/src/mm/sun4u/tlb.c
- Timestamp:
- 2010-11-26T20:08:10Z (15 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 45df59a
- Parents:
- fb150d78 (diff), ffdd2b9 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)links above to see all the changes relative to each parent. - File:
-
- 1 moved
-
kernel/arch/sparc64/src/mm/sun4u/tlb.c (moved) (moved from kernel/arch/sparc64/src/mm/tlb.c ) (13 diffs)
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/sparc64/src/mm/sun4u/tlb.c
rfb150d78 r46c20c8 27 27 */ 28 28 29 /** @addtogroup sparc64mm 29 /** @addtogroup sparc64mm 30 30 * @{ 31 31 */ … … 37 37 #include <mm/as.h> 38 38 #include <mm/asid.h> 39 #include <genarch/mm/page_ht.h>40 39 #include <arch/mm/frame.h> 41 40 #include <arch/mm/page.h> … … 45 44 #include <arch.h> 46 45 #include <print.h> 47 #include < arch/types.h>46 #include <typedefs.h> 48 47 #include <config.h> 49 48 #include <arch/trap/trap.h> … … 51 50 #include <panic.h> 52 51 #include <arch/asm.h> 52 #include <genarch/mm/page_ht.h> 53 53 54 54 #ifdef CONFIG_TSB … … 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 *, const char *); 60 static void do_fast_instruction_access_mmu_miss_fault(istate_t *, uintptr_t, 61 const char *); 61 62 static void do_fast_data_access_mmu_miss_fault(istate_t *, tlb_tag_access_reg_t, 62 63 const char *); … … 64 65 tlb_tag_access_reg_t, const char *); 65 66 66 c har *context_encoding[] = {67 const char *context_encoding[] = { 67 68 "Primary", 68 69 "Secondary", … … 222 223 * Forward the page fault to the address space page fault 223 224 * handler. 224 */ 225 */ 225 226 page_table_unlock(AS, true); 226 227 if (as_page_fault(page_16k, PF_ACCESS_EXEC, istate) == 227 228 AS_PF_FAULT) { 228 229 do_fast_instruction_access_mmu_miss_fault(istate, 229 __func__);230 istate->tpc, __func__); 230 231 } 231 232 } … … 258 259 /* NULL access in kernel */ 259 260 do_fast_data_access_mmu_miss_fault(istate, tag, 260 __func__);261 "Dereferencing NULL pointer."); 261 262 } else if (page_8k >= end_of_identity) { 262 263 /* … … 359 360 static void print_tlb_entry(int i, tlb_tag_read_reg_t t, tlb_data_t d) 360 361 { 361 printf("% d: vpn=%#llx, context=%d, v=%d, size=%d, nfo=%d, "362 "ie=% d, soft2=%#x, pfn=%#x, soft=%#x, l=%d, "363 "cp=% d, cv=%d, e=%d, p=%d, w=%d, g=%d\n", i,t.vpn,362 printf("%u: vpn=%#" PRIx64 ", context=%u, v=%u, size=%u, nfo=%u, " 363 "ie=%u, soft2=%#x, pfn=%#x, soft=%#x, l=%u, " 364 "cp=%u, cv=%u, e=%u, p=%u, w=%u, g=%u\n", i, (uint64_t) t.vpn, 364 365 t.context, d.v, d.size, d.nfo, d.ie, d.soft2, 365 366 d.pfn, d.soft, d.l, d.cp, d.cv, d.e, d.p, d.w, d.g); … … 438 439 439 440 void do_fast_instruction_access_mmu_miss_fault(istate_t *istate, 440 const char *str) 441 { 442 fault_if_from_uspace(istate, "%s.", str); 443 dump_istate(istate); 444 panic("%s.", str); 441 uintptr_t va, const char *str) 442 { 443 fault_if_from_uspace(istate, "%s, address=%p.", str, (void *) va); 444 panic_memtrap(istate, PF_ACCESS_EXEC, va, str); 445 445 } 446 446 … … 451 451 452 452 va = tag.vpn << MMU_PAGE_WIDTH; 453 if (tag.context) { 454 fault_if_from_uspace(istate, "%s, Page=%p (ASID=%d).", str, va, 455 tag.context); 456 } 457 dump_istate(istate); 458 printf("Faulting page: %p, ASID=%d.\n", va, tag.context); 459 panic("%s.", str); 453 fault_if_from_uspace(istate, "%s, page=%p (asid=%u).", str, 454 (void *) va, tag.context); 455 panic_memtrap(istate, PF_ACCESS_UNKNOWN, va, str); 460 456 } 461 457 … … 466 462 467 463 va = tag.vpn << MMU_PAGE_WIDTH; 468 469 if (tag.context) { 470 fault_if_from_uspace(istate, "%s, Page=%p (ASID=%d).", str, va, 471 tag.context); 472 } 473 printf("Faulting page: %p, ASID=%d\n", va, tag.context); 474 dump_istate(istate); 475 panic("%s.", str); 476 } 477 478 void dump_sfsr_and_sfar(void) 464 fault_if_from_uspace(istate, "%s, page=%p (asid=%u).", str, 465 (void *) va, tag.context); 466 panic_memtrap(istate, PF_ACCESS_WRITE, va, str); 467 } 468 469 void describe_dmmu_fault(void) 479 470 { 480 471 tlb_sfsr_reg_t sfsr; … … 493 484 sfsr.e, sfsr.ct, sfsr.pr, sfsr.w, sfsr.ow, sfsr.fv); 494 485 #endif 486 487 printf("DTLB SFAR: address=%p\n", (void *) sfar); 488 489 dtlb_sfsr_write(0); 490 } 491 492 void dump_sfsr_and_sfar(void) 493 { 494 tlb_sfsr_reg_t sfsr; 495 uintptr_t sfar; 496 497 sfsr.value = dtlb_sfsr_read(); 498 sfar = dtlb_sfar_read(); 499 500 #if defined (US) 501 printf("DTLB SFSR: asi=%#x, ft=%#x, e=%d, ct=%d, pr=%d, w=%d, ow=%d, " 502 "fv=%d\n", sfsr.asi, sfsr.ft, sfsr.e, sfsr.ct, sfsr.pr, sfsr.w, 503 sfsr.ow, sfsr.fv); 504 #elif defined (US3) 505 printf("DTLB SFSR: nf=%d, asi=%#x, tm=%d, ft=%#x, e=%d, ct=%d, pr=%d, " 506 "w=%d, ow=%d, fv=%d\n", sfsr.nf, sfsr.asi, sfsr.tm, sfsr.ft, 507 sfsr.e, sfsr.ct, sfsr.pr, sfsr.w, sfsr.ow, sfsr.fv); 508 #endif 495 509 496 printf("DTLB SFAR: address=%p\n", sfar);510 printf("DTLB SFAR: address=%p\n", (void *) sfar); 497 511 498 512 dtlb_sfsr_write(0);
Note:
See TracChangeset
for help on using the changeset viewer.
