PERFORCE change 96637 for review
Kip Macy
kmacy at FreeBSD.org
Thu May 4 00:28:18 UTC 2006
http://perforce.freebsd.org/chv.cgi?CH=96637
Change 96637 by kmacy at kmacy_storage:sun4v_rwbuf on 2006/05/04 00:27:19
some basic cleanup
fix pmap_ipi to send shootdowns to all other cpus
pre-zero pages allocated by pmap_bootstrap
Affected files ...
.. //depot/projects/kmacy_sun4v/src/sys/sun4v/sun4v/pmap.c#42 edit
Differences ...
==== //depot/projects/kmacy_sun4v/src/sys/sun4v/sun4v/pmap.c#42 (text+ko) ====
@@ -377,6 +377,7 @@
continue;
pa = phys_avail[i];
phys_avail[i] += size;
+ pmap_scrub_pages(pa, size);
return (pa);
}
panic("pmap_bootstrap_alloc");
@@ -824,6 +825,7 @@
pv_entry_count > pv_entry_high_water)
return;
+
vm_page_lock_queues();
if (dst_pmap < src_pmap) {
PMAP_LOCK(dst_pmap);
@@ -842,6 +844,7 @@
if ((tte_data & VTD_MANAGED) != 0) {
if (tte_hash_lookup_nolock(dst_pmap->pm_hash, addr) == 0) {
m = PHYS_TO_VM_PAGE(TTE_GET_PA(tte_data));
+
tte_hash_insert(dst_pmap->pm_hash, addr, tte_data & ~(VTD_W|VTD_REF));
dst_pmap->pm_stats.resident_count++;
pmap_insert_entry(dst_pmap, addr, m);
@@ -1012,18 +1015,20 @@
VM_OBJECT_LOCK_ASSERT(m->object, MA_OWNED);
PMAP_LOCK(pmap);
+
+ tte_data = VM_PAGE_TO_PHYS(m);
/*
* 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
* called at interrupt time.
*/
- if ((m->flags & (PG_FICTITIOUS|PG_UNMANAGED)) == 0)
+ if ((m->flags & (PG_FICTITIOUS|PG_UNMANAGED)) == 0) {
pmap_insert_entry(pmap, va, m);
+ tte_data |= VTD_MANAGED;
+ }
pmap->pm_stats.resident_count++;
- tte_data = VM_PAGE_TO_PHYS(m);
-
if ((prot & VM_PROT_EXECUTE) != 0)
tte_data |= VTD_X;
@@ -1032,9 +1037,6 @@
else
tte_data |= TTE_MINFLAGS;
- if (!(m->flags & (PG_FICTITIOUS|PG_UNMANAGED)))
- tte_data |= VTD_MANAGED;
-
tte_hash_insert(pmap->pm_hash, va, tte_data | TTE_MINFLAGS);
PMAP_UNLOCK(pmap);
@@ -1194,11 +1196,14 @@
ackexpect |= (1 << i);
#if 0
inext = ((i & ~0x3) + 4);
+ cpus = (cpus >> (inext - i));
+ i = inext;
#else
inext = i++;
+ cpus = cpus >> 1;
#endif
- cpus = (cpus >> (inext - i));
- i = inext;
+
+
}
#else
inext = i = cpus = 0;
@@ -1265,7 +1270,6 @@
/* XXX */
invltlb();
-
if ((((eva - sva) >> PAGE_SHIFT) < MAX_INVALIDATES)) {
for (tva = sva; tva < eva; tva += PAGE_SIZE_8K)
invlpg(tva, pmap->pm_context);
@@ -1280,7 +1284,6 @@
else
func = tl_invlctx;
-
pmap_ipi(pmap, (void *)func, pmap->pm_context, 0);
if (pmap != kernel_pmap)
pmap->pm_tlbactive = pmap->pm_active;
@@ -1543,12 +1546,11 @@
uint64_t otte_data, tte_data;
vm_page_t m;
- if ((otte_data = tte_hash_lookup(pmap->pm_hash, tva)) == 0)
+ if ((tte_data = tte_hash_lookup(pmap->pm_hash, tva)) == 0)
continue;
- tte_data = otte_data;
-
tte_data &= ~(VTD_SW_W | VTD_W | VTD_REF);
+
otte_data = tte_hash_update(pmap->pm_hash, tva, tte_data);
if (tte_data != otte_data)
@@ -1556,7 +1558,7 @@
if (otte_data & VTD_MANAGED) {
m = NULL;
-
+
if (otte_data & VTD_REF) {
m = PHYS_TO_VM_PAGE(TTE_GET_PA(otte_data));
vm_page_flag_set(m, PG_REFERENCED);
@@ -1565,8 +1567,7 @@
m = PHYS_TO_VM_PAGE(TTE_GET_PA(otte_data));
vm_page_dirty(m);
}
-
- }
+ }
}
sched_unpin();
More information about the p4-projects
mailing list