PERFORCE change 96671 for review
Kip Macy
kmacy at FreeBSD.org
Thu May 4 22:38:31 UTC 2006
http://perforce.freebsd.org/chv.cgi?CH=96671
Change 96671 by kmacy at kmacy_storage:sun4v_rwbuf on 2006/05/04 22:38:10
pmap_kenter doesn't guarantee that the mapping isn't already in use
so change to tte_hash_update
avoid duplicate entry in pmap_enter_quick
Affected files ...
.. //depot/projects/kmacy_sun4v/src/sys/sun4v/sun4v/pmap.c#44 edit
Differences ...
==== //depot/projects/kmacy_sun4v/src/sys/sun4v/sun4v/pmap.c#44 (text+ko) ====
@@ -962,13 +962,11 @@
tte_data |= VTD_X;
if (wired)
tte_data |= VTD_WIRED;
-
if (pmap == kernel_pmap)
tte_data |= TTE_KERNEL_MINFLAGS;
- else
- tte_data |= TTE_MINFLAGS;
+
- otte_data = tte_hash_update(pmap->pm_hash, va, tte_data);
+ otte_data = tte_hash_update(pmap->pm_hash, va, tte_data | TTE_MINFLAGS);
invlva = FALSE;
if ((otte_data & ~(VTD_W|VTD_REF)) != tte_data) {
if (otte_data & VTD_V) {
@@ -1005,7 +1003,7 @@
vm_page_t mpte)
{
- uint64_t tte_data;
+ tte_t tte_data;
if (pmap->pm_context)
DPRINTF("pmap_enter_quick(ctx=0x%lx va=%lx, pa=0x%lx prot=%x)\n",
@@ -1013,9 +1011,12 @@
mtx_assert(&vm_page_queue_mtx, MA_OWNED);
VM_OBJECT_LOCK_ASSERT(m->object, MA_OWNED);
+
PMAP_LOCK(pmap);
-
+ if (tte_hash_lookup(pmap->pm_hash, va))
+ goto done;
+
tte_data = VM_PAGE_TO_PHYS(m);
/*
* Enter on the PV list if part of our managed memory. Note that we
@@ -1034,10 +1035,9 @@
if (pmap == kernel_pmap)
tte_data |= TTE_KERNEL_MINFLAGS;
- else
- tte_data |= TTE_MINFLAGS;
tte_hash_insert(pmap->pm_hash, va, tte_data | TTE_MINFLAGS);
+done:
PMAP_UNLOCK(pmap);
return (0);
@@ -1342,7 +1342,7 @@
static void
pmap_kenter(vm_offset_t va, vm_paddr_t pa)
{
- tte_hash_insert(kernel_pmap->pm_hash, va, pa | TTE_KERNEL | VTD_8K);
+ tte_hash_update(kernel_pmap->pm_hash, va, pa | TTE_KERNEL | VTD_8K);
}
/*
More information about the p4-projects
mailing list