Print this page
5045 use atomic_{inc,dec}_* instead of atomic_add_*
*** 2092,2102 ****
ilport->ilport_alua == 0) {
continue;
}
if (alua_state->alua_node != 0) {
ilport->ilport_rtpid =
! atomic_add_16_nv(&stmf_rtpid_counter, 1);
}
lport = ilport->ilport_lport;
ic_reg_port = ic_reg_port_msg_alloc(
lport->lport_id, ilport->ilport_rtpid,
0, NULL, stmf_proxy_msg_id);
--- 2092,2102 ----
ilport->ilport_alua == 0) {
continue;
}
if (alua_state->alua_node != 0) {
ilport->ilport_rtpid =
! atomic_inc_16_nv(&stmf_rtpid_counter);
}
lport = ilport->ilport_lport;
ic_reg_port = ic_reg_port_msg_alloc(
lport->lport_id, ilport->ilport_rtpid,
0, NULL, stmf_proxy_msg_id);
*** 3251,3261 ****
* rtpid will/must be set if this is a standby port
* only register ports that are not standby (proxy) ports
* and ports that are alua participants (ilport_alua == 1)
*/
if (ilport->ilport_standby == 0) {
! ilport->ilport_rtpid = atomic_add_16_nv(&stmf_rtpid_counter, 1);
}
if (stmf_state.stmf_alua_state == 1 &&
ilport->ilport_standby == 0 &&
ilport->ilport_alua == 1) {
--- 3251,3261 ----
* rtpid will/must be set if this is a standby port
* only register ports that are not standby (proxy) ports
* and ports that are alua participants (ilport_alua == 1)
*/
if (ilport->ilport_standby == 0) {
! ilport->ilport_rtpid = atomic_inc_16_nv(&stmf_rtpid_counter);
}
if (stmf_state.stmf_alua_state == 1 &&
ilport->ilport_standby == 0 &&
ilport->ilport_alua == 1) {
*** 3593,3603 ****
ilport->ilport_ss_list = iss;
rw_exit(&ilport->ilport_lock);
mutex_exit(&stmf_state.stmf_lock);
iss->iss_creation_time = ddi_get_time();
! ss->ss_session_id = atomic_add_64_nv(&stmf_session_counter, 1);
iss->iss_flags &= ~ISS_BEING_CREATED;
/* XXX should we remove ISS_LUN_INVENTORY_CHANGED on new session? */
iss->iss_flags &= ~ISS_LUN_INVENTORY_CHANGED;
DTRACE_PROBE2(session__online, stmf_local_port_t *, lport,
stmf_scsi_session_t *, ss);
--- 3593,3603 ----
ilport->ilport_ss_list = iss;
rw_exit(&ilport->ilport_lock);
mutex_exit(&stmf_state.stmf_lock);
iss->iss_creation_time = ddi_get_time();
! ss->ss_session_id = atomic_inc_64_nv(&stmf_session_counter);
iss->iss_flags &= ~ISS_BEING_CREATED;
/* XXX should we remove ISS_LUN_INVENTORY_CHANGED on new session? */
iss->iss_flags &= ~ISS_LUN_INVENTORY_CHANGED;
DTRACE_PROBE2(session__online, stmf_local_port_t *, lport,
stmf_scsi_session_t *, ss);
*** 3792,3802 ****
} while (atomic_cas_8(&itl->itl_flags, old, new) != old);
itl->itl_hdlrm_reason = hdlrm_reason;
ASSERT(itl->itl_counter);
! if (atomic_add_32_nv(&itl->itl_counter, -1))
return;
stmf_release_itl_handle(lu, itl);
}
--- 3792,3802 ----
} while (atomic_cas_8(&itl->itl_flags, old, new) != old);
itl->itl_hdlrm_reason = hdlrm_reason;
ASSERT(itl->itl_counter);
! if (atomic_dec_32_nv(&itl->itl_counter))
return;
stmf_release_itl_handle(lu, itl);
}
*** 4150,4165 ****
ilu->ilu_ntasks++;
mutex_exit(&ilu->ilu_task_lock);
}
itask->itask_ilu_task_cntr = ilu->ilu_cur_task_cntr;
! atomic_add_32(itask->itask_ilu_task_cntr, 1);
itask->itask_start_time = ddi_get_lbolt();
if ((lun_map_ent != NULL) && ((itask->itask_itl_datap =
lun_map_ent->ent_itl_datap) != NULL)) {
! atomic_add_32(&itask->itask_itl_datap->itl_counter, 1);
task->task_lu_itl_handle = itask->itask_itl_datap->itl_handle;
} else {
itask->itask_itl_datap = NULL;
task->task_lu_itl_handle = NULL;
}
--- 4150,4165 ----
ilu->ilu_ntasks++;
mutex_exit(&ilu->ilu_task_lock);
}
itask->itask_ilu_task_cntr = ilu->ilu_cur_task_cntr;
! atomic_inc_32(itask->itask_ilu_task_cntr);
itask->itask_start_time = ddi_get_lbolt();
if ((lun_map_ent != NULL) && ((itask->itask_itl_datap =
lun_map_ent->ent_itl_datap) != NULL)) {
! atomic_inc_32(&itask->itask_itl_datap->itl_counter);
task->task_lu_itl_handle = itask->itask_itl_datap->itl_handle;
} else {
itask->itask_itl_datap = NULL;
task->task_lu_itl_handle = NULL;
}
*** 4183,4193 ****
ilu->ilu_free_tasks = itask;
ilu->ilu_ntasks_free++;
if (ilu->ilu_ntasks == ilu->ilu_ntasks_free)
cv_signal(&ilu->ilu_offline_pending_cv);
mutex_exit(&ilu->ilu_task_lock);
! atomic_add_32(itask->itask_ilu_task_cntr, -1);
}
void
stmf_task_lu_check_freelist(stmf_i_lu_t *ilu)
{
--- 4183,4193 ----
ilu->ilu_free_tasks = itask;
ilu->ilu_ntasks_free++;
if (ilu->ilu_ntasks == ilu->ilu_ntasks_free)
cv_signal(&ilu->ilu_offline_pending_cv);
mutex_exit(&ilu->ilu_task_lock);
! atomic_dec_32(itask->itask_ilu_task_cntr);
}
void
stmf_task_lu_check_freelist(stmf_i_lu_t *ilu)
{
*** 4406,4427 ****
stmf_itl_task_done(itask);
DTRACE_PROBE2(stmf__task__end, scsi_task_t *, task,
hrtime_t,
itask->itask_done_timestamp - itask->itask_start_timestamp);
if (itask->itask_itl_datap) {
! if (atomic_add_32_nv(&itask->itask_itl_datap->itl_counter,
! -1) == 0) {
stmf_release_itl_handle(task->task_lu,
itask->itask_itl_datap);
}
}
rw_enter(iss->iss_lockp, RW_READER);
lport->lport_task_free(task);
if (itask->itask_worker) {
! atomic_add_32(&stmf_cur_ntasks, -1);
! atomic_add_32(&itask->itask_worker->worker_ref_count, -1);
}
/*
* After calling stmf_task_lu_free, the task pointer can no longer
* be trusted.
*/
--- 4406,4427 ----
stmf_itl_task_done(itask);
DTRACE_PROBE2(stmf__task__end, scsi_task_t *, task,
hrtime_t,
itask->itask_done_timestamp - itask->itask_start_timestamp);
if (itask->itask_itl_datap) {
! if (atomic_dec_32_nv(&itask->itask_itl_datap->itl_counter) ==
! 0) {
stmf_release_itl_handle(task->task_lu,
itask->itask_itl_datap);
}
}
rw_enter(iss->iss_lockp, RW_READER);
lport->lport_task_free(task);
if (itask->itask_worker) {
! atomic_dec_32(&stmf_cur_ntasks);
! atomic_dec_32(&itask->itask_worker->worker_ref_count);
}
/*
* After calling stmf_task_lu_free, the task pointer can no longer
* be trusted.
*/
*** 4443,4456 ****
if (task->task_max_nbufs > 4)
task->task_max_nbufs = 4;
task->task_cur_nbufs = 0;
/* Latest value of currently running tasks */
! ct = atomic_add_32_nv(&stmf_cur_ntasks, 1);
/* Select the next worker using round robin */
! nv = (int)atomic_add_32_nv((uint32_t *)&stmf_worker_sel_counter, 1);
if (nv >= stmf_nworkers_accepting_cmds) {
int s = nv;
do {
nv -= stmf_nworkers_accepting_cmds;
} while (nv >= stmf_nworkers_accepting_cmds);
--- 4443,4456 ----
if (task->task_max_nbufs > 4)
task->task_max_nbufs = 4;
task->task_cur_nbufs = 0;
/* Latest value of currently running tasks */
! ct = atomic_inc_32_nv(&stmf_cur_ntasks);
/* Select the next worker using round robin */
! nv = (int)atomic_inc_32_nv((uint32_t *)&stmf_worker_sel_counter);
if (nv >= stmf_nworkers_accepting_cmds) {
int s = nv;
do {
nv -= stmf_nworkers_accepting_cmds;
} while (nv >= stmf_nworkers_accepting_cmds);
*** 4523,4533 ****
if (++(w->worker_queue_depth) > w->worker_max_qdepth_pu) {
w->worker_max_qdepth_pu = w->worker_queue_depth;
}
/* Measure task waitq time */
itask->itask_waitq_enter_timestamp = gethrtime();
! atomic_add_32(&w->worker_ref_count, 1);
itask->itask_cmd_stack[0] = ITASK_CMD_NEW_TASK;
itask->itask_ncmds = 1;
stmf_task_audit(itask, TE_TASK_START, CMD_OR_IOF_NA, dbuf);
if (dbuf) {
itask->itask_allocated_buf_map = 1;
--- 4523,4533 ----
if (++(w->worker_queue_depth) > w->worker_max_qdepth_pu) {
w->worker_max_qdepth_pu = w->worker_queue_depth;
}
/* Measure task waitq time */
itask->itask_waitq_enter_timestamp = gethrtime();
! atomic_inc_32(&w->worker_ref_count);
itask->itask_cmd_stack[0] = ITASK_CMD_NEW_TASK;
itask->itask_ncmds = 1;
stmf_task_audit(itask, TE_TASK_START, CMD_OR_IOF_NA, dbuf);
if (dbuf) {
itask->itask_allocated_buf_map = 1;
*** 4611,4621 ****
}
if (itask->itask_flags & ITASK_BEING_ABORTED)
return (STMF_ABORTED);
#ifdef DEBUG
if (!(ioflags & STMF_IOF_STATS_ONLY) && stmf_drop_buf_counter > 0) {
! if (atomic_add_32_nv((uint32_t *)&stmf_drop_buf_counter, -1) ==
1)
return (STMF_SUCCESS);
}
#endif
--- 4611,4621 ----
}
if (itask->itask_flags & ITASK_BEING_ABORTED)
return (STMF_ABORTED);
#ifdef DEBUG
if (!(ioflags & STMF_IOF_STATS_ONLY) && stmf_drop_buf_counter > 0) {
! if (atomic_dec_32_nv((uint32_t *)&stmf_drop_buf_counter) ==
1)
return (STMF_SUCCESS);
}
#endif
*** 5708,5718 ****
if (lu_id->ident_length != 0x10)
return (STMF_INVALID_ARG);
p = (uint8_t *)lu_id;
! gen_number = atomic_add_16_nv(&stmf_lu_id_gen_number, 1);
p[0] = 0xf1; p[1] = 3; p[2] = 0; p[3] = 0x10;
p[4] = ((company_id >> 20) & 0xf) | 0x60;
p[5] = (company_id >> 12) & 0xff;
p[6] = (company_id >> 4) & 0xff;
--- 5708,5718 ----
if (lu_id->ident_length != 0x10)
return (STMF_INVALID_ARG);
p = (uint8_t *)lu_id;
! gen_number = atomic_inc_16_nv(&stmf_lu_id_gen_number);
p[0] = 0xf1; p[1] = 3; p[2] = 0; p[3] = 0x10;
p[4] = ((company_id >> 20) & 0xf) | 0x60;
p[5] = (company_id >> 12) & 0xff;
p[6] = (company_id >> 4) & 0xff;
*** 6340,6352 ****
if (stmf_handle_cmd_during_ic(itask))
break;
}
#ifdef DEBUG
if (stmf_drop_task_counter > 0) {
! if (atomic_add_32_nv(
! (uint32_t *)&stmf_drop_task_counter,
! -1) == 1) {
break;
}
}
#endif
DTRACE_PROBE1(scsi__task__start, scsi_task_t *, task);
--- 6340,6351 ----
if (stmf_handle_cmd_during_ic(itask))
break;
}
#ifdef DEBUG
if (stmf_drop_task_counter > 0) {
! if (atomic_dec_32_nv((uint32_t *)&stmf_drop_task_counter) ==
! 1) {
break;
}
}
#endif
DTRACE_PROBE1(scsi__task__start, scsi_task_t *, task);