|
@@ -14703,14 +14703,20 @@ lpfc_prep_seq(struct lpfc_vport *vport, struct hbq_dmabuf *seq_dmabuf)
|
|
|
first_iocbq->iocb.unsli3.rcvsli3.vpi =
|
|
|
vport->phba->vpi_ids[vport->vpi];
|
|
|
/* put the first buffer into the first IOCBq */
|
|
|
+ tot_len = bf_get(lpfc_rcqe_length,
|
|
|
+ &seq_dmabuf->cq_event.cqe.rcqe_cmpl);
|
|
|
+
|
|
|
first_iocbq->context2 = &seq_dmabuf->dbuf;
|
|
|
first_iocbq->context3 = NULL;
|
|
|
first_iocbq->iocb.ulpBdeCount = 1;
|
|
|
- first_iocbq->iocb.un.cont64[0].tus.f.bdeSize =
|
|
|
+ if (tot_len > LPFC_DATA_BUF_SIZE)
|
|
|
+ first_iocbq->iocb.un.cont64[0].tus.f.bdeSize =
|
|
|
LPFC_DATA_BUF_SIZE;
|
|
|
+ else
|
|
|
+ first_iocbq->iocb.un.cont64[0].tus.f.bdeSize = tot_len;
|
|
|
+
|
|
|
first_iocbq->iocb.un.rcvels.remoteID = sid;
|
|
|
- tot_len = bf_get(lpfc_rcqe_length,
|
|
|
- &seq_dmabuf->cq_event.cqe.rcqe_cmpl);
|
|
|
+
|
|
|
first_iocbq->iocb.unsli3.rcvsli3.acc_len = tot_len;
|
|
|
}
|
|
|
iocbq = first_iocbq;
|
|
@@ -14726,14 +14732,17 @@ lpfc_prep_seq(struct lpfc_vport *vport, struct hbq_dmabuf *seq_dmabuf)
|
|
|
if (!iocbq->context3) {
|
|
|
iocbq->context3 = d_buf;
|
|
|
iocbq->iocb.ulpBdeCount++;
|
|
|
- pbde = (struct ulp_bde64 *)
|
|
|
- &iocbq->iocb.unsli3.sli3Words[4];
|
|
|
- pbde->tus.f.bdeSize = LPFC_DATA_BUF_SIZE;
|
|
|
-
|
|
|
/* We need to get the size out of the right CQE */
|
|
|
hbq_buf = container_of(d_buf, struct hbq_dmabuf, dbuf);
|
|
|
len = bf_get(lpfc_rcqe_length,
|
|
|
&hbq_buf->cq_event.cqe.rcqe_cmpl);
|
|
|
+ pbde = (struct ulp_bde64 *)
|
|
|
+ &iocbq->iocb.unsli3.sli3Words[4];
|
|
|
+ if (len > LPFC_DATA_BUF_SIZE)
|
|
|
+ pbde->tus.f.bdeSize = LPFC_DATA_BUF_SIZE;
|
|
|
+ else
|
|
|
+ pbde->tus.f.bdeSize = len;
|
|
|
+
|
|
|
iocbq->iocb.unsli3.rcvsli3.acc_len += len;
|
|
|
tot_len += len;
|
|
|
} else {
|
|
@@ -14748,16 +14757,19 @@ lpfc_prep_seq(struct lpfc_vport *vport, struct hbq_dmabuf *seq_dmabuf)
|
|
|
lpfc_in_buf_free(vport->phba, d_buf);
|
|
|
continue;
|
|
|
}
|
|
|
+ /* We need to get the size out of the right CQE */
|
|
|
+ hbq_buf = container_of(d_buf, struct hbq_dmabuf, dbuf);
|
|
|
+ len = bf_get(lpfc_rcqe_length,
|
|
|
+ &hbq_buf->cq_event.cqe.rcqe_cmpl);
|
|
|
iocbq->context2 = d_buf;
|
|
|
iocbq->context3 = NULL;
|
|
|
iocbq->iocb.ulpBdeCount = 1;
|
|
|
- iocbq->iocb.un.cont64[0].tus.f.bdeSize =
|
|
|
+ if (len > LPFC_DATA_BUF_SIZE)
|
|
|
+ iocbq->iocb.un.cont64[0].tus.f.bdeSize =
|
|
|
LPFC_DATA_BUF_SIZE;
|
|
|
+ else
|
|
|
+ iocbq->iocb.un.cont64[0].tus.f.bdeSize = len;
|
|
|
|
|
|
- /* We need to get the size out of the right CQE */
|
|
|
- hbq_buf = container_of(d_buf, struct hbq_dmabuf, dbuf);
|
|
|
- len = bf_get(lpfc_rcqe_length,
|
|
|
- &hbq_buf->cq_event.cqe.rcqe_cmpl);
|
|
|
tot_len += len;
|
|
|
iocbq->iocb.unsli3.rcvsli3.acc_len = tot_len;
|
|
|
|