Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F157516768
D11790.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
3 KB
Referenced Files
None
Subscribers
None
D11790.diff
View Options
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
Details
Attached
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)
Attached To
Mode
D11790: Batch v_wire_count updates in the pmap code.
Attached
Detach File
Event Timeline
Log In to Comment