Print this page
5045 use atomic_{inc,dec}_* instead of atomic_add_*


4791                 /*
4792                  * If a packet was found, then queue the packet's
4793                  * iocb for deferred processing
4794                  */
4795                 else if (sbp) {
4796 #ifdef SFCT_SUPPORT
4797                         fct_cmd_t *fct_cmd;
4798                         emlxs_buf_t *cmd_sbp;
4799 
4800                         fct_cmd = sbp->fct_cmd;
4801                         if (fct_cmd) {
4802                                 cmd_sbp =
4803                                     (emlxs_buf_t *)fct_cmd->cmd_fca_private;
4804                                 mutex_enter(&cmd_sbp->fct_mtx);
4805                                 EMLXS_FCT_STATE_CHG(fct_cmd, cmd_sbp,
4806                                     EMLXS_FCT_IOCB_COMPLETE);
4807                                 mutex_exit(&cmd_sbp->fct_mtx);
4808                         }
4809 #endif /* SFCT_SUPPORT */
4810                         cp->hbaCmplCmd_sbp++;
4811                         atomic_add_32(&hba->io_active, -1);
4812 
4813                         /* Copy entry to sbp's iocbq */
4814                         iocbq = &sbp->iocbq;
4815                         BE_SWAP32_BCOPY((uint8_t *)entry,
4816                             (uint8_t *)iocbq, hba->sli.sli3.iocb_rsp_size);
4817 
4818                         iocbq->next = NULL;
4819 
4820                         /*
4821                          * If this is NOT a polled command completion
4822                          * or a driver allocated pkt, then defer pkt
4823                          * completion.
4824                          */
4825                         if (!(sbp->pkt_flags &
4826                             (PACKET_POLLED | PACKET_ALLOCATED))) {
4827                                 /* Add the IOCB to the local list */
4828                                 if (!rsp_head) {
4829                                         rsp_head = iocbq;
4830                                 } else {
4831                                         rsp_tail->next = iocbq;


5201         ringno = rp->ringno;
5202         sbp = iocbq->sbp;
5203         icmd = &iocbq->iocb;
5204         port = iocbq->port;
5205 
5206         HBASTATS.IocbIssued[ringno]++;
5207 
5208         /* Check for ULP pkt request */
5209         if (sbp) {
5210                 mutex_enter(&sbp->mtx);
5211 
5212                 if (sbp->node == NULL) {
5213                         /* Set node to base node by default */
5214                         iocbq->node = (void *)&port->node_base;
5215                         sbp->node = (void *)&port->node_base;
5216                 }
5217 
5218                 sbp->pkt_flags |= PACKET_IN_CHIPQ;
5219                 mutex_exit(&sbp->mtx);
5220 
5221                 atomic_add_32(&hba->io_active, 1);
5222 
5223 #ifdef SFCT_SUPPORT
5224 #ifdef FCT_IO_TRACE
5225                 if (sbp->fct_cmd) {
5226                         emlxs_fct_io_trace(port, sbp->fct_cmd,
5227                             EMLXS_FCT_IOCB_ISSUED);
5228                         emlxs_fct_io_trace(port, sbp->fct_cmd,
5229                             icmd->ULPCOMMAND);
5230                 }
5231 #endif /* FCT_IO_TRACE */
5232 #endif /* SFCT_SUPPORT */
5233 
5234                 rp->channelp->hbaSendCmd_sbp++;
5235                 iocbq->channel = rp->channelp;
5236         } else {
5237                 rp->channelp->hbaSendCmd++;
5238         }
5239 
5240         /* get the next available command ring iocb */
5241         iocb =




4791                 /*
4792                  * If a packet was found, then queue the packet's
4793                  * iocb for deferred processing
4794                  */
4795                 else if (sbp) {
4796 #ifdef SFCT_SUPPORT
4797                         fct_cmd_t *fct_cmd;
4798                         emlxs_buf_t *cmd_sbp;
4799 
4800                         fct_cmd = sbp->fct_cmd;
4801                         if (fct_cmd) {
4802                                 cmd_sbp =
4803                                     (emlxs_buf_t *)fct_cmd->cmd_fca_private;
4804                                 mutex_enter(&cmd_sbp->fct_mtx);
4805                                 EMLXS_FCT_STATE_CHG(fct_cmd, cmd_sbp,
4806                                     EMLXS_FCT_IOCB_COMPLETE);
4807                                 mutex_exit(&cmd_sbp->fct_mtx);
4808                         }
4809 #endif /* SFCT_SUPPORT */
4810                         cp->hbaCmplCmd_sbp++;
4811                         atomic_dec_32(&hba->io_active);
4812 
4813                         /* Copy entry to sbp's iocbq */
4814                         iocbq = &sbp->iocbq;
4815                         BE_SWAP32_BCOPY((uint8_t *)entry,
4816                             (uint8_t *)iocbq, hba->sli.sli3.iocb_rsp_size);
4817 
4818                         iocbq->next = NULL;
4819 
4820                         /*
4821                          * If this is NOT a polled command completion
4822                          * or a driver allocated pkt, then defer pkt
4823                          * completion.
4824                          */
4825                         if (!(sbp->pkt_flags &
4826                             (PACKET_POLLED | PACKET_ALLOCATED))) {
4827                                 /* Add the IOCB to the local list */
4828                                 if (!rsp_head) {
4829                                         rsp_head = iocbq;
4830                                 } else {
4831                                         rsp_tail->next = iocbq;


5201         ringno = rp->ringno;
5202         sbp = iocbq->sbp;
5203         icmd = &iocbq->iocb;
5204         port = iocbq->port;
5205 
5206         HBASTATS.IocbIssued[ringno]++;
5207 
5208         /* Check for ULP pkt request */
5209         if (sbp) {
5210                 mutex_enter(&sbp->mtx);
5211 
5212                 if (sbp->node == NULL) {
5213                         /* Set node to base node by default */
5214                         iocbq->node = (void *)&port->node_base;
5215                         sbp->node = (void *)&port->node_base;
5216                 }
5217 
5218                 sbp->pkt_flags |= PACKET_IN_CHIPQ;
5219                 mutex_exit(&sbp->mtx);
5220 
5221                 atomic_inc_32(&hba->io_active);
5222 
5223 #ifdef SFCT_SUPPORT
5224 #ifdef FCT_IO_TRACE
5225                 if (sbp->fct_cmd) {
5226                         emlxs_fct_io_trace(port, sbp->fct_cmd,
5227                             EMLXS_FCT_IOCB_ISSUED);
5228                         emlxs_fct_io_trace(port, sbp->fct_cmd,
5229                             icmd->ULPCOMMAND);
5230                 }
5231 #endif /* FCT_IO_TRACE */
5232 #endif /* SFCT_SUPPORT */
5233 
5234                 rp->channelp->hbaSendCmd_sbp++;
5235                 iocbq->channel = rp->channelp;
5236         } else {
5237                 rp->channelp->hbaSendCmd++;
5238         }
5239 
5240         /* get the next available command ring iocb */
5241         iocb =