diff options
author | alc <alc@FreeBSD.org> | 2012-06-01 04:26:50 +0000 |
---|---|---|
committer | alc <alc@FreeBSD.org> | 2012-06-01 04:26:50 +0000 |
commit | 3124f82898ba3459727813f9e8446e121718f4ef (patch) | |
tree | f8c00f329ead6a9d59ffcf102d0e37f6ff072eda /sys/amd64 | |
parent | 6ff891e02e05acd286a89d6854ea314c352d2744 (diff) | |
download | FreeBSD-src-3124f82898ba3459727813f9e8446e121718f4ef.zip FreeBSD-src-3124f82898ba3459727813f9e8446e121718f4ef.tar.gz |
Eliminate code duplication in free_pv_entry() and pmap_remove_pages() by
introducing free_pv_chunk().
Diffstat (limited to 'sys/amd64')
-rw-r--r-- | sys/amd64/amd64/pmap.c | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/sys/amd64/amd64/pmap.c b/sys/amd64/amd64/pmap.c index 657b04a..7936897 100644 --- a/sys/amd64/amd64/pmap.c +++ b/sys/amd64/amd64/pmap.c @@ -218,6 +218,7 @@ caddr_t CADDR1 = 0; */ static caddr_t crashdumpmap; +static void free_pv_chunk(struct pv_chunk *pc); static void free_pv_entry(pmap_t pmap, pv_entry_t pv); static pv_entry_t get_pv_entry(pmap_t pmap, boolean_t try); static void pmap_pv_demote_pde(pmap_t pmap, vm_offset_t va, vm_paddr_t pa); @@ -2174,7 +2175,6 @@ pmap_pv_reclaim(pmap_t locked_pmap) static void free_pv_entry(pmap_t pmap, pv_entry_t pv) { - vm_page_t m; struct pv_chunk *pc; int idx, field, bit; @@ -2198,6 +2198,14 @@ free_pv_entry(pmap_t pmap, pv_entry_t pv) return; } TAILQ_REMOVE(&pmap->pm_pvchunk, pc, pc_list); + free_pv_chunk(pc); +} + +static void +free_pv_chunk(struct pv_chunk *pc) +{ + vm_page_t m; + TAILQ_REMOVE(&pv_chunks, pc, pc_lru); PV_STAT(pv_entry_spare -= _NPCPV); PV_STAT(pc_chunk_count--); @@ -4211,15 +4219,8 @@ pmap_remove_pages(pmap_t pmap) } } if (allfree) { - PV_STAT(pv_entry_spare -= _NPCPV); - PV_STAT(pc_chunk_count--); - PV_STAT(pc_chunk_frees++); TAILQ_REMOVE(&pmap->pm_pvchunk, pc, pc_list); - TAILQ_REMOVE(&pv_chunks, pc, pc_lru); - 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); + free_pv_chunk(pc); } } pmap_invalidate_all(pmap); |