Lines Matching refs:pring

875  * @pring: Pointer to driver SLI ring object.
883 lpfc_cmd_iocb(struct lpfc_hba *phba, struct lpfc_sli_ring *pring)
885 return (IOCB_t *) (((char *) pring->sli.sli3.cmdringaddr) +
886 pring->sli.sli3.cmdidx * phba->iocb_cmd_size);
892 * @pring: Pointer to driver SLI ring object.
900 lpfc_resp_iocb(struct lpfc_hba *phba, struct lpfc_sli_ring *pring)
902 return (IOCB_t *) (((char *) pring->sli.sli3.rspringaddr) +
903 pring->sli.sli3.rspidx * phba->iocb_rsp_size);
1377 struct lpfc_sli_ring *pring;
1421 pring = lpfc_phba_elsring(phba);
1423 if (pring && (!list_empty(&pring->txq)))
1708 * @pring: Pointer to driver SLI ring object.
1719 lpfc_sli_ringtxcmpl_put(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
1727 list_add_tail(&piocb->list, &pring->txcmplq);
1729 pring->txcmplq_cnt++;
1730 if ((unlikely(pring->ringno == LPFC_ELS_RING)) &&
1747 * @pring: Pointer to driver SLI ring object.
1755 lpfc_sli_ringtx_get(struct lpfc_hba *phba, struct lpfc_sli_ring *pring)
1761 list_remove_head((&pring->txq), cmd_iocb, struct lpfc_iocbq, list);
2042 * @pring: Pointer to driver SLI ring object.
2054 lpfc_sli_next_iocb_slot (struct lpfc_hba *phba, struct lpfc_sli_ring *pring)
2056 struct lpfc_pgp *pgp = &phba->port_gp[pring->ringno];
2057 uint32_t max_cmd_idx = pring->sli.sli3.numCiocb;
2061 if ((pring->sli.sli3.next_cmdidx == pring->sli.sli3.cmdidx) &&
2062 (++pring->sli.sli3.next_cmdidx >= max_cmd_idx))
2063 pring->sli.sli3.next_cmdidx = 0;
2065 if (unlikely(pring->sli.sli3.local_getidx ==
2066 pring->sli.sli3.next_cmdidx)) {
2068 pring->sli.sli3.local_getidx = le32_to_cpu(pgp->cmdGetInx);
2070 if (unlikely(pring->sli.sli3.local_getidx >= max_cmd_idx)) {
2074 pring->ringno,
2075 pring->sli.sli3.local_getidx,
2091 if (pring->sli.sli3.local_getidx == pring->sli.sli3.next_cmdidx)
2095 return lpfc_cmd_iocb(phba, pring);
2176 * @pring: Pointer to driver SLI ring object.
2189 lpfc_sli_submit_iocb(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
2198 if (pring->ringno == LPFC_ELS_RING) {
2211 pring->stats.iocb_cmd++;
2219 lpfc_sli_ringtxcmpl_put(phba, pring, nextiocb);
2227 pring->sli.sli3.cmdidx = pring->sli.sli3.next_cmdidx;
2228 writel(pring->sli.sli3.cmdidx, &phba->host_gp[pring->ringno].cmdPutInx);
2234 * @pring: Pointer to driver SLI ring object.
2244 lpfc_sli_update_full_ring(struct lpfc_hba *phba, struct lpfc_sli_ring *pring)
2246 int ringno = pring->ringno;
2248 pring->flag |= LPFC_CALL_RING_AVAILABLE;
2259 pring->stats.iocb_cmd_full++;
2265 * @pring: Pointer to driver SLI ring object.
2272 lpfc_sli_update_ring(struct lpfc_hba *phba, struct lpfc_sli_ring *pring)
2274 int ringno = pring->ringno;
2289 * @pring: Pointer to driver SLI ring object.
2296 lpfc_sli_resume_iocb(struct lpfc_hba *phba, struct lpfc_sli_ring *pring)
2312 (!list_empty(&pring->txq)) &&
2313 (pring->ringno != LPFC_FCP_RING ||
2316 while ((iocb = lpfc_sli_next_iocb_slot(phba, pring)) &&
2317 (nextiocb = lpfc_sli_ringtx_get(phba, pring)))
2318 lpfc_sli_submit_iocb(phba, pring, iocb, nextiocb);
2321 lpfc_sli_update_ring(phba, pring);
2323 lpfc_sli_update_full_ring(phba, pring);
3174 * @pring: Pointer to driver SLI ring object.
3185 struct lpfc_sli_ring *pring,
3191 return lpfc_sli_ring_taggedbuf_get(phba, pring, tag);
3339 * @pring: Pointer to driver SLI ring object.
3349 lpfc_complete_unsol_iocb(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
3364 if (pring->prt[0].profile) {
3365 if (pring->prt[0].lpfc_sli_rcv_unsol_event)
3366 (pring->prt[0].lpfc_sli_rcv_unsol_event) (phba, pring,
3372 for (i = 0; i < pring->num_mask; i++) {
3373 if ((pring->prt[i].rctl == fch_r_ctl) &&
3374 (pring->prt[i].type == fch_type)) {
3375 if (pring->prt[i].lpfc_sli_rcv_unsol_event)
3376 (pring->prt[i].lpfc_sli_rcv_unsol_event)
3377 (phba, pring, saveq);
3437 * @pring: Pointer to driver SLI ring object.
3449 lpfc_sli_process_unsol_iocb(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
3463 if (pring->lpfc_sli_rcv_async_status)
3464 pring->lpfc_sli_rcv_async_status(phba, pring, saveq);
3472 pring->ringno,
3480 dmzbuf = lpfc_sli_get_buff(phba, pring,
3486 dmzbuf = lpfc_sli_get_buff(phba, pring,
3492 dmzbuf = lpfc_sli_get_buff(phba, pring,
3502 saveq->cmd_dmabuf = lpfc_sli_get_buff(phba, pring,
3510 pring->ringno,
3514 saveq->bpl_dmabuf = lpfc_sli_get_buff(phba, pring,
3522 pring->ringno,
3529 pring,
3537 ". tag 0x%x\n", pring->ringno,
3542 pring,
3551 pring->ringno,
3558 saveq->cmd_dmabuf = lpfc_sli_ringpostbuf_get(phba, pring,
3564 pring,
3575 list_for_each_entry(iocbq, &pring->iocb_continue_saveq, clist) {
3585 &pring->iocb_continue_saveq);
3606 if ((Rctl == 0) && (pring->ringno == LPFC_ELS_RING) &&
3629 if (!lpfc_complete_unsol_iocb(phba, pring, saveq, Rctl, Type))
3633 pring->ringno, Rctl, Type);
3641 * @pring: Pointer to driver SLI ring object.
3653 struct lpfc_sli_ring *pring,
3670 pring->txcmplq_cnt--;
3685 * @pring: Pointer to driver SLI ring object.
3696 struct lpfc_sli_ring *pring, uint16_t iotag)
3706 pring->txcmplq_cnt--;
3722 * @pring: Pointer to driver SLI ring object.
3737 lpfc_sli_process_sol_iocb(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
3745 spin_lock_irqsave(&pring->ring_lock, iflag);
3748 cmdiocbp = lpfc_sli_iocbq_lookup(phba, pring, saveq);
3750 spin_unlock_irqrestore(&pring->ring_lock, iflag);
3771 (pring->ringno == LPFC_ELS_RING) &&
3780 if (pring->ringno == LPFC_ELS_RING) {
3866 if (pring->ringno != LPFC_ELS_RING) {
3875 pring->ringno, iotag, ulp_status,
3886 * @pring: Pointer to driver SLI ring object.
3894 lpfc_sli_rsp_pointers_error(struct lpfc_hba *phba, struct lpfc_sli_ring *pring)
3896 struct lpfc_pgp *pgp = &phba->port_gp[pring->ringno];
3904 pring->ringno, le32_to_cpu(pgp->rspPutInx),
3905 pring->sli.sli3.numRiocb);
3974 * @pring: Pointer to driver SLI ring object.
3990 struct lpfc_sli_ring *pring, uint32_t mask)
3992 struct lpfc_pgp *pgp = &phba->port_gp[pring->ringno];
4005 pring->stats.iocb_event++;
4011 portRspMax = pring->sli.sli3.numRiocb;
4014 lpfc_sli_rsp_pointers_error(phba, pring);
4025 while (pring->sli.sli3.rspidx != portRspPut) {
4031 entry = lpfc_resp_iocb(phba, pring);
4034 if (++pring->sli.sli3.rspidx >= portRspMax)
4035 pring->sli.sli3.rspidx = 0;
4044 pring->stats.iocb_rsp++;
4064 pring->ringno,
4091 cmdiocbq = lpfc_sli_iocbq_lookup(phba, pring,
4105 lpfc_sli_process_unsol_iocb(phba, pring, &rspiocbq);
4136 writel(pring->sli.sli3.rspidx,
4137 &phba->host_gp[pring->ringno].rspGetInx);
4139 if (pring->sli.sli3.rspidx == portRspPut)
4144 pring->stats.iocb_rsp_full++;
4145 status = ((CA_R0ATT | CA_R0RE_RSP) << (pring->ringno * 4));
4149 if ((mask & HA_R0CE_RSP) && (pring->flag & LPFC_CALL_RING_AVAILABLE)) {
4150 pring->flag &= ~LPFC_CALL_RING_AVAILABLE;
4151 pring->stats.iocb_cmd_empty++;
4154 pring->sli.sli3.local_getidx = le32_to_cpu(pgp->cmdGetInx);
4155 lpfc_sli_resume_iocb(phba, pring);
4157 if ((pring->lpfc_sli_cmd_available))
4158 (pring->lpfc_sli_cmd_available) (phba, pring);
4170 * @pring: Pointer to driver SLI ring object.
4186 lpfc_sli_sp_handle_rspiocb(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
4204 list_add_tail(&rspiocbp->list, &pring->iocb_continueq);
4205 pring->iocb_continueq_cnt++;
4212 saveq = list_get_first(&pring->iocb_continueq,
4214 list_del_init(&pring->iocb_continueq);
4215 pring->iocb_continueq_cnt = 0;
4217 pring->stats.iocb_rsp++;
4242 pring->ringno, ulp_status,
4264 pring->ringno,
4284 rc = lpfc_sli_process_sol_iocb(phba, pring, saveq);
4289 rc = lpfc_sli_process_unsol_iocb(phba, pring, saveq);
4297 cmdiocb = lpfc_sli_iocbq_lookup(phba, pring,
4350 * @pring: Pointer to driver SLI ring object.
4358 struct lpfc_sli_ring *pring, uint32_t mask)
4360 phba->lpfc_sli_handle_slow_ring_event(phba, pring, mask);
4366 * @pring: Pointer to driver SLI ring object.
4376 struct lpfc_sli_ring *pring, uint32_t mask)
4386 pgp = &phba->port_gp[pring->ringno];
4388 pring->stats.iocb_event++;
4394 portRspMax = pring->sli.sli3.numRiocb;
4404 pring->ringno, portRspPut, portRspMax);
4416 while (pring->sli.sli3.rspidx != portRspPut) {
4430 entry = lpfc_resp_iocb(phba, pring);
4444 if (++pring->sli.sli3.rspidx >= portRspMax)
4445 pring->sli.sli3.rspidx = 0;
4447 if (pring->ringno == LPFC_ELS_RING) {
4455 writel(pring->sli.sli3.rspidx,
4456 &phba->host_gp[pring->ringno].rspGetInx);
4460 rspiocbp = lpfc_sli_sp_handle_rspiocb(phba, pring, rspiocbp);
4468 if (pring->sli.sli3.rspidx == portRspPut) {
4471 } /* while (pring->sli.sli3.rspidx != portRspPut) */
4475 pring->stats.iocb_rsp_full++;
4477 status = ((CA_R0ATT | CA_R0RE_RSP) << (pring->ringno * 4));
4481 if ((mask & HA_R0CE_RSP) && (pring->flag & LPFC_CALL_RING_AVAILABLE)) {
4482 pring->flag &= ~LPFC_CALL_RING_AVAILABLE;
4483 pring->stats.iocb_cmd_empty++;
4486 pring->sli.sli3.local_getidx = le32_to_cpu(pgp->cmdGetInx);
4487 lpfc_sli_resume_iocb(phba, pring);
4489 if ((pring->lpfc_sli_cmd_available))
4490 (pring->lpfc_sli_cmd_available) (phba, pring);
4501 * @pring: Pointer to driver SLI ring object.
4512 struct lpfc_sli_ring *pring, uint32_t mask)
4538 lpfc_sli_sp_handle_rspiocb(phba, pring,
4562 * @pring: Pointer to driver SLI ring object.
4570 lpfc_sli_abort_iocb_ring(struct lpfc_hba *phba, struct lpfc_sli_ring *pring)
4577 if (pring->ringno == LPFC_ELS_RING) {
4586 spin_lock_irq(&pring->ring_lock);
4587 list_splice_init(&pring->txq, &tx_completions);
4588 pring->txq_cnt = 0;
4591 list_splice_init(&pring->txcmplq,
4596 &pring->txcmplq, list)
4597 lpfc_sli_issue_abort_iotag(phba, pring,
4600 spin_unlock_irq(&pring->ring_lock);
4603 list_splice_init(&pring->txq, &tx_completions);
4604 pring->txq_cnt = 0;
4607 list_splice_init(&pring->txcmplq, &txcmplq_completions);
4611 &pring->txcmplq, list)
4612 lpfc_sli_issue_abort_iotag(phba, pring,
4644 struct lpfc_sli_ring *pring;
4650 pring = phba->sli4_hba.hdwq[i].io_wq->pring;
4651 lpfc_sli_abort_iocb_ring(phba, pring);
4654 pring = &psli->sli3_ring[LPFC_FCP_RING];
4655 lpfc_sli_abort_iocb_ring(phba, pring);
4675 struct lpfc_sli_ring *pring;
4687 pring = phba->sli4_hba.hdwq[i].io_wq->pring;
4689 spin_lock_irq(&pring->ring_lock);
4691 list_splice_init(&pring->txq, &txq);
4693 &pring->txcmplq, list)
4696 list_splice_init(&pring->txcmplq, &txcmplq);
4697 pring->txq_cnt = 0;
4698 pring->txcmplq_cnt = 0;
4699 spin_unlock_irq(&pring->ring_lock);
4713 pring = &psli->sli3_ring[LPFC_FCP_RING];
4717 list_splice_init(&pring->txq, &txq);
4719 &pring->txcmplq, list)
4722 list_splice_init(&pring->txcmplq, &txcmplq);
4723 pring->txq_cnt = 0;
4724 pring->txcmplq_cnt = 0;
5076 struct lpfc_sli_ring *pring;
5119 pring = &psli->sli3_ring[i];
5120 pring->flag = 0;
5121 pring->sli.sli3.rspidx = 0;
5122 pring->sli.sli3.next_cmdidx = 0;
5123 pring->sli.sli3.local_getidx = 0;
5124 pring->sli.sli3.cmdidx = 0;
5125 pring->missbufcnt = 0;
10344 * @pring: Pointer to driver SLI ring object.
10353 __lpfc_sli_ringtx_put(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
10357 lockdep_assert_held(&pring->ring_lock);
10361 list_add_tail(&piocb->list, &pring->txq);
10367 * @pring: Pointer to driver SLI ring object.
10382 lpfc_sli_next_iocb(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
10389 nextiocb = lpfc_sli_ringtx_get(phba, pring);
10426 struct lpfc_sli_ring *pring = &phba->sli.sli3_ring[ring_number];
10459 if (unlikely(pring->flag & LPFC_STOP_IOCB_EVENT))
10489 } else if (unlikely(pring->ringno == LPFC_FCP_RING &&
10494 while ((iocb = lpfc_sli_next_iocb_slot(phba, pring)) &&
10495 (nextiocb = lpfc_sli_next_iocb(phba, pring, &piocb)))
10496 lpfc_sli_submit_iocb(phba, pring, iocb, nextiocb);
10499 lpfc_sli_update_ring(phba, pring);
10501 lpfc_sli_update_full_ring(phba, pring);
10509 pring->stats.iocb_cmd_delay++;
10514 __lpfc_sli_ringtx_put(phba, pring, piocb);
10649 struct lpfc_sli_ring *pring;
10661 pring = wq->pring;
10667 lockdep_assert_held(&pring->ring_lock);
10677 pring,
10722 lpfc_sli_ringtxcmpl_put(phba, pring, piocb);
11236 return phba->sli4_hba.hdwq[piocb->hba_wqidx].io_wq->pring;
11241 return phba->sli4_hba.els_wq->pring;
11287 struct lpfc_sli_ring *pring;
11301 pring = lpfc_sli4_calc_ring(phba, piocb);
11302 if (unlikely(pring == NULL))
11305 spin_lock_irqsave(&pring->ring_lock, iflags);
11307 spin_unlock_irqrestore(&pring->ring_lock, iflags);
11334 struct lpfc_sli_ring *pring;
11341 pring = &psli->sli3_ring[LPFC_FCP_RING];
11342 pring->sli.sli3.numCiocb -= SLI2_IOCB_CMD_R1XTRA_ENTRIES;
11343 pring->sli.sli3.numRiocb -= SLI2_IOCB_RSP_R1XTRA_ENTRIES;
11344 pring->sli.sli3.numCiocb -= SLI2_IOCB_CMD_R3XTRA_ENTRIES;
11345 pring->sli.sli3.numRiocb -= SLI2_IOCB_RSP_R3XTRA_ENTRIES;
11348 pring = &psli->sli3_ring[LPFC_EXTRA_RING];
11350 pring->sli.sli3.numCiocb += SLI2_IOCB_CMD_R1XTRA_ENTRIES;
11351 pring->sli.sli3.numRiocb += SLI2_IOCB_RSP_R1XTRA_ENTRIES;
11352 pring->sli.sli3.numCiocb += SLI2_IOCB_CMD_R3XTRA_ENTRIES;
11353 pring->sli.sli3.numRiocb += SLI2_IOCB_RSP_R3XTRA_ENTRIES;
11356 pring->iotag_max = 4096;
11357 pring->num_mask = 1;
11358 pring->prt[0].profile = 0; /* Mask 0 */
11359 pring->prt[0].rctl = phba->cfg_multi_ring_rctl;
11360 pring->prt[0].type = phba->cfg_multi_ring_type;
11361 pring->prt[0].lpfc_sli_rcv_unsol_event = NULL;
11485 * @pring: Pointer to driver SLI ring object.
11497 struct lpfc_sli_ring * pring, struct lpfc_iocbq * iocbq)
11545 pring->ringno, icmd->un.asyncstat.evt_code,
11570 struct lpfc_sli_ring *pring;
11572 pring = phba->sli4_hba.els_wq->pring;
11573 pring->num_mask = LPFC_MAX_RING_MASK;
11574 pring->prt[0].profile = 0; /* Mask 0 */
11575 pring->prt[0].rctl = FC_RCTL_ELS_REQ;
11576 pring->prt[0].type = FC_TYPE_ELS;
11577 pring->prt[0].lpfc_sli_rcv_unsol_event =
11579 pring->prt[1].profile = 0; /* Mask 1 */
11580 pring->prt[1].rctl = FC_RCTL_ELS_REP;
11581 pring->prt[1].type = FC_TYPE_ELS;
11582 pring->prt[1].lpfc_sli_rcv_unsol_event =
11584 pring->prt[2].profile = 0; /* Mask 2 */
11586 pring->prt[2].rctl = FC_RCTL_DD_UNSOL_CTL;
11588 pring->prt[2].type = FC_TYPE_CT;
11589 pring->prt[2].lpfc_sli_rcv_unsol_event =
11591 pring->prt[3].profile = 0; /* Mask 3 */
11593 pring->prt[3].rctl = FC_RCTL_DD_SOL_CTL;
11595 pring->prt[3].type = FC_TYPE_CT;
11596 pring->prt[3].lpfc_sli_rcv_unsol_event =
11617 struct lpfc_sli_ring *pring;
11627 pring = &psli->sli3_ring[i];
11631 pring->sli.sli3.numCiocb = SLI2_IOCB_CMD_R0_ENTRIES;
11632 pring->sli.sli3.numRiocb = SLI2_IOCB_RSP_R0_ENTRIES;
11633 pring->sli.sli3.numCiocb +=
11635 pring->sli.sli3.numRiocb +=
11637 pring->sli.sli3.numCiocb +=
11639 pring->sli.sli3.numRiocb +=
11641 pring->sli.sli3.sizeCiocb = (phba->sli_rev == 3) ?
11644 pring->sli.sli3.sizeRiocb = (phba->sli_rev == 3) ?
11647 pring->iotag_ctr = 0;
11648 pring->iotag_max =
11650 pring->fast_iotag = pring->iotag_max;
11651 pring->num_mask = 0;
11655 pring->sli.sli3.numCiocb = SLI2_IOCB_CMD_R1_ENTRIES;
11656 pring->sli.sli3.numRiocb = SLI2_IOCB_RSP_R1_ENTRIES;
11657 pring->sli.sli3.sizeCiocb = (phba->sli_rev == 3) ?
11660 pring->sli.sli3.sizeRiocb = (phba->sli_rev == 3) ?
11663 pring->iotag_max = phba->cfg_hba_queue_depth;
11664 pring->num_mask = 0;
11668 pring->sli.sli3.numCiocb = SLI2_IOCB_CMD_R2_ENTRIES;
11669 pring->sli.sli3.numRiocb = SLI2_IOCB_RSP_R2_ENTRIES;
11670 pring->sli.sli3.sizeCiocb = (phba->sli_rev == 3) ?
11673 pring->sli.sli3.sizeRiocb = (phba->sli_rev == 3) ?
11676 pring->fast_iotag = 0;
11677 pring->iotag_ctr = 0;
11678 pring->iotag_max = 4096;
11679 pring->lpfc_sli_rcv_async_status =
11681 pring->num_mask = LPFC_MAX_RING_MASK;
11682 pring->prt[0].profile = 0; /* Mask 0 */
11683 pring->prt[0].rctl = FC_RCTL_ELS_REQ;
11684 pring->prt[0].type = FC_TYPE_ELS;
11685 pring->prt[0].lpfc_sli_rcv_unsol_event =
11687 pring->prt[1].profile = 0; /* Mask 1 */
11688 pring->prt[1].rctl = FC_RCTL_ELS_REP;
11689 pring->prt[1].type = FC_TYPE_ELS;
11690 pring->prt[1].lpfc_sli_rcv_unsol_event =
11692 pring->prt[2].profile = 0; /* Mask 2 */
11694 pring->prt[2].rctl = FC_RCTL_DD_UNSOL_CTL;
11696 pring->prt[2].type = FC_TYPE_CT;
11697 pring->prt[2].lpfc_sli_rcv_unsol_event =
11699 pring->prt[3].profile = 0; /* Mask 3 */
11701 pring->prt[3].rctl = FC_RCTL_DD_SOL_CTL;
11703 pring->prt[3].type = FC_TYPE_CT;
11704 pring->prt[3].lpfc_sli_rcv_unsol_event =
11708 totiocbsize += (pring->sli.sli3.numCiocb *
11709 pring->sli.sli3.sizeCiocb) +
11710 (pring->sli.sli3.numRiocb * pring->sli.sli3.sizeRiocb);
11740 struct lpfc_sli_ring *pring;
11749 pring = phba->sli4_hba.hdwq[i].io_wq->pring;
11750 pring->flag = 0;
11751 pring->ringno = LPFC_FCP_RING;
11752 pring->txcmplq_cnt = 0;
11753 INIT_LIST_HEAD(&pring->txq);
11754 INIT_LIST_HEAD(&pring->txcmplq);
11755 INIT_LIST_HEAD(&pring->iocb_continueq);
11756 spin_lock_init(&pring->ring_lock);
11758 pring = phba->sli4_hba.els_wq->pring;
11759 pring->flag = 0;
11760 pring->ringno = LPFC_ELS_RING;
11761 pring->txcmplq_cnt = 0;
11762 INIT_LIST_HEAD(&pring->txq);
11763 INIT_LIST_HEAD(&pring->txcmplq);
11764 INIT_LIST_HEAD(&pring->iocb_continueq);
11765 spin_lock_init(&pring->ring_lock);
11768 pring = phba->sli4_hba.nvmels_wq->pring;
11769 pring->flag = 0;
11770 pring->ringno = LPFC_ELS_RING;
11771 pring->txcmplq_cnt = 0;
11772 INIT_LIST_HEAD(&pring->txq);
11773 INIT_LIST_HEAD(&pring->txcmplq);
11774 INIT_LIST_HEAD(&pring->iocb_continueq);
11775 spin_lock_init(&pring->ring_lock);
11796 struct lpfc_sli_ring *pring;
11805 pring = &psli->sli3_ring[i];
11806 pring->ringno = i;
11807 pring->sli.sli3.next_cmdidx = 0;
11808 pring->sli.sli3.local_getidx = 0;
11809 pring->sli.sli3.cmdidx = 0;
11810 INIT_LIST_HEAD(&pring->iocb_continueq);
11811 INIT_LIST_HEAD(&pring->iocb_continue_saveq);
11812 INIT_LIST_HEAD(&pring->postbufq);
11813 pring->flag = 0;
11814 INIT_LIST_HEAD(&pring->txq);
11815 INIT_LIST_HEAD(&pring->txcmplq);
11816 spin_lock_init(&pring->ring_lock);
11898 struct lpfc_sli_ring *pring;
11915 pring = &psli->sli3_ring[i];
11916 prev_pring_flag = pring->flag;
11918 if (pring->ringno == LPFC_ELS_RING) {
11919 pring->flag |= LPFC_DEFERRED_RING_EVENT;
11924 &pring->txq, list) {
11930 &pring->txcmplq, list) {
11933 lpfc_sli_issue_abort_iotag(phba, pring, iocb,
11936 pring->flag = prev_pring_flag;
11940 pring = qp->pring;
11941 if (!pring)
11943 if (pring == phba->sli4_hba.els_wq->pring) {
11944 pring->flag |= LPFC_DEFERRED_RING_EVENT;
11948 prev_pring_flag = pring->flag;
11949 spin_lock(&pring->ring_lock);
11951 &pring->txq, list) {
11956 spin_unlock(&pring->ring_lock);
11958 &pring->txcmplq, list) {
11961 lpfc_sli_issue_abort_iotag(phba, pring, iocb,
11964 pring->flag = prev_pring_flag;
11999 struct lpfc_sli_ring *pring;
12022 pring = &psli->sli3_ring[i];
12024 if (pring->ringno == LPFC_ELS_RING) {
12025 pring->flag |= LPFC_DEFERRED_RING_EVENT;
12029 list_splice_init(&pring->txq, &completions);
12033 pring = qp->pring;
12034 if (!pring)
12036 spin_lock(&pring->ring_lock);
12037 list_splice_init(&pring->txq, &completions);
12038 spin_unlock(&pring->ring_lock);
12039 if (pring == phba->sli4_hba.els_wq->pring) {
12040 pring->flag |= LPFC_DEFERRED_RING_EVENT;
12138 * @pring: Pointer to driver SLI ring object.
12146 lpfc_sli_ringpostbuf_put(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
12152 list_add_tail(&mp->list, &pring->postbufq);
12153 pring->postbufq_cnt++;
12186 * @pring: Pointer to driver SLI ring object.
12189 * Buffers posted using CMD_QUE_XRI64_CX iocb are in pring->postbufq
12192 * This function searches the pring->postbufq list using the tag
12199 lpfc_sli_ring_taggedbuf_get(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
12203 struct list_head *slp = &pring->postbufq;
12207 list_for_each_entry_safe(mp, next_mp, &pring->postbufq, list) {
12210 pring->postbufq_cnt--;
12220 pring->ringno, (unsigned long) tag,
12221 slp->next, slp->prev, pring->postbufq_cnt);
12229 * @pring: Pointer to driver SLI ring object.
12243 lpfc_sli_ringpostbuf_get(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
12247 struct list_head *slp = &pring->postbufq;
12251 list_for_each_entry_safe(mp, next_mp, &pring->postbufq, list) {
12254 pring->postbufq_cnt--;
12264 pring->ringno, (unsigned long long)phys,
12265 slp->next, slp->prev, pring->postbufq_cnt);
12379 * @pring: Pointer to driver SLI ring object.
12392 lpfc_sli_issue_abort_iotag(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
12415 if (!pring) {
12428 pring->ringno == LPFC_ELS_RING) {
12451 if (pring->ringno == LPFC_ELS_RING) {
12488 pring = lpfc_sli4_calc_ring(phba, abtsiocbp);
12489 if (unlikely(pring == NULL))
12492 spin_lock_irqsave(&pring->ring_lock, iflags);
12493 retval = __lpfc_sli_issue_iocb(phba, pring->ringno,
12495 spin_unlock_irqrestore(&pring->ring_lock, iflags);
12497 retval = __lpfc_sli_issue_iocb(phba, pring->ringno,
12533 struct lpfc_sli_ring *pring;
12539 pring = &psli->sli3_ring[i];
12540 lpfc_sli_abort_iocb_ring(phba, pring);
12545 pring = qp->pring;
12546 if (!pring)
12548 lpfc_sli_abort_iocb_ring(phba, pring);
12757 * The pring used for SLI3 is sli3_ring[LPFC_FCP_RING], for SLI4
12767 struct lpfc_sli_ring *pring = NULL;
12789 pring = &phba->sli.sli3_ring[LPFC_FCP_RING];
12791 pring = lpfc_sli4_calc_ring(phba, iocbq);
12793 ret_val = lpfc_sli_issue_abort_iotag(phba, pring, iocbq,
12806 * @pring: Pointer to driver SLI ring object.
12830 lpfc_sli_abort_taskmgmt(struct lpfc_vport *vport, struct lpfc_sli_ring *pring,
12874 phba->sli4_hba.hdwq[iocbq->hba_wqidx].io_wq->pring;
12910 if (pring->ringno == LPFC_ELS_RING) {
12954 ret_val = __lpfc_sli_issue_iocb(phba, pring->ringno,
13115 struct lpfc_sli_ring *pring;
13122 pring = lpfc_sli4_calc_ring(phba, piocb);
13124 pring = &phba->sli.sli3_ring[ring_number];
13189 list_for_each_entry(iocb, &pring->txq, list) {
13192 list_for_each_entry(iocb, &pring->txcmplq, list) {
13941 struct lpfc_sli_ring *pring;
13986 pring = &phba->sli.sli3_ring[LPFC_FCP_RING];
13988 lpfc_sli_handle_fast_ring_event(phba, pring, status);
14174 struct lpfc_sli_ring *pring;
14179 pring = lpfc_phba_elsring(phba);
14180 if (unlikely(!pring))
14184 spin_lock_irqsave(&pring->ring_lock, iflags);
14185 pring->stats.iocb_event++;
14187 cmdiocbq = lpfc_sli_iocbq_lookup_by_tag(phba, pring,
14190 spin_unlock_irqrestore(&pring->ring_lock, iflags);
14204 lpfc_sli_ringtxcmpl_put(phba, pring, cmdiocbq);
14205 spin_unlock_irqrestore(&pring->ring_lock, iflags);
14471 struct lpfc_sli_ring *pring = cq->pring;
14489 if (!list_empty(&pring->txq))
14491 if (!list_empty(&pring->txcmplq))
15036 struct lpfc_sli_ring *pring = cq->pring;
15061 spin_lock_irqsave(&pring->ring_lock, iflags);
15062 pring->stats.iocb_event++;
15063 cmdiocbq = lpfc_sli_iocbq_lookup_by_tag(phba, pring,
15065 spin_unlock_irqrestore(&pring->ring_lock, iflags);
17094 wq->pring = kzalloc(sizeof(struct lpfc_sli_ring), GFP_KERNEL);
17095 if (wq->pring == NULL) {
17815 kfree(wq->pring);
17816 wq->pring = NULL;
19284 phba->sli4_hba.els_wq->pring,
21109 struct lpfc_sli_ring *pring;
21122 pring = wq->pring;
21127 pring = lpfc_phba_elsring(phba);
21130 if (unlikely(!pring) || list_empty(&pring->txq))
21133 spin_lock_irqsave(&pring->ring_lock, iflags);
21134 list_for_each_entry(piocbq, &pring->txq, list) {
21138 if (txq_cnt > pring->txq_max)
21139 pring->txq_max = txq_cnt;
21141 spin_unlock_irqrestore(&pring->ring_lock, iflags);
21143 while (!list_empty(&pring->txq)) {
21144 spin_lock_irqsave(&pring->ring_lock, iflags);
21146 piocbq = lpfc_sli_ringtx_get(phba, pring);
21148 spin_unlock_irqrestore(&pring->ring_lock, iflags);
21156 ret = __lpfc_sli_issue_iocb(phba, pring->ringno, piocbq, 0);
21174 spin_unlock_irqrestore(&pring->ring_lock, iflags);
21324 struct lpfc_sli_ring *pring;
21330 pring = phba->sli4_hba.nvmels_wq->pring;
21331 lpfc_qp_spin_lock_irqsave(&pring->ring_lock, iflags,
21335 spin_unlock_irqrestore(&pring->ring_lock, iflags);
21341 spin_unlock_irqrestore(&pring->ring_lock, iflags);
21348 spin_unlock_irqrestore(&pring->ring_lock, iflags);
21352 lpfc_sli_ringtxcmpl_put(phba, pring, pwqe);
21353 spin_unlock_irqrestore(&pring->ring_lock, iflags);
21363 pring = wq->pring;
21367 lpfc_qp_spin_lock_irqsave(&pring->ring_lock, iflags,
21371 spin_unlock_irqrestore(&pring->ring_lock, iflags);
21374 lpfc_sli_ringtxcmpl_put(phba, pring, pwqe);
21375 spin_unlock_irqrestore(&pring->ring_lock, iflags);
21385 pring = wq->pring;
21397 lpfc_qp_spin_lock_irqsave(&pring->ring_lock, iflags,
21401 spin_unlock_irqrestore(&pring->ring_lock, iflags);
21404 lpfc_sli_ringtxcmpl_put(phba, pring, pwqe);
21405 spin_unlock_irqrestore(&pring->ring_lock, iflags);
21524 txcmplq_cnt = qp->io_wq->pring->txcmplq_cnt;
21594 txcmplq_cnt = qp->io_wq->pring->txcmplq_cnt;
21878 txcmplq_cnt = qp->io_wq->pring->txcmplq_cnt;