Print this page
5045 use atomic_{inc,dec}_* instead of atomic_add_*
*** 530,540 ****
dcb->dcb_dce->dce_ptpn = &dce->dce_next;
dce->dce_next = dcb->dcb_dce;
dce->dce_ptpn = &dcb->dcb_dce;
dcb->dcb_dce = dce;
dce->dce_bucket = dcb;
! atomic_add_32(&dcb->dcb_cnt, 1);
dce_refhold(dce); /* For the caller */
rw_exit(&dcb->dcb_lock);
/* Initialize dce_ident to be different than for the last packet */
dce->dce_ident = ipst->ips_dce_default->dce_ident + 1;
--- 530,540 ----
dcb->dcb_dce->dce_ptpn = &dce->dce_next;
dce->dce_next = dcb->dcb_dce;
dce->dce_ptpn = &dcb->dcb_dce;
dcb->dcb_dce = dce;
dce->dce_bucket = dcb;
! atomic_inc_32(&dcb->dcb_cnt);
dce_refhold(dce); /* For the caller */
rw_exit(&dcb->dcb_lock);
/* Initialize dce_ident to be different than for the last packet */
dce->dce_ident = ipst->ips_dce_default->dce_ident + 1;
*** 602,612 ****
dcb->dcb_dce->dce_ptpn = &dce->dce_next;
dce->dce_next = dcb->dcb_dce;
dce->dce_ptpn = &dcb->dcb_dce;
dcb->dcb_dce = dce;
dce->dce_bucket = dcb;
! atomic_add_32(&dcb->dcb_cnt, 1);
dce_refhold(dce); /* For the caller */
rw_exit(&dcb->dcb_lock);
/* Initialize dce_ident to be different than for the last packet */
dce->dce_ident = ipst->ips_dce_default->dce_ident + 1;
--- 602,612 ----
dcb->dcb_dce->dce_ptpn = &dce->dce_next;
dce->dce_next = dcb->dcb_dce;
dce->dce_ptpn = &dcb->dcb_dce;
dcb->dcb_dce = dce;
dce->dce_bucket = dcb;
! atomic_inc_32(&dcb->dcb_cnt);
dce_refhold(dce); /* For the caller */
rw_exit(&dcb->dcb_lock);
/* Initialize dce_ident to be different than for the last packet */
dce->dce_ident = ipst->ips_dce_default->dce_ident + 1;
*** 729,739 ****
mutex_enter(&dce->dce_lock);
ASSERT(!DCE_IS_CONDEMNED(dce));
dce->dce_generation = DCE_GENERATION_CONDEMNED;
mutex_exit(&dce->dce_lock);
/* Count how many condemned dces for kmem_cache callback */
! atomic_add_32(&ipst->ips_num_dce_condemned, 1);
}
/*
* Increment the generation avoiding the special condemned value
*/
--- 729,739 ----
mutex_enter(&dce->dce_lock);
ASSERT(!DCE_IS_CONDEMNED(dce));
dce->dce_generation = DCE_GENERATION_CONDEMNED;
mutex_exit(&dce->dce_lock);
/* Count how many condemned dces for kmem_cache callback */
! atomic_inc_32(&ipst->ips_num_dce_condemned);
}
/*
* Increment the generation avoiding the special condemned value
*/
*** 791,801 ****
*dce->dce_ptpn = dce->dce_next;
if (dce->dce_next != NULL)
dce->dce_next->dce_ptpn = dce->dce_ptpn;
dce->dce_ptpn = NULL;
dce->dce_next = NULL;
! atomic_add_32(&dcb->dcb_cnt, -1);
dce_make_condemned(dce);
}
static void
dce_inactive(dce_t *dce)
--- 791,801 ----
*dce->dce_ptpn = dce->dce_next;
if (dce->dce_next != NULL)
dce->dce_next->dce_ptpn = dce->dce_ptpn;
dce->dce_ptpn = NULL;
dce->dce_next = NULL;
! atomic_dec_32(&dcb->dcb_cnt);
dce_make_condemned(dce);
}
static void
dce_inactive(dce_t *dce)
*** 806,848 ****
ASSERT(dce->dce_ptpn == NULL);
ASSERT(dce->dce_bucket == NULL);
/* Count how many condemned dces for kmem_cache callback */
if (DCE_IS_CONDEMNED(dce))
! atomic_add_32(&ipst->ips_num_dce_condemned, -1);
kmem_cache_free(dce_cache, dce);
}
void
dce_refrele(dce_t *dce)
{
ASSERT(dce->dce_refcnt != 0);
! if (atomic_add_32_nv(&dce->dce_refcnt, -1) == 0)
dce_inactive(dce);
}
void
dce_refhold(dce_t *dce)
{
! atomic_add_32(&dce->dce_refcnt, 1);
ASSERT(dce->dce_refcnt != 0);
}
/* No tracing support yet hence the same as the above functions */
void
dce_refrele_notr(dce_t *dce)
{
ASSERT(dce->dce_refcnt != 0);
! if (atomic_add_32_nv(&dce->dce_refcnt, -1) == 0)
dce_inactive(dce);
}
void
dce_refhold_notr(dce_t *dce)
{
! atomic_add_32(&dce->dce_refcnt, 1);
ASSERT(dce->dce_refcnt != 0);
}
/* Report both the IPv4 and IPv6 DCEs. */
mblk_t *
--- 806,848 ----
ASSERT(dce->dce_ptpn == NULL);
ASSERT(dce->dce_bucket == NULL);
/* Count how many condemned dces for kmem_cache callback */
if (DCE_IS_CONDEMNED(dce))
! atomic_dec_32(&ipst->ips_num_dce_condemned);
kmem_cache_free(dce_cache, dce);
}
void
dce_refrele(dce_t *dce)
{
ASSERT(dce->dce_refcnt != 0);
! if (atomic_dec_32_nv(&dce->dce_refcnt) == 0)
dce_inactive(dce);
}
void
dce_refhold(dce_t *dce)
{
! atomic_inc_32(&dce->dce_refcnt);
ASSERT(dce->dce_refcnt != 0);
}
/* No tracing support yet hence the same as the above functions */
void
dce_refrele_notr(dce_t *dce)
{
ASSERT(dce->dce_refcnt != 0);
! if (atomic_dec_32_nv(&dce->dce_refcnt) == 0)
dce_inactive(dce);
}
void
dce_refhold_notr(dce_t *dce)
{
! atomic_inc_32(&dce->dce_refcnt);
ASSERT(dce->dce_refcnt != 0);
}
/* Report both the IPv4 and IPv6 DCEs. */
mblk_t *