summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authoralc <alc@FreeBSD.org>2007-11-28 22:41:14 +0000
committeralc <alc@FreeBSD.org>2007-11-28 22:41:14 +0000
commit40b96e645194aa223c8c8406e0300ce1692f9946 (patch)
tree54184388f57149e582694bd735f6d4e49046492b /sys
parent9f93f5ff2f22ec1a46e88ab0cbbbfdde63a65de1 (diff)
downloadFreeBSD-src-40b96e645194aa223c8c8406e0300ce1692f9946.zip
FreeBSD-src-40b96e645194aa223c8c8406e0300ce1692f9946.tar.gz
Account for pv entry pages in the total number of wired pages. (Note: pv
entry pages have always been included in the total number of wired pages on i386 just not amd64.) MFC after: 6 weeks
Diffstat (limited to 'sys')
-rw-r--r--sys/amd64/amd64/pmap.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/sys/amd64/amd64/pmap.c b/sys/amd64/amd64/pmap.c
index e3afa4f..56ff43d 100644
--- a/sys/amd64/amd64/pmap.c
+++ b/sys/amd64/amd64/pmap.c
@@ -1733,6 +1733,7 @@ free_pv_entry(pmap_t pmap, pv_entry_t pv)
TAILQ_REMOVE(&pmap->pm_pvchunk, pc, pc_list);
m = PHYS_TO_VM_PAGE(DMAP_TO_PHYS((vm_offset_t)pc));
dump_drop_page(m->phys_addr);
+ vm_page_unwire(m, 0);
vm_page_free(m);
}
@@ -1782,7 +1783,8 @@ get_pv_entry(pmap_t pmap, int try)
}
}
/* No free items, allocate another chunk */
- m = vm_page_alloc(NULL, colour, VM_ALLOC_NORMAL | VM_ALLOC_NOOBJ);
+ m = vm_page_alloc(NULL, colour, VM_ALLOC_NORMAL | VM_ALLOC_NOOBJ |
+ VM_ALLOC_WIRED);
if (m == NULL) {
if (try) {
pv_entry_count--;
@@ -1797,12 +1799,12 @@ get_pv_entry(pmap_t pmap, int try)
PV_STAT(pmap_collect_inactive++);
pmap_collect(pmap, &vm_page_queues[PQ_INACTIVE]);
m = vm_page_alloc(NULL, colour,
- VM_ALLOC_NORMAL | VM_ALLOC_NOOBJ);
+ VM_ALLOC_NORMAL | VM_ALLOC_NOOBJ | VM_ALLOC_WIRED);
if (m == NULL) {
PV_STAT(pmap_collect_active++);
pmap_collect(pmap, &vm_page_queues[PQ_ACTIVE]);
m = vm_page_alloc(NULL, colour,
- VM_ALLOC_SYSTEM | VM_ALLOC_NOOBJ);
+ VM_ALLOC_SYSTEM | VM_ALLOC_NOOBJ | VM_ALLOC_WIRED);
if (m == NULL)
panic("get_pv_entry: increase vm.pmap.shpgperproc");
}
@@ -3048,6 +3050,7 @@ pmap_remove_pages(pmap_t pmap)
TAILQ_REMOVE(&pmap->pm_pvchunk, pc, pc_list);
m = PHYS_TO_VM_PAGE(DMAP_TO_PHYS((vm_offset_t)pc));
dump_drop_page(m->phys_addr);
+ vm_page_unwire(m, 0);
vm_page_free(m);
}
}
OpenPOWER on IntegriCloud