Rev 2071 | Rev 2089 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 2071 | Rev 2078 | ||
|---|---|---|---|
| Line 325... | Line 325... | ||
| 325 | 325 | ||
| 326 | printf("I-TLB contents:\n"); |
326 | printf("I-TLB contents:\n"); |
| 327 | for (i = 0; i < ITLB_ENTRY_COUNT; i++) { |
327 | for (i = 0; i < ITLB_ENTRY_COUNT; i++) { |
| 328 | d.value = itlb_data_access_read(i); |
328 | d.value = itlb_data_access_read(i); |
| 329 | t.value = itlb_tag_read_read(i); |
329 | t.value = itlb_tag_read_read(i); |
| 330 | 330 | ||
| 331 | printf("%d: vpn=%#llx, context=%d, v=%d, size=%d, nfo=%d, " |
331 | printf("%d: vpn=%#llx, context=%d, v=%d, size=%d, nfo=%d, " |
| 332 | "ie=%d, soft2=%#x, diag=%#x, pfn=%#x, soft=%#x, l=%d, " |
332 | "ie=%d, soft2=%#x, diag=%#x, pfn=%#x, soft=%#x, l=%d, " |
| 333 | "cp=%d, cv=%d, e=%d, p=%d, w=%d, g=%d\n", i, t.vpn, |
333 | "cp=%d, cv=%d, e=%d, p=%d, w=%d, g=%d\n", i, t.vpn, |
| 334 | t.context, d.v, d.size, d.nfo, d.ie, d.soft2, d.diag, |
334 | t.context, d.v, d.size, d.nfo, d.ie, d.soft2, d.diag, |
| 335 | d.pfn, d.soft, d.l, d.cp, d.cv, d.e, d.p, d.w, d.g); |
335 | d.pfn, d.soft, d.l, d.cp, d.cv, d.e, d.p, d.w, d.g); |
| Line 406... | Line 406... | ||
| 406 | { |
406 | { |
| 407 | int i; |
407 | int i; |
| 408 | tlb_data_t d; |
408 | tlb_data_t d; |
| 409 | tlb_tag_read_reg_t t; |
409 | tlb_tag_read_reg_t t; |
| 410 | 410 | ||
| - | 411 | /* |
|
| - | 412 | * Walk all ITLB and DTLB entries and remove all unlocked mappings. |
|
| - | 413 | * |
|
| - | 414 | * The kernel doesn't use global mappings so any locked global mappings |
|
| - | 415 | * found must have been created by someone else. Their only purpose now |
|
| - | 416 | * is to collide with proper mappings. Invalidate immediately. It should |
|
| - | 417 | * be safe to invalidate them as late as now. |
|
| - | 418 | */ |
|
| - | 419 | ||
| 411 | for (i = 0; i < ITLB_ENTRY_COUNT; i++) { |
420 | for (i = 0; i < ITLB_ENTRY_COUNT; i++) { |
| 412 | d.value = itlb_data_access_read(i); |
421 | d.value = itlb_data_access_read(i); |
| 413 | if (!d.l) { |
422 | if (!d.l || d.g) { |
| 414 | t.value = itlb_tag_read_read(i); |
423 | t.value = itlb_tag_read_read(i); |
| 415 | d.v = false; |
424 | d.v = false; |
| 416 | itlb_tag_access_write(t.value); |
425 | itlb_tag_access_write(t.value); |
| 417 | itlb_data_access_write(i, d.value); |
426 | itlb_data_access_write(i, d.value); |
| 418 | } |
427 | } |
| 419 | } |
428 | } |
| 420 | 429 | ||
| 421 | for (i = 0; i < DTLB_ENTRY_COUNT; i++) { |
430 | for (i = 0; i < DTLB_ENTRY_COUNT; i++) { |
| 422 | d.value = dtlb_data_access_read(i); |
431 | d.value = dtlb_data_access_read(i); |
| 423 | if (!d.l) { |
432 | if (!d.l || d.g) { |
| 424 | t.value = dtlb_tag_read_read(i); |
433 | t.value = dtlb_tag_read_read(i); |
| 425 | d.v = false; |
434 | d.v = false; |
| 426 | dtlb_tag_access_write(t.value); |
435 | dtlb_tag_access_write(t.value); |
| 427 | dtlb_data_access_write(i, d.value); |
436 | dtlb_data_access_write(i, d.value); |
| 428 | } |
437 | } |