Print this page
5045 use atomic_{inc,dec}_* instead of atomic_add_*
*** 522,541 ****
errorq_dispatch(errorq_t *eqp, const void *data, size_t len, uint_t flag)
{
errorq_elem_t *eep, *old;
if (eqp == NULL || !(eqp->eq_flags & ERRORQ_ACTIVE)) {
! atomic_add_64(&errorq_lost, 1);
return; /* drop error if queue is uninitialized or disabled */
}
for (;;) {
int i, rval;
if ((i = errorq_availbit(eqp->eq_bitmap, eqp->eq_qlen,
eqp->eq_rotor)) == -1) {
! atomic_add_64(&eqp->eq_kstat.eqk_dropped.value.ui64, 1);
return;
}
BT_ATOMIC_SET_EXCL(eqp->eq_bitmap, i, rval);
if (rval == 0) {
eqp->eq_rotor = i;
--- 522,541 ----
errorq_dispatch(errorq_t *eqp, const void *data, size_t len, uint_t flag)
{
errorq_elem_t *eep, *old;
if (eqp == NULL || !(eqp->eq_flags & ERRORQ_ACTIVE)) {
! atomic_inc_64(&errorq_lost);
return; /* drop error if queue is uninitialized or disabled */
}
for (;;) {
int i, rval;
if ((i = errorq_availbit(eqp->eq_bitmap, eqp->eq_qlen,
eqp->eq_rotor)) == -1) {
! atomic_inc_64(&eqp->eq_kstat.eqk_dropped.value.ui64);
return;
}
BT_ATOMIC_SET_EXCL(eqp->eq_bitmap, i, rval);
if (rval == 0) {
eqp->eq_rotor = i;
*** 557,567 ****
if (atomic_cas_ptr(&eqp->eq_pend, old, eep) == old)
break;
}
! atomic_add_64(&eqp->eq_kstat.eqk_dispatched.value.ui64, 1);
if (flag == ERRORQ_ASYNC && eqp->eq_id != NULL)
ddi_trigger_softintr(eqp->eq_id);
}
--- 557,567 ----
if (atomic_cas_ptr(&eqp->eq_pend, old, eep) == old)
break;
}
! atomic_inc_64(&eqp->eq_kstat.eqk_dispatched.value.ui64);
if (flag == ERRORQ_ASYNC && eqp->eq_id != NULL)
ddi_trigger_softintr(eqp->eq_id);
}
*** 865,884 ****
errorq_reserve(errorq_t *eqp)
{
errorq_elem_t *eqep;
if (eqp == NULL || !(eqp->eq_flags & ERRORQ_ACTIVE)) {
! atomic_add_64(&errorq_lost, 1);
return (NULL);
}
for (;;) {
int i, rval;
if ((i = errorq_availbit(eqp->eq_bitmap, eqp->eq_qlen,
eqp->eq_rotor)) == -1) {
! atomic_add_64(&eqp->eq_kstat.eqk_dropped.value.ui64, 1);
return (NULL);
}
BT_ATOMIC_SET_EXCL(eqp->eq_bitmap, i, rval);
if (rval == 0) {
eqp->eq_rotor = i;
--- 865,884 ----
errorq_reserve(errorq_t *eqp)
{
errorq_elem_t *eqep;
if (eqp == NULL || !(eqp->eq_flags & ERRORQ_ACTIVE)) {
! atomic_inc_64(&errorq_lost);
return (NULL);
}
for (;;) {
int i, rval;
if ((i = errorq_availbit(eqp->eq_bitmap, eqp->eq_qlen,
eqp->eq_rotor)) == -1) {
! atomic_inc_64(&eqp->eq_kstat.eqk_dropped.value.ui64);
return (NULL);
}
BT_ATOMIC_SET_EXCL(eqp->eq_bitmap, i, rval);
if (rval == 0) {
eqp->eq_rotor = i;
*** 891,901 ****
errorq_nvelem_t *eqnp = eqep->eqe_data;
nv_alloc_reset(eqnp->eqn_nva);
eqnp->eqn_nvl = fm_nvlist_create(eqnp->eqn_nva);
}
! atomic_add_64(&eqp->eq_kstat.eqk_reserved.value.ui64, 1);
return (eqep);
}
/*
* Commit an errorq element (eqep) for dispatching.
--- 891,901 ----
errorq_nvelem_t *eqnp = eqep->eqe_data;
nv_alloc_reset(eqnp->eqn_nva);
eqnp->eqn_nvl = fm_nvlist_create(eqnp->eqn_nva);
}
! atomic_inc_64(&eqp->eq_kstat.eqk_reserved.value.ui64);
return (eqep);
}
/*
* Commit an errorq element (eqep) for dispatching.
*** 906,916 ****
errorq_commit(errorq_t *eqp, errorq_elem_t *eqep, uint_t flag)
{
errorq_elem_t *old;
if (eqep == NULL || !(eqp->eq_flags & ERRORQ_ACTIVE)) {
! atomic_add_64(&eqp->eq_kstat.eqk_commit_fail.value.ui64, 1);
return;
}
for (;;) {
old = eqp->eq_pend;
--- 906,916 ----
errorq_commit(errorq_t *eqp, errorq_elem_t *eqep, uint_t flag)
{
errorq_elem_t *old;
if (eqep == NULL || !(eqp->eq_flags & ERRORQ_ACTIVE)) {
! atomic_inc_64(&eqp->eq_kstat.eqk_commit_fail.value.ui64);
return;
}
for (;;) {
old = eqp->eq_pend;
*** 919,929 ****
if (atomic_cas_ptr(&eqp->eq_pend, old, eqep) == old)
break;
}
! atomic_add_64(&eqp->eq_kstat.eqk_committed.value.ui64, 1);
if (flag == ERRORQ_ASYNC && eqp->eq_id != NULL)
ddi_trigger_softintr(eqp->eq_id);
}
--- 919,929 ----
if (atomic_cas_ptr(&eqp->eq_pend, old, eqep) == old)
break;
}
! atomic_inc_64(&eqp->eq_kstat.eqk_committed.value.ui64);
if (flag == ERRORQ_ASYNC && eqp->eq_id != NULL)
ddi_trigger_softintr(eqp->eq_id);
}
*** 937,947 ****
if (eqep == NULL || !(eqp->eq_flags & ERRORQ_ACTIVE))
return;
BT_ATOMIC_CLEAR(eqp->eq_bitmap, eqep - eqp->eq_elems);
! atomic_add_64(&eqp->eq_kstat.eqk_cancelled.value.ui64, 1);
}
/*
* Write elements on the dump list of each nvlist errorq to the dump device.
* Upon reboot, fmd(1M) will extract and replay them for diagnosis.
--- 937,947 ----
if (eqep == NULL || !(eqp->eq_flags & ERRORQ_ACTIVE))
return;
BT_ATOMIC_CLEAR(eqp->eq_bitmap, eqep - eqp->eq_elems);
! atomic_inc_64(&eqp->eq_kstat.eqk_cancelled.value.ui64);
}
/*
* Write elements on the dump list of each nvlist errorq to the dump device.
* Upon reboot, fmd(1M) will extract and replay them for diagnosis.