Print this page
5045 use atomic_{inc,dec}_* instead of atomic_add_*
*** 1160,1170 ****
iport->iport_alias = NULL;
}
stmf_wwn_to_devid_desc((scsi_devid_desc_t *)iport->iport_id,
port->port_pwwn, PROTOCOL_FIBRE_CHANNEL);
(void) snprintf(taskq_name, sizeof (taskq_name), "stmf_fct_taskq_%d",
! atomic_add_32_nv(&taskq_cntr, 1));
if ((iport->iport_worker_taskq = ddi_taskq_create(NULL,
taskq_name, 1, TASKQ_DEFAULTPRI, 0)) == NULL) {
return (FCT_FAILURE);
}
mutex_init(&iport->iport_worker_lock, NULL, MUTEX_DRIVER, NULL);
--- 1160,1170 ----
iport->iport_alias = NULL;
}
stmf_wwn_to_devid_desc((scsi_devid_desc_t *)iport->iport_id,
port->port_pwwn, PROTOCOL_FIBRE_CHANNEL);
(void) snprintf(taskq_name, sizeof (taskq_name), "stmf_fct_taskq_%d",
! atomic_inc_32_nv(&taskq_cntr));
if ((iport->iport_worker_taskq = ddi_taskq_create(NULL,
taskq_name, 1, TASKQ_DEFAULTPRI, 0)) == NULL) {
return (FCT_FAILURE);
}
mutex_init(&iport->iport_worker_lock, NULL, MUTEX_DRIVER, NULL);
*** 1438,1448 ****
irp_next = iport->iport_rp_tb[hash_key];
irp_last = NULL;
while (irp_next != NULL) {
if (irp == irp_next) {
if (irp->irp_flags & IRP_PLOGI_DONE) {
! atomic_add_32(&iport->iport_nrps_login, -1);
}
atomic_and_32(&irp->irp_flags,
~(IRP_PLOGI_DONE | IRP_PRLI_DONE));
break;
}
--- 1438,1448 ----
irp_next = iport->iport_rp_tb[hash_key];
irp_last = NULL;
while (irp_next != NULL) {
if (irp == irp_next) {
if (irp->irp_flags & IRP_PLOGI_DONE) {
! atomic_dec_32(&iport->iport_nrps_login);
}
atomic_and_32(&irp->irp_flags,
~(IRP_PLOGI_DONE | IRP_PRLI_DONE));
break;
}
*** 1676,1686 ****
}
icmd = (fct_i_cmd_t *)cmd->cmd_fct_private;
icmd->icmd_next = NULL;
cmd->cmd_port = port;
! atomic_add_32(&iport->iport_total_alloced_ncmds, 1);
}
/*
* The accuracy of iport_max_active_ncmds is not important
*/
--- 1676,1686 ----
}
icmd = (fct_i_cmd_t *)cmd->cmd_fct_private;
icmd->icmd_next = NULL;
cmd->cmd_port = port;
! atomic_inc_32(&iport->iport_total_alloced_ncmds);
}
/*
* The accuracy of iport_max_active_ncmds is not important
*/
*** 1699,1709 ****
stmf_trace(iport->iport_alias, "Ran out of xchg resources");
cmd->cmd_handle = 0;
fct_cmd_free(cmd);
return (NULL);
}
! atomic_add_16(&irp->irp_fcp_xchg_count, 1);
cmd->cmd_rp = rp;
icmd->icmd_flags |= ICMD_IN_TRANSITION | ICMD_KNOWN_TO_FCA;
rw_exit(&irp->irp_lock);
rw_exit(&iport->iport_lock);
--- 1699,1709 ----
stmf_trace(iport->iport_alias, "Ran out of xchg resources");
cmd->cmd_handle = 0;
fct_cmd_free(cmd);
return (NULL);
}
! atomic_inc_16(&irp->irp_fcp_xchg_count);
cmd->cmd_rp = rp;
icmd->icmd_flags |= ICMD_IN_TRANSITION | ICMD_KNOWN_TO_FCA;
rw_exit(&irp->irp_lock);
rw_exit(&iport->iport_lock);
*** 1824,1842 ****
icmd->icmd_start_time = ddi_get_lbolt();
rw_enter(&irp->irp_lock, RW_WRITER);
atomic_or_32(&icmd->icmd_flags, ICMD_IMPLICIT_CMD_HAS_RESOURCE);
! atomic_add_16(&irp->irp_nonfcp_xchg_count, 1);
! atomic_add_16(&irp->irp_sa_elses_count, 1);
/*
* An implicit LOGO can also be posted to a irp where a PLOGI might
* be in process. That PLOGI will reset this flag and decrement the
* iport_nrps_login counter.
*/
if (irp->irp_flags & IRP_PLOGI_DONE) {
! atomic_add_32(&iport->iport_nrps_login, -1);
}
atomic_and_32(&irp->irp_flags, ~(IRP_PLOGI_DONE | IRP_PRLI_DONE));
atomic_or_32(&icmd->icmd_flags, ICMD_SESSION_AFFECTING);
fct_post_to_discovery_queue(iport, irp, icmd);
rw_exit(&irp->irp_lock);
--- 1824,1842 ----
icmd->icmd_start_time = ddi_get_lbolt();
rw_enter(&irp->irp_lock, RW_WRITER);
atomic_or_32(&icmd->icmd_flags, ICMD_IMPLICIT_CMD_HAS_RESOURCE);
! atomic_inc_16(&irp->irp_nonfcp_xchg_count);
! atomic_inc_16(&irp->irp_sa_elses_count);
/*
* An implicit LOGO can also be posted to a irp where a PLOGI might
* be in process. That PLOGI will reset this flag and decrement the
* iport_nrps_login counter.
*/
if (irp->irp_flags & IRP_PLOGI_DONE) {
! atomic_dec_32(&iport->iport_nrps_login);
}
atomic_and_32(&irp->irp_flags, ~(IRP_PLOGI_DONE | IRP_PRLI_DONE));
atomic_or_32(&icmd->icmd_flags, ICMD_SESSION_AFFECTING);
fct_post_to_discovery_queue(iport, irp, icmd);
rw_exit(&irp->irp_lock);
*** 1863,1873 ****
*/
new = ((old + (0x10000)) & 0xFFFF0000);
new |= iport->iport_cmd_slots[cmd_slot].slot_next;
} while (atomic_cas_32(&iport->iport_next_free_slot, old, new) != old);
! atomic_add_16(&iport->iport_nslots_free, -1);
iport->iport_cmd_slots[cmd_slot].slot_cmd = icmd;
cmd->cmd_handle = (uint32_t)cmd_slot | 0x80000000 |
(((uint32_t)(iport->iport_cmd_slots[cmd_slot].slot_uniq_cntr))
<< 24);
return (cmd_slot);
--- 1863,1873 ----
*/
new = ((old + (0x10000)) & 0xFFFF0000);
new |= iport->iport_cmd_slots[cmd_slot].slot_next;
} while (atomic_cas_32(&iport->iport_next_free_slot, old, new) != old);
! atomic_dec_16(&iport->iport_nslots_free);
iport->iport_cmd_slots[cmd_slot].slot_cmd = icmd;
cmd->cmd_handle = (uint32_t)cmd_slot | 0x80000000 |
(((uint32_t)(iport->iport_cmd_slots[cmd_slot].slot_uniq_cntr))
<< 24);
return (cmd_slot);
*** 2070,2099 ****
new = (old + 0x10000) & 0xFFFF0000;
new |= slot->slot_no;
} while (atomic_cas_32(&iport->iport_next_free_slot,
old, new) != old);
cmd->cmd_handle = 0;
! atomic_add_16(&iport->iport_nslots_free, 1);
if (cmd->cmd_rp) {
irp = (fct_i_remote_port_t *)
cmd->cmd_rp->rp_fct_private;
if (cmd->cmd_type == FCT_CMD_FCP_XCHG)
! atomic_add_16(&irp->irp_fcp_xchg_count, -1);
else
! atomic_add_16(&irp->irp_nonfcp_xchg_count, -1);
}
rw_exit(&iport->iport_lock);
} else if ((icmd->icmd_flags & ICMD_IMPLICIT) &&
(icmd->icmd_flags & ICMD_IMPLICIT_CMD_HAS_RESOURCE)) {
/* for implicit cmd, no cmd slot is used */
if (cmd->cmd_rp) {
irp = (fct_i_remote_port_t *)
cmd->cmd_rp->rp_fct_private;
if (cmd->cmd_type == FCT_CMD_FCP_XCHG)
! atomic_add_16(&irp->irp_fcp_xchg_count, -1);
else
! atomic_add_16(&irp->irp_nonfcp_xchg_count, -1);
}
}
if (do_abts_acc) {
fct_cmd_t *lcmd = cmd->cmd_link;
--- 2070,2099 ----
new = (old + 0x10000) & 0xFFFF0000;
new |= slot->slot_no;
} while (atomic_cas_32(&iport->iport_next_free_slot,
old, new) != old);
cmd->cmd_handle = 0;
! atomic_inc_16(&iport->iport_nslots_free);
if (cmd->cmd_rp) {
irp = (fct_i_remote_port_t *)
cmd->cmd_rp->rp_fct_private;
if (cmd->cmd_type == FCT_CMD_FCP_XCHG)
! atomic_dec_16(&irp->irp_fcp_xchg_count);
else
! atomic_dec_16(&irp->irp_nonfcp_xchg_count);
}
rw_exit(&iport->iport_lock);
} else if ((icmd->icmd_flags & ICMD_IMPLICIT) &&
(icmd->icmd_flags & ICMD_IMPLICIT_CMD_HAS_RESOURCE)) {
/* for implicit cmd, no cmd slot is used */
if (cmd->cmd_rp) {
irp = (fct_i_remote_port_t *)
cmd->cmd_rp->rp_fct_private;
if (cmd->cmd_type == FCT_CMD_FCP_XCHG)
! atomic_dec_16(&irp->irp_fcp_xchg_count);
else
! atomic_dec_16(&irp->irp_nonfcp_xchg_count);
}
}
if (do_abts_acc) {
fct_cmd_t *lcmd = cmd->cmd_link;
*** 2124,2134 ****
icmd->icmd_next = iport->iport_cached_cmdlist;
iport->iport_cached_cmdlist = icmd;
iport->iport_cached_ncmds++;
mutex_exit(&iport->iport_cached_cmd_lock);
} else {
! atomic_add_32(&iport->iport_total_alloced_ncmds, -1);
fct_free(cmd);
}
} else {
fct_free(cmd);
}
--- 2124,2134 ----
icmd->icmd_next = iport->iport_cached_cmdlist;
iport->iport_cached_cmdlist = icmd;
iport->iport_cached_ncmds++;
mutex_exit(&iport->iport_cached_cmd_lock);
} else {
! atomic_dec_32(&iport->iport_total_alloced_ncmds);
fct_free(cmd);
}
} else {
fct_free(cmd);
}