Print this page
5045 use atomic_{inc,dec}_* instead of atomic_add_*
@@ -2149,11 +2149,11 @@
if (flag == HAT_DUP_SRD && ((srdp = hat->sfmmu_srdp) != NULL)) {
ASSERT(srdp->srd_evp != NULL);
VN_HOLD(srdp->srd_evp);
ASSERT(srdp->srd_refcnt > 0);
newhat->sfmmu_srdp = srdp;
- atomic_add_32((volatile uint_t *)&srdp->srd_refcnt, 1);
+ atomic_inc_32((volatile uint_t *)&srdp->srd_refcnt);
}
/*
* HAT_DUP_ALL flag is used after as duplication is done.
*/
@@ -3225,11 +3225,11 @@
if (flags & HAT_LOAD_LOCK) {
if ((hmeblkp->hblk_lckcnt + 1) >= MAX_HBLK_LCKCNT) {
panic("too high lckcnt-hmeblk %p",
(void *)hmeblkp);
}
- atomic_add_32(&hmeblkp->hblk_lckcnt, 1);
+ atomic_inc_32(&hmeblkp->hblk_lckcnt);
HBLK_STACK_TRACE(hmeblkp, HBLK_LOCK);
}
#ifdef VAC
@@ -3260,22 +3260,22 @@
}
ASSERT(TTE_IS_VALID(&sfhme->hme_tte));
if (!TTE_IS_VALID(&tteold)) {
- atomic_add_16(&hmeblkp->hblk_vcnt, 1);
+ atomic_inc_16(&hmeblkp->hblk_vcnt);
if (rid == SFMMU_INVALID_SHMERID) {
- atomic_add_long(&sfmmup->sfmmu_ttecnt[size], 1);
+ atomic_inc_ulong(&sfmmup->sfmmu_ttecnt[size]);
} else {
sf_srd_t *srdp = sfmmup->sfmmu_srdp;
sf_region_t *rgnp = srdp->srd_hmergnp[rid];
/*
* We already accounted for region ttecnt's in sfmmu
* during hat_join_region() processing. Here we
* only update ttecnt's in region struture.
*/
- atomic_add_long(&rgnp->rgn_ttecnt[size], 1);
+ atomic_inc_ulong(&rgnp->rgn_ttecnt[size]);
}
}
myflt = (astosfmmu(curthread->t_procp->p_as) == sfmmup);
if (size > TTE8K && (flags & HAT_LOAD_SHARE) == 0 &&
@@ -3379,11 +3379,11 @@
}
}
if (pp) {
if (!remap) {
HME_ADD(sfhme, pp);
- atomic_add_16(&hmeblkp->hblk_hmecnt, 1);
+ atomic_inc_16(&hmeblkp->hblk_hmecnt);
ASSERT(hmeblkp->hblk_hmecnt > 0);
/*
* Cannot ASSERT(hmeblkp->hblk_hmecnt <= NHMENTS)
* see pageunload() for comment.
@@ -4152,11 +4152,11 @@
if (((uintptr_t)addr + TTEBYTES(ttesz)) >
(uintptr_t)endaddr)
panic("can't unlock large tte");
ASSERT(hmeblkp->hblk_lckcnt > 0);
- atomic_add_32(&hmeblkp->hblk_lckcnt, -1);
+ atomic_dec_32(&hmeblkp->hblk_lckcnt);
HBLK_STACK_TRACE(hmeblkp, HBLK_UNLOCK);
} else {
panic("sfmmu_hblk_unlock: invalid tte");
}
addr += TTEBYTES(ttesz);
@@ -6131,11 +6131,11 @@
*/
ttecnt++;
if (flags & HAT_UNLOAD_UNLOCK) {
ASSERT(hmeblkp->hblk_lckcnt > 0);
- atomic_add_32(&hmeblkp->hblk_lckcnt, -1);
+ atomic_dec_32(&hmeblkp->hblk_lckcnt);
HBLK_STACK_TRACE(hmeblkp, HBLK_UNLOCK);
}
/*
* Normally we would need to flush the page
@@ -6185,15 +6185,15 @@
* Again, we cannot
* ASSERT(hmeblkp->hblk_hmecnt <= NHMENTS);
*/
HME_SUB(sfhmep, pp);
membar_stst();
- atomic_add_16(&hmeblkp->hblk_hmecnt, -1);
+ atomic_dec_16(&hmeblkp->hblk_hmecnt);
}
ASSERT(hmeblkp->hblk_vcnt > 0);
- atomic_add_16(&hmeblkp->hblk_vcnt, -1);
+ atomic_dec_16(&hmeblkp->hblk_vcnt);
ASSERT(hmeblkp->hblk_hmecnt || hmeblkp->hblk_vcnt ||
!hmeblkp->hblk_lckcnt);
#ifdef VAC
@@ -7347,14 +7347,14 @@
rgnp = srdp->srd_hmergnp[rid];
SFMMU_VALIDATE_SHAREDHBLK(hmeblkp, srdp, rgnp, rid);
cpuset = sfmmu_rgntlb_demap(addr, rgnp, hmeblkp, 1);
sfmmu_ttesync(NULL, addr, &tte, pp);
ASSERT(rgnp->rgn_ttecnt[ttesz] > 0);
- atomic_add_long(&rgnp->rgn_ttecnt[ttesz], -1);
+ atomic_dec_ulong(&rgnp->rgn_ttecnt[ttesz]);
} else {
sfmmu_ttesync(sfmmup, addr, &tte, pp);
- atomic_add_long(&sfmmup->sfmmu_ttecnt[ttesz], -1);
+ atomic_dec_ulong(&sfmmup->sfmmu_ttecnt[ttesz]);
/*
* We need to flush the page from the virtual cache
* in order to prevent a virtual cache alias
* inconsistency. The particular scenario we need
@@ -7411,12 +7411,12 @@
* we are done with hmeblkp so that this hmeblk won't be
* stolen.
*/
ASSERT(hmeblkp->hblk_hmecnt > 0);
ASSERT(hmeblkp->hblk_vcnt > 0);
- atomic_add_16(&hmeblkp->hblk_vcnt, -1);
- atomic_add_16(&hmeblkp->hblk_hmecnt, -1);
+ atomic_dec_16(&hmeblkp->hblk_vcnt);
+ atomic_dec_16(&hmeblkp->hblk_hmecnt);
/*
* This is bug 4063182.
* XXX: fixme
* ASSERT(hmeblkp->hblk_hmecnt || hmeblkp->hblk_vcnt ||
* !hmeblkp->hblk_lckcnt);
@@ -13811,12 +13811,12 @@
for (srdp = srd_buckets[hash].srdb_srdp; srdp != NULL;
srdp = srdp->srd_hash) {
if (srdp->srd_evp == evp) {
ASSERT(srdp->srd_refcnt >= 0);
sfmmup->sfmmu_srdp = srdp;
- atomic_add_32(
- (volatile uint_t *)&srdp->srd_refcnt, 1);
+ atomic_inc_32(
+ (volatile uint_t *)&srdp->srd_refcnt);
mutex_exit(&srd_buckets[hash].srdb_lock);
return;
}
}
mutex_exit(&srd_buckets[hash].srdb_lock);
@@ -13833,11 +13833,11 @@
for (srdp = srd_buckets[hash].srdb_srdp; srdp != NULL;
srdp = srdp->srd_hash) {
if (srdp->srd_evp == evp) {
ASSERT(srdp->srd_refcnt >= 0);
sfmmup->sfmmu_srdp = srdp;
- atomic_add_32((volatile uint_t *)&srdp->srd_refcnt, 1);
+ atomic_inc_32((volatile uint_t *)&srdp->srd_refcnt);
mutex_exit(&srd_buckets[hash].srdb_lock);
kmem_cache_free(srd_cache, newsrdp);
return;
}
}
@@ -13870,12 +13870,11 @@
ASSERT(sfmmup->sfmmu_free == 1);
sfmmup->sfmmu_srdp = NULL;
evp = srdp->srd_evp;
ASSERT(evp != NULL);
- if (atomic_add_32_nv(
- (volatile uint_t *)&srdp->srd_refcnt, -1)) {
+ if (atomic_dec_32_nv((volatile uint_t *)&srdp->srd_refcnt)) {
VN_RELE(evp);
return;
}
hash = SRD_HASH_FUNCTION(evp);
@@ -14088,11 +14087,11 @@
ASSERT(rgnp->rgn_refcnt >= 0);
rid = rgnp->rgn_id;
ASSERT(rid < maxids);
ASSERT(rarrp[rid] == rgnp);
ASSERT(rid < *nextidp);
- atomic_add_32((volatile uint_t *)&rgnp->rgn_refcnt, 1);
+ atomic_inc_32((volatile uint_t *)&rgnp->rgn_refcnt);
mutex_exit(&srdp->srd_mutex);
if (new_rgnp != NULL) {
kmem_cache_free(region_cache, new_rgnp);
}
if (r_type == SFMMU_REGION_HME) {
@@ -14438,11 +14437,11 @@
if (r_type == SFMMU_REGION_HME) {
sfmmu_unlink_from_hmeregion(sfmmup, rgnp);
}
r_obj = rgnp->rgn_obj;
- if (atomic_add_32_nv((volatile uint_t *)&rgnp->rgn_refcnt, -1)) {
+ if (atomic_dec_32_nv((volatile uint_t *)&rgnp->rgn_refcnt)) {
return;
}
/*
* looks like nobody uses this region anymore. Free it.
@@ -14523,11 +14522,11 @@
ASSERT(rgnp->rgn_refcnt > 0);
ASSERT(rgnp->rgn_id == rid);
ASSERT((rgnp->rgn_flags & SFMMU_REGION_TYPE_MASK) == SFMMU_REGION_HME);
ASSERT(!(rgnp->rgn_flags & SFMMU_REGION_FREE));
- atomic_add_32((volatile uint_t *)&rgnp->rgn_refcnt, 1);
+ atomic_inc_32((volatile uint_t *)&rgnp->rgn_refcnt);
/* LINTED: constant in conditional context */
SFMMU_HMERID2RLINKP(sfmmup, rid, rlink, 1, 0);
ASSERT(rlink != NULL);
mutex_enter(&rgnp->rgn_mutex);
@@ -15253,12 +15252,11 @@
if (ret == 1) {
SF_SCD_INCR_REF(scdp);
mutex_exit(&srdp->srd_scd_mutex);
sfmmu_join_scd(scdp, sfmmup);
ASSERT(scdp->scd_refcnt >= 2);
- atomic_add_32((volatile uint32_t *)
- &scdp->scd_refcnt, -1);
+ atomic_dec_32((volatile uint32_t *)&scdp->scd_refcnt);
return;
} else {
/*
* If the sfmmu region map is a subset of the scd
* region map, then the assumption is that this process
@@ -15299,11 +15297,11 @@
SFMMU_STAT_ADD(sf_create_scd, 1);
mutex_exit(&srdp->srd_scd_mutex);
sfmmu_join_scd(new_scdp, sfmmup);
ASSERT(new_scdp->scd_refcnt >= 2);
- atomic_add_32((volatile uint32_t *)&new_scdp->scd_refcnt, -1);
+ atomic_dec_32((volatile uint32_t *)&new_scdp->scd_refcnt);
}
/*
* This routine is called by a process to remove itself from an SCD. It is
* either called when the processes has detached from a segment or from