diff options
author | alc <alc@FreeBSD.org> | 2007-11-28 22:41:14 +0000 |
---|---|---|
committer | alc <alc@FreeBSD.org> | 2007-11-28 22:41:14 +0000 |
commit | 40b96e645194aa223c8c8406e0300ce1692f9946 (patch) | |
tree | 54184388f57149e582694bd735f6d4e49046492b /sys | |
parent | 9f93f5ff2f22ec1a46e88ab0cbbbfdde63a65de1 (diff) | |
download | FreeBSD-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.c | 9 |
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); } } |