PERFORCE change 93175 for review
Kip Macy
kmacy at FreeBSD.org
Sun Mar 12 02:54:59 UTC 2006
http://perforce.freebsd.org/chv.cgi?CH=93175
Change 93175 by kmacy at kmacy_storage:sun4v_work on 2006/03/11 22:55:12
pmap_enter_quick was not setting the TTE flags correctly
Affected files ...
.. //depot/projects/kmacy_sun4v/src/sys/sun4v/sun4v/pmap.c#22 edit
Differences ...
==== //depot/projects/kmacy_sun4v/src/sys/sun4v/sun4v/pmap.c#22 (text+ko) ====
@@ -702,8 +702,9 @@
vm_page_t om;
int invlva;
#if 0
- printf("ctx=%d va=%lx prot=%x wired=%x\n", pmap->pm_context,
- va, prot, wired);
+ if (pmap->pm_context)
+ printf("ctx=%d va=%lx prot=%x wired=%x\n", (int)pmap->pm_context,
+ va, prot, wired);
#endif
om = NULL;
@@ -779,6 +780,7 @@
tte_data |= VTD_X;
if (wired)
tte_data |= VTD_WIRED;
+
if (pmap == kernel_pmap)
tte_data |= TTE_KERNEL_MINFLAGS;
else
@@ -804,7 +806,6 @@
if (invlva)
pmap_invalidate_page(pmap, va);
} else {
- tsb_set_tte(&pmap->pm_tsb, va, tte_data, pmap->pm_context);
tte_hash_insert(pmap->pm_hash, va, tte_data);
}
}
@@ -821,11 +822,13 @@
pmap_enter_quick(pmap_t pmap, vm_offset_t va, vm_page_t m, vm_prot_t prot,
vm_page_t mpte)
{
- uint64_t pa;
+
+ uint64_t tte_data;
mtx_assert(&vm_page_queue_mtx, MA_OWNED);
VM_OBJECT_LOCK_ASSERT(m->object, MA_OWNED);
PMAP_LOCK(pmap);
+
/*
* Enter on the PV list if part of our managed memory. Note that we
* raise IPL while manipulating pv_table since pmap_enter can be
@@ -836,12 +839,22 @@
pmap->pm_stats.resident_count++;
- pa = VM_PAGE_TO_PHYS(m);
+ tte_data = VM_PAGE_TO_PHYS(m);
+
+ if ((prot & VM_PROT_WRITE) != 0)
+ tte_data |= VTD_SW_W;
+ if ((prot & VM_PROT_EXECUTE) != 0)
+ tte_data |= VTD_X;
+
+ if (pmap == kernel_pmap)
+ tte_data |= TTE_KERNEL_MINFLAGS;
+ else
+ tte_data |= TTE_MINFLAGS;
- if (m->flags & (PG_FICTITIOUS|PG_UNMANAGED))
- pa |= VTD_MANAGED;
+ if (!(m->flags & (PG_FICTITIOUS|PG_UNMANAGED)))
+ tte_data |= VTD_MANAGED;
- tte_hash_insert(pmap->pm_hash, va, pa | TTE_MINFLAGS);
+ tte_hash_insert(pmap->pm_hash, va, tte_data | TTE_MINFLAGS);
PMAP_UNLOCK(pmap);
@@ -1014,6 +1027,8 @@
void
pmap_kenter(vm_offset_t va, vm_paddr_t pa)
{
+ tsb_set_tte(&kernel_pmap->pm_tsb, va, pa | TTE_KERNEL | VTD_8K,
+ kernel_pmap->pm_context);
tte_hash_insert(kernel_pmap->pm_hash, va, pa | TTE_KERNEL | VTD_8K);
}
More information about the p4-projects
mailing list