Print this page
5045 use atomic_{inc,dec}_* instead of atomic_add_*
*** 1746,1763 ****
/*
* Keep a count of current wput calls to start.
* Nonzero count delays any attempted DL_UNBIND.
* See comments above gld_start().
*/
! atomic_add_32((uint32_t *)&gld->gld_wput_count, 1);
membar_enter();
/* Recheck state now wput_count is set to prevent DL_UNBIND */
/* If this Q is in process of DL_UNBIND, don't call start */
if (gld->gld_state != DL_IDLE || gld->gld_in_unbind) {
/* Extremely unlikely */
! atomic_add_32((uint32_t *)&gld->gld_wput_count, -1);
goto use_wsrv;
}
/*
* Get the priority value. Note that in raw mode, the
--- 1746,1763 ----
/*
* Keep a count of current wput calls to start.
* Nonzero count delays any attempted DL_UNBIND.
* See comments above gld_start().
*/
! atomic_inc_32((uint32_t *)&gld->gld_wput_count);
membar_enter();
/* Recheck state now wput_count is set to prevent DL_UNBIND */
/* If this Q is in process of DL_UNBIND, don't call start */
if (gld->gld_state != DL_IDLE || gld->gld_in_unbind) {
/* Extremely unlikely */
! atomic_dec_32((uint32_t *)&gld->gld_wput_count);
goto use_wsrv;
}
/*
* Get the priority value. Note that in raw mode, the
*** 1769,1779 ****
rc = (multidata) ? gld_start_mdt(q, mp, GLD_WPUT) :
gld_start(q, mp, GLD_WPUT, upri);
/* Allow DL_UNBIND again */
membar_exit();
! atomic_add_32((uint32_t *)&gld->gld_wput_count, -1);
if (rc == GLD_NORESOURCES)
qenable(q);
break; /* Done with this packet */
--- 1769,1779 ----
rc = (multidata) ? gld_start_mdt(q, mp, GLD_WPUT) :
gld_start(q, mp, GLD_WPUT, upri);
/* Allow DL_UNBIND again */
membar_exit();
! atomic_dec_32((uint32_t *)&gld->gld_wput_count);
if (rc == GLD_NORESOURCES)
qenable(q);
break; /* Done with this packet */