Deleted Added
full compact
42c42
< * $FreeBSD: head/sys/sparc64/sparc64/pmap.c 100718 2002-07-26 15:54:04Z jake $
---
> * $FreeBSD: head/sys/sparc64/sparc64/pmap.c 100771 2002-07-27 21:57:38Z jake $
160a161,162
> static vm_offset_t pmap_map_direct(vm_page_t m);
>
520a523
> m->md.color = 0;
583a587
> int color;
588,589c592,599
< for (i = 0, c = 0; i < DCACHE_COLORS; i++) {
< if (i != DCACHE_COLOR(va) && m->md.colors[i] != 0)
---
> color = DCACHE_COLOR(va);
> m->md.colors[color]++;
> if (m->md.color == color) {
> CTR0(KTR_PMAP, "pmap_cache_enter: cacheable");
> return (1);
> }
> for (c = 0, i = 0; i < DCACHE_COLORS; i++) {
> if (m->md.colors[i] != 0)
592,593c602,604
< m->md.colors[DCACHE_COLOR(va)]++;
< if (c == 0) {
---
> if (c == 1) {
> m->md.color = color;
> dcache_page_inval(VM_PAGE_TO_PHYS(m));
598c609
< if ((m->md.flags & PG_UNCACHEABLE) != 0) {
---
> if (m->md.color == -1) {
608c619
< m->md.flags |= PG_UNCACHEABLE;
---
> m->md.color = -1;
615a627
> int color;
623,624c635,639
< m->md.colors[DCACHE_COLOR(va)]--;
< for (i = 0, c = 0; i < DCACHE_COLORS; i++) {
---
> color = DCACHE_COLOR(va);
> m->md.colors[color]--;
> if (m->md.color != -1 || m->md.colors[color] != 0)
> return;
> for (c = 0, i = 0; i < DCACHE_COLORS; i++) {
628c643
< if (c > 1 || (m->md.flags & PG_UNCACHEABLE) == 0)
---
> if (c > 1)
634c649
< m->md.flags &= ~PG_UNCACHEABLE;
---
> m->md.color = color;
762a778,792
> static vm_offset_t
> pmap_map_direct(vm_page_t m)
> {
> vm_offset_t pa;
> vm_offset_t va;
>
> pa = VM_PAGE_TO_PHYS(m);
> if (m->md.color == -1)
> va = TLB_DIRECT_MASK | pa | TLB_DIRECT_UNCACHEABLE;
> else
> va = TLB_DIRECT_MASK | pa |
> (m->md.color << TLB_DIRECT_COLOR_SHIFT);
> return (va << TLB_DIRECT_SHIFT);
> }
>
1415c1445
< vm_offset_t pa;
---
> vm_offset_t va;
1417,1420c1447,1450
< pa = VM_PAGE_TO_PHYS(m);
< CTR1(KTR_PMAP, "pmap_zero_page: pa=%#lx", pa);
< dcache_page_inval(pa);
< aszero(ASI_PHYS_USE_EC, pa, PAGE_SIZE);
---
> va = pmap_map_direct(m);
> CTR2(KTR_PMAP, "pmap_zero_page: pa=%#lx va=%#lx",
> VM_PAGE_TO_PHYS(m), va);
> bzero((void *)va, PAGE_SIZE);
1426c1456
< vm_offset_t pa;
---
> vm_offset_t va;
1428,1430d1457
< pa = VM_PAGE_TO_PHYS(m);
< CTR3(KTR_PMAP, "pmap_zero_page_area: pa=%#lx off=%#x size=%#x",
< pa, off, size);
1432,1433c1459,1462
< dcache_page_inval(pa);
< aszero(ASI_PHYS_USE_EC, pa + off, size);
---
> va = pmap_map_direct(m);
> CTR4(KTR_PMAP, "pmap_zero_page_area: pa=%#lx va=%#lx off=%#x size=%#x",
> VM_PAGE_TO_PHYS(m), va, off, size);
> bzero((void *)(va + off), size);
1439c1468
< vm_offset_t pa = VM_PAGE_TO_PHYS(m);
---
> vm_offset_t va;
1441,1449c1470,1473
< CTR1(KTR_PMAP, "pmap_zero_page_idle: pa=%#lx", pa);
< #ifdef SMP
< mtx_lock(&Giant);
< #endif
< dcache_inval_phys(pa, pa + PAGE_SIZE - 1);
< #ifdef SMP
< mtx_unlock(&Giant);
< #endif
< aszero(ASI_PHYS_USE_EC, pa, PAGE_SIZE);
---
> va = pmap_map_direct(m);
> CTR2(KTR_PMAP, "pmap_zero_page_idle: pa=%#lx va=%#lx",
> VM_PAGE_TO_PHYS(m), va);
> bzero((void *)va, PAGE_SIZE);
1461,1465c1485,1489
< dst = VM_PAGE_TO_PHYS(mdst);
< src = VM_PAGE_TO_PHYS(msrc);
< CTR2(KTR_PMAP, "pmap_copy_page: src=%#lx dst=%#lx", src, dst);
< dcache_page_inval(dst);
< ascopy(ASI_PHYS_USE_EC, src, dst, PAGE_SIZE);
---
> src = pmap_map_direct(msrc);
> dst = pmap_map_direct(mdst);
> CTR4(KTR_PMAP, "pmap_zero_page: src=%#lx va=%#lx dst=%#lx va=%#lx",
> VM_PAGE_TO_PHYS(msrc), src, VM_PAGE_TO_PHYS(mdst), dst);
> bcopy((void *)src, (void *)dst, PAGE_SIZE);