Date: Fri, 2 Apr 2010 21:35:10 +0000 (UTC) From: Kip Macy <kmacy@FreeBSD.org> To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r206115 - user/kmacy/head_page_lock/sys/amd64/amd64 Message-ID: <201004022135.o32LZA3e083127@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: kmacy Date: Fri Apr 2 21:35:10 2010 New Revision: 206115 URL: http://svn.freebsd.org/changeset/base/206115 Log: -remove pv list lock - spare pv entries are protected by the pmap lock and the md_page pv_list is protected by the page lock Modified: user/kmacy/head_page_lock/sys/amd64/amd64/pmap.c Modified: user/kmacy/head_page_lock/sys/amd64/amd64/pmap.c ============================================================================== --- user/kmacy/head_page_lock/sys/amd64/amd64/pmap.c Fri Apr 2 21:15:42 2010 (r206114) +++ user/kmacy/head_page_lock/sys/amd64/amd64/pmap.c Fri Apr 2 21:35:10 2010 (r206115) @@ -184,7 +184,6 @@ struct vp_lock { #define PA_LOCK_COUNT 256 -struct mtx pv_lock __aligned(CACHE_LINE_SIZE); struct vp_lock pa_lock[PA_LOCK_COUNT] __aligned(CACHE_LINE_SIZE); @@ -720,7 +719,6 @@ pmap_bootstrap(vm_paddr_t *firstaddr) for (i = 0; i < PA_LOCK_COUNT; i++) mtx_init(&pa_lock[i].vp_lock, "page lock", NULL, MTX_DEF | MTX_RECURSE | MTX_DUPOK); - mtx_init(&pv_lock, "pv list lock", NULL, MTX_DEF); } @@ -2131,7 +2129,6 @@ free_pv_entry(pmap_t pmap, pv_entry_t pv atomic_add_int(&pv_entry_count, -1); PV_STAT(pv_entry_frees++); PV_STAT(pv_entry_spare++); - mtx_lock(&pv_lock); pc = pv_to_chunk(pv); idx = pv - &pc->pc_pventry[0]; field = idx / 64; @@ -2142,7 +2139,6 @@ free_pv_entry(pmap_t pmap, pv_entry_t pv if (pc->pc_map[0] != PC_FREE0 || pc->pc_map[1] != PC_FREE1 || pc->pc_map[2] != PC_FREE2) { TAILQ_INSERT_HEAD(&pmap->pm_pvchunk, pc, pc_list); - mtx_unlock(&pv_lock); return; } PV_STAT(pv_entry_spare -= _NPCPV); @@ -2151,7 +2147,6 @@ free_pv_entry(pmap_t pmap, pv_entry_t pv /* entire chunk is free, return it */ m = PHYS_TO_VM_PAGE(DMAP_TO_PHYS((vm_offset_t)pc)); dump_drop_page(m->phys_addr); - mtx_unlock(&pv_lock); KASSERT(m->wire_count == 1, ("wire_count == %d", m->wire_count)); m->wire_count--; atomic_subtract_int(&cnt.v_wire_count, 1); @@ -2178,7 +2173,6 @@ get_pv_entry(pmap_t pmap) atomic_add_int(&pv_entry_count, 1); PV_STAT(pv_entry_allocs++); - mtx_lock(&pv_lock); if (pv_entry_count > pv_entry_high_water) if (ratecheck(&lastprint, &printinterval)) printf("Approaching the limit on PV entries, consider " @@ -2202,7 +2196,6 @@ get_pv_entry(pmap_t pmap) TAILQ_REMOVE(&pmap->pm_pvchunk, pc, pc_list); TAILQ_INSERT_TAIL(&pmap->pm_pvchunk, pc, pc_list); } - mtx_unlock(&pv_lock); PV_STAT(pv_entry_spare--); return (pv); } @@ -2212,7 +2205,6 @@ get_pv_entry(pmap_t pmap) VM_ALLOC_SYSTEM : VM_ALLOC_NORMAL) | VM_ALLOC_NOOBJ | VM_ALLOC_WIRED); if (m == NULL) { - mtx_unlock(&pv_lock); PV_STAT(pc_chunk_tryfail++); atomic_add_int(&pv_entry_count, -1); return (NULL); @@ -2230,7 +2222,6 @@ get_pv_entry(pmap_t pmap) TAILQ_INSERT_HEAD(&pmap->pm_pvchunk, pc, pc_list); PV_STAT(pv_entry_spare += _NPCPV - 1); - mtx_unlock(&pv_lock); return (pv); } @@ -4410,14 +4401,12 @@ restart: } } if (allfree) { - mtx_lock(&pv_lock); PV_STAT(pv_entry_spare -= _NPCPV); PV_STAT(pc_chunk_count--); PV_STAT(pc_chunk_frees++); 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); - mtx_unlock(&pv_lock); KASSERT(m->wire_count == 1, ("wire_count == %d", m->wire_count)); m->wire_count = 0;
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201004022135.o32LZA3e083127>