version 1.43, 2009/12/11 13:56:16 |
version 1.43.10.1, 2011/06/23 14:19:44 |
Line 94 __KERNEL_RCSID(0, "$NetBSD$"); |
|
Line 94 __KERNEL_RCSID(0, "$NetBSD$"); |
|
#include <sys/pool.h> |
#include <sys/pool.h> |
#include <sys/queue.h> |
#include <sys/queue.h> |
#include <sys/kcore.h> |
#include <sys/kcore.h> |
|
#include <sys/atomic.h> |
|
|
#include <uvm/uvm.h> |
#include <uvm/uvm.h> |
|
|
Line 242 struct pmap_stats { |
|
Line 243 struct pmap_stats { |
|
int ps_vac_recached; /* re-cached when bad alias gone */ |
int ps_vac_recached; /* re-cached when bad alias gone */ |
} pmap_stats; |
} pmap_stats; |
|
|
#define pmap_lock(pmap) simple_lock(&pmap->pm_lock) |
|
#define pmap_unlock(pmap) simple_unlock(&pmap->pm_lock) |
|
#define pmap_add_ref(pmap) ++pmap->pm_refcount |
|
#define pmap_del_ref(pmap) --pmap->pm_refcount |
|
#define pmap_refcount(pmap) pmap->pm_refcount |
|
|
|
#ifdef PMAP_DEBUG |
#ifdef PMAP_DEBUG |
#define CHECK_SPL() do { \ |
#define CHECK_SPL() do { \ |
if ((getsr() & PSL_IPL) < PSL_IPL4) \ |
if ((getsr() & PSL_IPL) < PSL_IPL4) \ |
Line 1486 pmap_common_init(pmap_t pmap) |
|
Line 1481 pmap_common_init(pmap_t pmap) |
|
pmap->pm_refcount = 1; |
pmap->pm_refcount = 1; |
pmap->pm_version = pmap_version++; |
pmap->pm_version = pmap_version++; |
pmap->pm_ctxnum = EMPTY_CONTEXT; |
pmap->pm_ctxnum = EMPTY_CONTEXT; |
simple_lock_init(&pmap->pm_lock); |
|
} |
} |
|
|
/* |
/* |
Line 1900 pmap_destroy(pmap_t pmap) |
|
Line 1894 pmap_destroy(pmap_t pmap) |
|
#endif |
#endif |
if (pmap == kernel_pmap) |
if (pmap == kernel_pmap) |
panic("pmap_destroy: kernel_pmap!"); |
panic("pmap_destroy: kernel_pmap!"); |
pmap_lock(pmap); |
count = atomic_dec_uint_nv(&pmap->pm_refcount); |
count = pmap_del_ref(pmap); |
|
pmap_unlock(pmap); |
|
if (count == 0) { |
if (count == 0) { |
pmap_release(pmap); |
pmap_release(pmap); |
pool_put(&pmap_pmap_pool, pmap); |
pool_put(&pmap_pmap_pool, pmap); |
Line 1915 pmap_destroy(pmap_t pmap) |
|
Line 1907 pmap_destroy(pmap_t pmap) |
|
void |
void |
pmap_reference(pmap_t pmap) |
pmap_reference(pmap_t pmap) |
{ |
{ |
pmap_lock(pmap); |
|
pmap_add_ref(pmap); |
atomic_inc_uint(&pmap->pm_refcount); |
pmap_unlock(pmap); |
|
} |
} |
|
|
|
|