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 *