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); }