Page MenuHomeFreeBSD

D11790.diff
No OneTemporary

D11790.diff

Index: head/sys/amd64/amd64/pmap.c
===================================================================
--- head/sys/amd64/amd64/pmap.c
+++ head/sys/amd64/amd64/pmap.c
@@ -2209,12 +2209,14 @@
pmap_free_zero_pages(struct spglist *free)
{
vm_page_t m;
+ int count;
- while ((m = SLIST_FIRST(free)) != NULL) {
+ for (count = 0; (m = SLIST_FIRST(free)) != NULL; count++) {
SLIST_REMOVE_HEAD(free, plinks.s.ss);
/* Preserve the page's PG_ZERO setting. */
vm_page_free_toq(m);
}
+ atomic_subtract_int(&vm_cnt.v_wire_count, count);
}
/*
@@ -2320,13 +2322,6 @@
pmap_unwire_ptp(pmap, va, pdppg, free);
}
- /*
- * This is a release store so that the ordinary store unmapping
- * the page table page is globally performed before TLB shoot-
- * down is begun.
- */
- atomic_subtract_rel_int(&vm_cnt.v_wire_count, 1);
-
/*
* Put page on a list so that it is released after
* *ALL* TLB shootdown is done
@@ -3010,7 +3005,6 @@
SLIST_REMOVE_HEAD(&free, plinks.s.ss);
/* Recycle a freed page table page. */
m_pc->wire_count = 1;
- atomic_add_int(&vm_cnt.v_wire_count, 1);
}
pmap_free_zero_pages(&free);
return (m_pc);
@@ -3678,7 +3672,6 @@
("pmap_remove_pde: pte page wire count error"));
mpte->wire_count = 0;
pmap_add_delayed_free_list(mpte, free, FALSE);
- atomic_subtract_int(&vm_cnt.v_wire_count, 1);
}
}
return (pmap_unuse_pt(pmap, sva, *pmap_pdpe(pmap, sva), free));
@@ -5622,7 +5615,6 @@
("pmap_remove_pages: pte page wire count error"));
mpte->wire_count = 0;
pmap_add_delayed_free_list(mpte, &free, FALSE);
- atomic_subtract_int(&vm_cnt.v_wire_count, 1);
}
} else {
pmap_resident_count_dec(pmap, 1);
Index: head/sys/i386/i386/pmap.c
===================================================================
--- head/sys/i386/i386/pmap.c
+++ head/sys/i386/i386/pmap.c
@@ -1709,12 +1709,14 @@
pmap_free_zero_pages(struct spglist *free)
{
vm_page_t m;
+ int count;
- while ((m = SLIST_FIRST(free)) != NULL) {
+ for (count = 0; (m = SLIST_FIRST(free)) != NULL; count++) {
SLIST_REMOVE_HEAD(free, plinks.s.ss);
/* Preserve the page's PG_ZERO setting. */
vm_page_free_toq(m);
}
+ atomic_subtract_int(&vm_cnt.v_wire_count, count);
}
/*
@@ -1792,13 +1794,6 @@
--pmap->pm_stats.resident_count;
/*
- * This is a release store so that the ordinary store unmapping
- * the page table page is globally performed before TLB shoot-
- * down is begun.
- */
- atomic_subtract_rel_int(&vm_cnt.v_wire_count, 1);
-
- /*
* Do an invltlb to make the invalidated mapping
* take effect immediately.
*/
@@ -2061,11 +2056,11 @@
("pmap_release: got wrong ptd page"));
#endif
m->wire_count--;
- atomic_subtract_int(&vm_cnt.v_wire_count, 1);
vm_page_free_zero(m);
}
+ atomic_subtract_int(&vm_cnt.v_wire_count, NPGPTD);
}
-
+
static int
kvm_size(SYSCTL_HANDLER_ARGS)
{
@@ -2324,7 +2319,6 @@
SLIST_REMOVE_HEAD(&free, plinks.s.ss);
/* Recycle a freed page table page. */
m_pc->wire_count = 1;
- atomic_add_int(&vm_cnt.v_wire_count, 1);
}
pmap_free_zero_pages(&free);
return (m_pc);
@@ -2873,7 +2867,6 @@
("pmap_remove_pde: pte page wire count error"));
mpte->wire_count = 0;
pmap_add_delayed_free_list(mpte, free, FALSE);
- atomic_subtract_int(&vm_cnt.v_wire_count, 1);
}
}
}
@@ -4593,7 +4586,6 @@
("pmap_remove_pages: pte page wire count error"));
mpte->wire_count = 0;
pmap_add_delayed_free_list(mpte, &free, FALSE);
- atomic_subtract_int(&vm_cnt.v_wire_count, 1);
}
} else {
pmap->pm_stats.resident_count--;

File Metadata

Mime Type
text/plain
Expires
Sat, May 23, 7:35 AM (18 h, 59 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
33443254
Default Alt Text
D11790.diff (3 KB)

Event Timeline