Lines Matching refs:pring

750  * @pring: Pointer to driver SLI ring object.
758 lpfc_cmd_iocb(struct lpfc_hba *phba, struct lpfc_sli_ring *pring)
760 return (IOCB_t *) (((char *) pring->sli.sli3.cmdringaddr) +
761 pring->sli.sli3.cmdidx * phba->iocb_cmd_size);
767 * @pring: Pointer to driver SLI ring object.
775 lpfc_resp_iocb(struct lpfc_hba *phba, struct lpfc_sli_ring *pring)
777 return (IOCB_t *) (((char *) pring->sli.sli3.rspringaddr) +
778 pring->sli.sli3.rspidx * phba->iocb_rsp_size);
1135 struct lpfc_sli_ring *pring = NULL;
1139 pring = phba->sli4_hba.nvmels_wq->pring;
1141 pring = lpfc_phba_elsring(phba);
1143 lockdep_assert_held(&pring->ring_lock);
1266 struct lpfc_sli_ring *pring;
1287 pring = phba->sli4_hba.els_wq->pring;
1307 if (!list_empty(&pring->txq))
1585 * @pring: Pointer to driver SLI ring object.
1596 lpfc_sli_ringtxcmpl_put(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
1600 lockdep_assert_held(&pring->ring_lock);
1606 list_add_tail(&piocb->list, &pring->txcmplq);
1608 pring->txcmplq_cnt++;
1610 if ((unlikely(pring->ringno == LPFC_ELS_RING)) &&
1626 * @pring: Pointer to driver SLI ring object.
1634 lpfc_sli_ringtx_get(struct lpfc_hba *phba, struct lpfc_sli_ring *pring)
1640 list_remove_head((&pring->txq), cmd_iocb, struct lpfc_iocbq, list);
1647 * @pring: Pointer to driver SLI ring object.
1659 lpfc_sli_next_iocb_slot (struct lpfc_hba *phba, struct lpfc_sli_ring *pring)
1661 struct lpfc_pgp *pgp = &phba->port_gp[pring->ringno];
1662 uint32_t max_cmd_idx = pring->sli.sli3.numCiocb;
1666 if ((pring->sli.sli3.next_cmdidx == pring->sli.sli3.cmdidx) &&
1667 (++pring->sli.sli3.next_cmdidx >= max_cmd_idx))
1668 pring->sli.sli3.next_cmdidx = 0;
1670 if (unlikely(pring->sli.sli3.local_getidx ==
1671 pring->sli.sli3.next_cmdidx)) {
1673 pring->sli.sli3.local_getidx = le32_to_cpu(pgp->cmdGetInx);
1675 if (unlikely(pring->sli.sli3.local_getidx >= max_cmd_idx)) {
1679 pring->ringno,
1680 pring->sli.sli3.local_getidx,
1696 if (pring->sli.sli3.local_getidx == pring->sli.sli3.next_cmdidx)
1700 return lpfc_cmd_iocb(phba, pring);
1781 * @pring: Pointer to driver SLI ring object.
1794 lpfc_sli_submit_iocb(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
1803 if (pring->ringno == LPFC_ELS_RING) {
1816 pring->stats.iocb_cmd++;
1824 lpfc_sli_ringtxcmpl_put(phba, pring, nextiocb);
1832 pring->sli.sli3.cmdidx = pring->sli.sli3.next_cmdidx;
1833 writel(pring->sli.sli3.cmdidx, &phba->host_gp[pring->ringno].cmdPutInx);
1839 * @pring: Pointer to driver SLI ring object.
1849 lpfc_sli_update_full_ring(struct lpfc_hba *phba, struct lpfc_sli_ring *pring)
1851 int ringno = pring->ringno;
1853 pring->flag |= LPFC_CALL_RING_AVAILABLE;
1864 pring->stats.iocb_cmd_full++;
1870 * @pring: Pointer to driver SLI ring object.
1877 lpfc_sli_update_ring(struct lpfc_hba *phba, struct lpfc_sli_ring *pring)
1879 int ringno = pring->ringno;
1894 * @pring: Pointer to driver SLI ring object.
1901 lpfc_sli_resume_iocb(struct lpfc_hba *phba, struct lpfc_sli_ring *pring)
1917 (!list_empty(&pring->txq)) &&
1918 (pring->ringno != LPFC_FCP_RING ||
1921 while ((iocb = lpfc_sli_next_iocb_slot(phba, pring)) &&
1922 (nextiocb = lpfc_sli_ringtx_get(phba, pring)))
1923 lpfc_sli_submit_iocb(phba, pring, iocb, nextiocb);
1926 lpfc_sli_update_ring(phba, pring);
1928 lpfc_sli_update_full_ring(phba, pring);
2765 * @pring: Pointer to driver SLI ring object.
2776 struct lpfc_sli_ring *pring,
2782 return lpfc_sli_ring_taggedbuf_get(phba, pring, tag);
2909 * @pring: Pointer to driver SLI ring object.
2919 lpfc_complete_unsol_iocb(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
2934 if (pring->prt[0].profile) {
2935 if (pring->prt[0].lpfc_sli_rcv_unsol_event)
2936 (pring->prt[0].lpfc_sli_rcv_unsol_event) (phba, pring,
2942 for (i = 0; i < pring->num_mask; i++) {
2943 if ((pring->prt[i].rctl == fch_r_ctl) &&
2944 (pring->prt[i].type == fch_type)) {
2945 if (pring->prt[i].lpfc_sli_rcv_unsol_event)
2946 (pring->prt[i].lpfc_sli_rcv_unsol_event)
2947 (phba, pring, saveq);
2957 * @pring: Pointer to driver SLI ring object.
2969 lpfc_sli_process_unsol_iocb(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
2981 if (pring->lpfc_sli_rcv_async_status)
2982 pring->lpfc_sli_rcv_async_status(phba, pring, saveq);
2990 pring->ringno,
2998 dmzbuf = lpfc_sli_get_buff(phba, pring,
3004 dmzbuf = lpfc_sli_get_buff(phba, pring,
3010 dmzbuf = lpfc_sli_get_buff(phba, pring,
3020 saveq->context2 = lpfc_sli_get_buff(phba, pring,
3028 pring->ringno,
3032 saveq->context3 = lpfc_sli_get_buff(phba, pring,
3040 pring->ringno,
3046 iocbq->context2 = lpfc_sli_get_buff(phba, pring,
3054 ". tag 0x%x\n", pring->ringno,
3058 iocbq->context3 = lpfc_sli_get_buff(phba, pring,
3067 pring->ringno,
3078 list_for_each_entry(iocbq, &pring->iocb_continue_saveq, clist) {
3088 &pring->iocb_continue_saveq);
3107 if ((Rctl == 0) && (pring->ringno == LPFC_ELS_RING) &&
3117 if (!lpfc_complete_unsol_iocb(phba, pring, saveq, Rctl, Type))
3121 pring->ringno, Rctl, Type);
3129 * @pring: Pointer to driver SLI ring object.
3141 struct lpfc_sli_ring *pring,
3150 temp_lock = &pring->ring_lock;
3163 pring->txcmplq_cnt--;
3181 * @pring: Pointer to driver SLI ring object.
3192 struct lpfc_sli_ring *pring, uint16_t iotag)
3199 temp_lock = &pring->ring_lock;
3210 pring->txcmplq_cnt--;
3228 * @pring: Pointer to driver SLI ring object.
3243 lpfc_sli_process_sol_iocb(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
3250 cmdiocbp = lpfc_sli_iocbq_lookup(phba, pring, saveq);
3258 (pring->ringno == LPFC_ELS_RING) &&
3268 if (pring->ringno == LPFC_ELS_RING) {
3354 if (pring->ringno != LPFC_ELS_RING) {
3363 pring->ringno,
3378 * @pring: Pointer to driver SLI ring object.
3386 lpfc_sli_rsp_pointers_error(struct lpfc_hba *phba, struct lpfc_sli_ring *pring)
3388 struct lpfc_pgp *pgp = &phba->port_gp[pring->ringno];
3396 pring->ringno, le32_to_cpu(pgp->rspPutInx),
3397 pring->sli.sli3.numRiocb);
3464 * @pring: Pointer to driver SLI ring object.
3480 struct lpfc_sli_ring *pring, uint32_t mask)
3482 struct lpfc_pgp *pgp = &phba->port_gp[pring->ringno];
3495 pring->stats.iocb_event++;
3501 portRspMax = pring->sli.sli3.numRiocb;
3504 lpfc_sli_rsp_pointers_error(phba, pring);
3515 while (pring->sli.sli3.rspidx != portRspPut) {
3521 entry = lpfc_resp_iocb(phba, pring);
3524 if (++pring->sli.sli3.rspidx >= portRspMax)
3525 pring->sli.sli3.rspidx = 0;
3534 pring->stats.iocb_rsp++;
3554 pring->ringno,
3582 cmdiocbq = lpfc_sli_iocbq_lookup(phba, pring,
3598 lpfc_sli_process_unsol_iocb(phba, pring, &rspiocbq);
3629 writel(pring->sli.sli3.rspidx,
3630 &phba->host_gp[pring->ringno].rspGetInx);
3632 if (pring->sli.sli3.rspidx == portRspPut)
3637 pring->stats.iocb_rsp_full++;
3638 status = ((CA_R0ATT | CA_R0RE_RSP) << (pring->ringno * 4));
3642 if ((mask & HA_R0CE_RSP) && (pring->flag & LPFC_CALL_RING_AVAILABLE)) {
3643 pring->flag &= ~LPFC_CALL_RING_AVAILABLE;
3644 pring->stats.iocb_cmd_empty++;
3647 pring->sli.sli3.local_getidx = le32_to_cpu(pgp->cmdGetInx);
3648 lpfc_sli_resume_iocb(phba, pring);
3650 if ((pring->lpfc_sli_cmd_available))
3651 (pring->lpfc_sli_cmd_available) (phba, pring);
3663 * @pring: Pointer to driver SLI ring object.
3679 lpfc_sli_sp_handle_rspiocb(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
3694 list_add_tail(&rspiocbp->list, &(pring->iocb_continueq));
3695 pring->iocb_continueq_cnt++;
3705 saveq = list_get_first(&pring->iocb_continueq,
3708 list_del_init(&pring->iocb_continueq);
3709 pring->iocb_continueq_cnt = 0;
3711 pring->stats.iocb_rsp++;
3734 pring->ringno,
3764 rc = lpfc_sli_process_sol_iocb(phba, pring, saveq);
3770 rc = lpfc_sli_process_unsol_iocb(phba, pring, saveq);
3780 cmdiocbp = lpfc_sli_iocbq_lookup(phba, pring,
3839 * @pring: Pointer to driver SLI ring object.
3847 struct lpfc_sli_ring *pring, uint32_t mask)
3849 phba->lpfc_sli_handle_slow_ring_event(phba, pring, mask);
3855 * @pring: Pointer to driver SLI ring object.
3865 struct lpfc_sli_ring *pring, uint32_t mask)
3875 pgp = &phba->port_gp[pring->ringno];
3877 pring->stats.iocb_event++;
3883 portRspMax = pring->sli.sli3.numRiocb;
3893 pring->ringno, portRspPut, portRspMax);
3905 while (pring->sli.sli3.rspidx != portRspPut) {
3919 entry = lpfc_resp_iocb(phba, pring);
3933 if (++pring->sli.sli3.rspidx >= portRspMax)
3934 pring->sli.sli3.rspidx = 0;
3936 if (pring->ringno == LPFC_ELS_RING) {
3944 writel(pring->sli.sli3.rspidx,
3945 &phba->host_gp[pring->ringno].rspGetInx);
3949 rspiocbp = lpfc_sli_sp_handle_rspiocb(phba, pring, rspiocbp);
3957 if (pring->sli.sli3.rspidx == portRspPut) {
3960 } /* while (pring->sli.sli3.rspidx != portRspPut) */
3964 pring->stats.iocb_rsp_full++;
3966 status = ((CA_R0ATT | CA_R0RE_RSP) << (pring->ringno * 4));
3970 if ((mask & HA_R0CE_RSP) && (pring->flag & LPFC_CALL_RING_AVAILABLE)) {
3971 pring->flag &= ~LPFC_CALL_RING_AVAILABLE;
3972 pring->stats.iocb_cmd_empty++;
3975 pring->sli.sli3.local_getidx = le32_to_cpu(pgp->cmdGetInx);
3976 lpfc_sli_resume_iocb(phba, pring);
3978 if ((pring->lpfc_sli_cmd_available))
3979 (pring->lpfc_sli_cmd_available) (phba, pring);
3990 * @pring: Pointer to driver SLI ring object.
4001 struct lpfc_sli_ring *pring, uint32_t mask)
4027 lpfc_sli_sp_handle_rspiocb(phba, pring,
4051 * @pring: Pointer to driver SLI ring object.
4059 lpfc_sli_abort_iocb_ring(struct lpfc_hba *phba, struct lpfc_sli_ring *pring)
4064 if (pring->ringno == LPFC_ELS_RING) {
4072 spin_lock_irq(&pring->ring_lock);
4073 list_splice_init(&pring->txq, &completions);
4074 pring->txq_cnt = 0;
4075 spin_unlock_irq(&pring->ring_lock);
4079 list_for_each_entry_safe(iocb, next_iocb, &pring->txcmplq, list)
4080 lpfc_sli_issue_abort_iotag(phba, pring, iocb);
4084 list_splice_init(&pring->txq, &completions);
4085 pring->txq_cnt = 0;
4088 list_for_each_entry_safe(iocb, next_iocb, &pring->txcmplq, list)
4089 lpfc_sli_issue_abort_iotag(phba, pring, iocb);
4111 struct lpfc_sli_ring *pring;
4117 pring = phba->sli4_hba.hdwq[i].io_wq->pring;
4118 lpfc_sli_abort_iocb_ring(phba, pring);
4121 pring = &psli->sli3_ring[LPFC_FCP_RING];
4122 lpfc_sli_abort_iocb_ring(phba, pring);
4142 struct lpfc_sli_ring *pring;
4159 pring = phba->sli4_hba.hdwq[i].io_wq->pring;
4161 spin_lock_irq(&pring->ring_lock);
4163 list_splice_init(&pring->txq, &txq);
4165 &pring->txcmplq, list)
4168 list_splice_init(&pring->txcmplq, &txcmplq);
4169 pring->txq_cnt = 0;
4170 pring->txcmplq_cnt = 0;
4171 spin_unlock_irq(&pring->ring_lock);
4183 pring = &psli->sli3_ring[LPFC_FCP_RING];
4187 list_splice_init(&pring->txq, &txq);
4189 &pring->txcmplq, list)
4192 list_splice_init(&pring->txcmplq, &txcmplq);
4193 pring->txq_cnt = 0;
4194 pring->txcmplq_cnt = 0;
4543 struct lpfc_sli_ring *pring;
4585 pring = &psli->sli3_ring[i];
4586 pring->flag = 0;
4587 pring->sli.sli3.rspidx = 0;
4588 pring->sli.sli3.next_cmdidx = 0;
4589 pring->sli.sli3.local_getidx = 0;
4590 pring->sli.sli3.cmdidx = 0;
4591 pring->missbufcnt = 0;
9208 * @pring: Pointer to driver SLI ring object.
9217 __lpfc_sli_ringtx_put(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
9221 lockdep_assert_held(&pring->ring_lock);
9225 list_add_tail(&piocb->list, &pring->txq);
9231 * @pring: Pointer to driver SLI ring object.
9246 lpfc_sli_next_iocb(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
9253 nextiocb = lpfc_sli_ringtx_get(phba, pring);
9290 struct lpfc_sli_ring *pring = &phba->sli.sli3_ring[ring_number];
9323 if (unlikely(pring->flag & LPFC_STOP_IOCB_EVENT))
9363 } else if (unlikely(pring->ringno == LPFC_FCP_RING &&
9368 while ((iocb = lpfc_sli_next_iocb_slot(phba, pring)) &&
9369 (nextiocb = lpfc_sli_next_iocb(phba, pring, &piocb)))
9370 lpfc_sli_submit_iocb(phba, pring, iocb, nextiocb);
9373 lpfc_sli_update_ring(phba, pring);
9375 lpfc_sli_update_full_ring(phba, pring);
9383 pring->stats.iocb_cmd_delay++;
9388 __lpfc_sli_ringtx_put(phba, pring, piocb);
10125 struct lpfc_sli_ring *pring;
10136 pring = wq->pring;
10142 lockdep_assert_held(&pring->ring_lock);
10149 if (!list_empty(&pring->txq)) {
10152 pring, piocb);
10162 pring,
10195 lpfc_sli_ringtxcmpl_put(phba, pring, piocb);
10277 return phba->sli4_hba.hdwq[piocb->hba_wqidx].io_wq->pring;
10282 return phba->sli4_hba.els_wq->pring;
10303 struct lpfc_sli_ring *pring;
10311 pring = lpfc_sli4_calc_ring(phba, piocb);
10312 if (unlikely(pring == NULL))
10315 spin_lock_irqsave(&pring->ring_lock, iflags);
10317 spin_unlock_irqrestore(&pring->ring_lock, iflags);
10344 struct lpfc_sli_ring *pring;
10351 pring = &psli->sli3_ring[LPFC_FCP_RING];
10352 pring->sli.sli3.numCiocb -= SLI2_IOCB_CMD_R1XTRA_ENTRIES;
10353 pring->sli.sli3.numRiocb -= SLI2_IOCB_RSP_R1XTRA_ENTRIES;
10354 pring->sli.sli3.numCiocb -= SLI2_IOCB_CMD_R3XTRA_ENTRIES;
10355 pring->sli.sli3.numRiocb -= SLI2_IOCB_RSP_R3XTRA_ENTRIES;
10358 pring = &psli->sli3_ring[LPFC_EXTRA_RING];
10360 pring->sli.sli3.numCiocb += SLI2_IOCB_CMD_R1XTRA_ENTRIES;
10361 pring->sli.sli3.numRiocb += SLI2_IOCB_RSP_R1XTRA_ENTRIES;
10362 pring->sli.sli3.numCiocb += SLI2_IOCB_CMD_R3XTRA_ENTRIES;
10363 pring->sli.sli3.numRiocb += SLI2_IOCB_RSP_R3XTRA_ENTRIES;
10366 pring->iotag_max = 4096;
10367 pring->num_mask = 1;
10368 pring->prt[0].profile = 0; /* Mask 0 */
10369 pring->prt[0].rctl = phba->cfg_multi_ring_rctl;
10370 pring->prt[0].type = phba->cfg_multi_ring_type;
10371 pring->prt[0].lpfc_sli_rcv_unsol_event = NULL;
10495 * @pring: Pointer to driver SLI ring object.
10507 struct lpfc_sli_ring * pring, struct lpfc_iocbq * iocbq)
10555 pring->ringno, icmd->un.asyncstat.evt_code,
10580 struct lpfc_sli_ring *pring;
10582 pring = phba->sli4_hba.els_wq->pring;
10583 pring->num_mask = LPFC_MAX_RING_MASK;
10584 pring->prt[0].profile = 0; /* Mask 0 */
10585 pring->prt[0].rctl = FC_RCTL_ELS_REQ;
10586 pring->prt[0].type = FC_TYPE_ELS;
10587 pring->prt[0].lpfc_sli_rcv_unsol_event =
10589 pring->prt[1].profile = 0; /* Mask 1 */
10590 pring->prt[1].rctl = FC_RCTL_ELS_REP;
10591 pring->prt[1].type = FC_TYPE_ELS;
10592 pring->prt[1].lpfc_sli_rcv_unsol_event =
10594 pring->prt[2].profile = 0; /* Mask 2 */
10596 pring->prt[2].rctl = FC_RCTL_DD_UNSOL_CTL;
10598 pring->prt[2].type = FC_TYPE_CT;
10599 pring->prt[2].lpfc_sli_rcv_unsol_event =
10601 pring->prt[3].profile = 0; /* Mask 3 */
10603 pring->prt[3].rctl = FC_RCTL_DD_SOL_CTL;
10605 pring->prt[3].type = FC_TYPE_CT;
10606 pring->prt[3].lpfc_sli_rcv_unsol_event =
10627 struct lpfc_sli_ring *pring;
10637 pring = &psli->sli3_ring[i];
10641 pring->sli.sli3.numCiocb = SLI2_IOCB_CMD_R0_ENTRIES;
10642 pring->sli.sli3.numRiocb = SLI2_IOCB_RSP_R0_ENTRIES;
10643 pring->sli.sli3.numCiocb +=
10645 pring->sli.sli3.numRiocb +=
10647 pring->sli.sli3.numCiocb +=
10649 pring->sli.sli3.numRiocb +=
10651 pring->sli.sli3.sizeCiocb = (phba->sli_rev == 3) ?
10654 pring->sli.sli3.sizeRiocb = (phba->sli_rev == 3) ?
10657 pring->iotag_ctr = 0;
10658 pring->iotag_max =
10660 pring->fast_iotag = pring->iotag_max;
10661 pring->num_mask = 0;
10665 pring->sli.sli3.numCiocb = SLI2_IOCB_CMD_R1_ENTRIES;
10666 pring->sli.sli3.numRiocb = SLI2_IOCB_RSP_R1_ENTRIES;
10667 pring->sli.sli3.sizeCiocb = (phba->sli_rev == 3) ?
10670 pring->sli.sli3.sizeRiocb = (phba->sli_rev == 3) ?
10673 pring->iotag_max = phba->cfg_hba_queue_depth;
10674 pring->num_mask = 0;
10678 pring->sli.sli3.numCiocb = SLI2_IOCB_CMD_R2_ENTRIES;
10679 pring->sli.sli3.numRiocb = SLI2_IOCB_RSP_R2_ENTRIES;
10680 pring->sli.sli3.sizeCiocb = (phba->sli_rev == 3) ?
10683 pring->sli.sli3.sizeRiocb = (phba->sli_rev == 3) ?
10686 pring->fast_iotag = 0;
10687 pring->iotag_ctr = 0;
10688 pring->iotag_max = 4096;
10689 pring->lpfc_sli_rcv_async_status =
10691 pring->num_mask = LPFC_MAX_RING_MASK;
10692 pring->prt[0].profile = 0; /* Mask 0 */
10693 pring->prt[0].rctl = FC_RCTL_ELS_REQ;
10694 pring->prt[0].type = FC_TYPE_ELS;
10695 pring->prt[0].lpfc_sli_rcv_unsol_event =
10697 pring->prt[1].profile = 0; /* Mask 1 */
10698 pring->prt[1].rctl = FC_RCTL_ELS_REP;
10699 pring->prt[1].type = FC_TYPE_ELS;
10700 pring->prt[1].lpfc_sli_rcv_unsol_event =
10702 pring->prt[2].profile = 0; /* Mask 2 */
10704 pring->prt[2].rctl = FC_RCTL_DD_UNSOL_CTL;
10706 pring->prt[2].type = FC_TYPE_CT;
10707 pring->prt[2].lpfc_sli_rcv_unsol_event =
10709 pring->prt[3].profile = 0; /* Mask 3 */
10711 pring->prt[3].rctl = FC_RCTL_DD_SOL_CTL;
10713 pring->prt[3].type = FC_TYPE_CT;
10714 pring->prt[3].lpfc_sli_rcv_unsol_event =
10718 totiocbsize += (pring->sli.sli3.numCiocb *
10719 pring->sli.sli3.sizeCiocb) +
10720 (pring->sli.sli3.numRiocb * pring->sli.sli3.sizeRiocb);
10750 struct lpfc_sli_ring *pring;
10759 pring = phba->sli4_hba.hdwq[i].io_wq->pring;
10760 pring->flag = 0;
10761 pring->ringno = LPFC_FCP_RING;
10762 pring->txcmplq_cnt = 0;
10763 INIT_LIST_HEAD(&pring->txq);
10764 INIT_LIST_HEAD(&pring->txcmplq);
10765 INIT_LIST_HEAD(&pring->iocb_continueq);
10766 spin_lock_init(&pring->ring_lock);
10768 pring = phba->sli4_hba.els_wq->pring;
10769 pring->flag = 0;
10770 pring->ringno = LPFC_ELS_RING;
10771 pring->txcmplq_cnt = 0;
10772 INIT_LIST_HEAD(&pring->txq);
10773 INIT_LIST_HEAD(&pring->txcmplq);
10774 INIT_LIST_HEAD(&pring->iocb_continueq);
10775 spin_lock_init(&pring->ring_lock);
10778 pring = phba->sli4_hba.nvmels_wq->pring;
10779 pring->flag = 0;
10780 pring->ringno = LPFC_ELS_RING;
10781 pring->txcmplq_cnt = 0;
10782 INIT_LIST_HEAD(&pring->txq);
10783 INIT_LIST_HEAD(&pring->txcmplq);
10784 INIT_LIST_HEAD(&pring->iocb_continueq);
10785 spin_lock_init(&pring->ring_lock);
10806 struct lpfc_sli_ring *pring;
10815 pring = &psli->sli3_ring[i];
10816 pring->ringno = i;
10817 pring->sli.sli3.next_cmdidx = 0;
10818 pring->sli.sli3.local_getidx = 0;
10819 pring->sli.sli3.cmdidx = 0;
10820 INIT_LIST_HEAD(&pring->iocb_continueq);
10821 INIT_LIST_HEAD(&pring->iocb_continue_saveq);
10822 INIT_LIST_HEAD(&pring->postbufq);
10823 pring->flag = 0;
10824 INIT_LIST_HEAD(&pring->txq);
10825 INIT_LIST_HEAD(&pring->txcmplq);
10826 spin_lock_init(&pring->ring_lock);
10908 struct lpfc_sli_ring *pring;
10925 pring = &psli->sli3_ring[i];
10926 prev_pring_flag = pring->flag;
10928 if (pring->ringno == LPFC_ELS_RING) {
10929 pring->flag |= LPFC_DEFERRED_RING_EVENT;
10934 &pring->txq, list) {
10940 &pring->txcmplq, list) {
10943 lpfc_sli_issue_abort_iotag(phba, pring, iocb);
10945 pring->flag = prev_pring_flag;
10949 pring = qp->pring;
10950 if (!pring)
10952 if (pring == phba->sli4_hba.els_wq->pring) {
10953 pring->flag |= LPFC_DEFERRED_RING_EVENT;
10957 prev_pring_flag = pring->flag;
10958 spin_lock(&pring->ring_lock);
10960 &pring->txq, list) {
10965 spin_unlock(&pring->ring_lock);
10967 &pring->txcmplq, list) {
10970 lpfc_sli_issue_abort_iotag(phba, pring, iocb);
10972 pring->flag = prev_pring_flag;
11004 struct lpfc_sli_ring *pring;
11027 pring = &psli->sli3_ring[i];
11029 if (pring->ringno == LPFC_ELS_RING) {
11030 pring->flag |= LPFC_DEFERRED_RING_EVENT;
11034 list_splice_init(&pring->txq, &completions);
11038 pring = qp->pring;
11039 if (!pring)
11041 spin_lock(&pring->ring_lock);
11042 list_splice_init(&pring->txq, &completions);
11043 spin_unlock(&pring->ring_lock);
11044 if (pring == phba->sli4_hba.els_wq->pring) {
11045 pring->flag |= LPFC_DEFERRED_RING_EVENT;
11143 * @pring: Pointer to driver SLI ring object.
11151 lpfc_sli_ringpostbuf_put(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
11157 list_add_tail(&mp->list, &pring->postbufq);
11158 pring->postbufq_cnt++;
11191 * @pring: Pointer to driver SLI ring object.
11194 * Buffers posted using CMD_QUE_XRI64_CX iocb are in pring->postbufq
11197 * This function searches the pring->postbufq list using the tag
11204 lpfc_sli_ring_taggedbuf_get(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
11208 struct list_head *slp = &pring->postbufq;
11212 list_for_each_entry_safe(mp, next_mp, &pring->postbufq, list) {
11215 pring->postbufq_cnt--;
11225 pring->ringno, (unsigned long) tag,
11226 slp->next, slp->prev, pring->postbufq_cnt);
11234 * @pring: Pointer to driver SLI ring object.
11248 lpfc_sli_ringpostbuf_get(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
11252 struct list_head *slp = &pring->postbufq;
11256 list_for_each_entry_safe(mp, next_mp, &pring->postbufq, list) {
11259 pring->postbufq_cnt--;
11269 pring->ringno, (unsigned long long)phys,
11270 slp->next, slp->prev, pring->postbufq_cnt);
11369 * @pring: Pointer to driver SLI ring object.
11380 lpfc_sli_abort_iotag_issue(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
11420 if (pring->ringno == LPFC_ELS_RING) {
11451 pring = lpfc_sli4_calc_ring(phba, abtsiocbp);
11452 if (unlikely(pring == NULL))
11455 spin_lock_irqsave(&pring->ring_lock, iflags);
11456 retval = __lpfc_sli_issue_iocb(phba, pring->ringno,
11458 spin_unlock_irqrestore(&pring->ring_lock, iflags);
11460 retval = __lpfc_sli_issue_iocb(phba, pring->ringno,
11478 * @pring: Pointer to driver SLI ring object.
11489 lpfc_sli_issue_abort_iotag(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
11509 if (!pring) {
11522 (pring->ringno == LPFC_ELS_RING)) {
11531 retval = lpfc_sli_abort_iotag_issue(phba, pring, cmdiocb);
11552 struct lpfc_sli_ring *pring;
11558 pring = &psli->sli3_ring[i];
11559 lpfc_sli_abort_iocb_ring(phba, pring);
11564 pring = qp->pring;
11565 if (!pring)
11567 lpfc_sli_abort_iocb_ring(phba, pring);
11713 * @pring: Pointer to driver SLI ring object.
11732 lpfc_sli_abort_iocb(struct lpfc_vport *vport, struct lpfc_sli_ring *pring,
11803 ret_val = lpfc_sli_issue_iocb(phba, pring->ringno,
11818 * @pring: Pointer to driver SLI ring object.
11838 lpfc_sli_abort_taskmgmt(struct lpfc_vport *vport, struct lpfc_sli_ring *pring,
11878 phba->sli4_hba.hdwq[iocbq->hba_wqidx].io_wq->pring;
11949 ret_val = __lpfc_sli_issue_iocb(phba, pring->ringno,
12108 struct lpfc_sli_ring *pring;
12113 pring = lpfc_sli4_calc_ring(phba, piocb);
12115 pring = &phba->sli.sli3_ring[ring_number];
12180 list_for_each_entry(iocb, &pring->txq, list) {
12183 list_for_each_entry(iocb, &pring->txcmplq, list) {
12918 struct lpfc_sli_ring *pring;
12963 pring = &phba->sli.sli3_ring[LPFC_FCP_RING];
12965 lpfc_sli_handle_fast_ring_event(phba, pring, status);
13267 struct lpfc_sli_ring *pring;
13272 pring = lpfc_phba_elsring(phba);
13273 if (unlikely(!pring))
13277 pring->stats.iocb_event++;
13279 cmdiocbq = lpfc_sli_iocbq_lookup_by_tag(phba, pring,
13291 spin_lock_irqsave(&pring->ring_lock, iflags);
13293 lpfc_sli_ringtxcmpl_put(phba, pring, cmdiocbq);
13294 spin_unlock_irqrestore(&pring->ring_lock, iflags);
13526 struct lpfc_sli_ring *pring = cq->pring;
13544 if (!list_empty(&pring->txq))
13546 if (!list_empty(&pring->txcmplq))
14065 struct lpfc_sli_ring *pring = cq->pring;
14091 spin_lock_irqsave(&pring->ring_lock, iflags);
14092 pring->stats.iocb_event++;
14093 spin_unlock_irqrestore(&pring->ring_lock, iflags);
14094 cmdiocbq = lpfc_sli_iocbq_lookup_by_tag(phba, pring,
16086 wq->pring = kzalloc(sizeof(struct lpfc_sli_ring), GFP_KERNEL);
16087 if (wq->pring == NULL) {
16807 kfree(wq->pring);
16808 wq->pring = NULL;
18285 phba->sli4_hba.els_wq->pring,
20020 struct lpfc_sli_ring *pring;
20034 pring = wq->pring;
20039 pring = lpfc_phba_elsring(phba);
20042 if (unlikely(!pring) || list_empty(&pring->txq))
20045 spin_lock_irqsave(&pring->ring_lock, iflags);
20046 list_for_each_entry(piocbq, &pring->txq, list) {
20050 if (txq_cnt > pring->txq_max)
20051 pring->txq_max = txq_cnt;
20053 spin_unlock_irqrestore(&pring->ring_lock, iflags);
20055 while (!list_empty(&pring->txq)) {
20056 spin_lock_irqsave(&pring->ring_lock, iflags);
20058 piocbq = lpfc_sli_ringtx_get(phba, pring);
20060 spin_unlock_irqrestore(&pring->ring_lock, iflags);
20068 __lpfc_sli_ringtx_put(phba, pring, piocbq);
20069 spin_unlock_irqrestore(&pring->ring_lock, iflags);
20086 lpfc_sli_ringtxcmpl_put(phba, pring, piocbq);
20098 spin_unlock_irqrestore(&pring->ring_lock, iflags);
20247 struct lpfc_sli_ring *pring;
20253 pring = phba->sli4_hba.nvmels_wq->pring;
20254 lpfc_qp_spin_lock_irqsave(&pring->ring_lock, iflags,
20258 spin_unlock_irqrestore(&pring->ring_lock, iflags);
20264 spin_unlock_irqrestore(&pring->ring_lock, iflags);
20271 spin_unlock_irqrestore(&pring->ring_lock, iflags);
20275 lpfc_sli_ringtxcmpl_put(phba, pring, pwqe);
20276 spin_unlock_irqrestore(&pring->ring_lock, iflags);
20286 pring = wq->pring;
20290 lpfc_qp_spin_lock_irqsave(&pring->ring_lock, iflags,
20294 spin_unlock_irqrestore(&pring->ring_lock, iflags);
20297 lpfc_sli_ringtxcmpl_put(phba, pring, pwqe);
20298 spin_unlock_irqrestore(&pring->ring_lock, iflags);
20308 pring = wq->pring;
20320 lpfc_qp_spin_lock_irqsave(&pring->ring_lock, iflags,
20324 spin_unlock_irqrestore(&pring->ring_lock, iflags);
20327 lpfc_sli_ringtxcmpl_put(phba, pring, pwqe);
20328 spin_unlock_irqrestore(&pring->ring_lock, iflags);
20367 txcmplq_cnt = qp->io_wq->pring->txcmplq_cnt;
20437 txcmplq_cnt = qp->io_wq->pring->txcmplq_cnt;
20722 txcmplq_cnt = qp->io_wq->pring->txcmplq_cnt;