Changeset 25eec4e in mainline for kernel/arch/sparc64/src/mm/sun4u/tlb.c
- Timestamp:
- 2013-04-19T18:38:18Z (12 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 6d717a4
- Parents:
- a1e2df13 (diff), 289cb7dd (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 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/sparc64/src/mm/sun4u/tlb.c
ra1e2df13 r25eec4e 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 *);66 60 67 61 const char *context_encoding[] = { … … 202 196 void fast_instruction_access_mmu_miss(sysarg_t unused, istate_t *istate) 203 197 { 204 uintptr_t page_16k = ALIGN_DOWN(istate->tpc, PAGE_SIZE);205 198 size_t index = (istate->tpc >> MMU_PAGE_WIDTH) % MMU_PAGES_PER_PAGE; 206 199 pte_t *t; 207 200 208 t = page_mapping_find(AS, page_16k, true);201 t = page_mapping_find(AS, istate->tpc, true); 209 202 if (t && PTE_EXECUTABLE(t)) { 210 203 /* … … 222 215 * handler. 223 216 */ 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 } 217 as_page_fault(istate->tpc, PF_ACCESS_EXEC, istate); 229 218 } 230 219 } … … 256 245 if (!tag.vpn) { 257 246 /* NULL access in kernel */ 258 do_fast_data_access_mmu_miss_fault(istate, tag, 259 "Dereferencing NULL pointer."); 247 panic("NULL pointer dereference."); 260 248 } else if (page_8k >= end_of_identity) { 261 249 /* Kernel non-identity. */ 262 250 as = AS_KERNEL; 263 251 } else { 264 do_fast_data_access_mmu_miss_fault(istate, tag, 265 "Unexpected kernel page fault."); 252 panic("Unexpected kernel page fault."); 266 253 } 267 254 } … … 283 270 * handler. 284 271 */ 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 } 272 as_page_fault(page_16k, PF_ACCESS_READ, istate); 290 273 } 291 274 } … … 332 315 * handler. 333 316 */ 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 } 317 as_page_fault(page_16k, PF_ACCESS_WRITE, istate); 339 318 } 340 319 } … … 428 407 429 408 #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 }459 409 460 410 void describe_dmmu_fault(void)
Note:
See TracChangeset
for help on using the changeset viewer.