mirror of
https://github.com/torvalds/linux.git
synced 2024-11-01 13:03:25 +01:00
accel/qaic: Fix the for loop used to walk SG table
Only for_each_sgtable_dma_sg() should be used to walk through a SG table to grab correct bus address and length pair after calling DMA MAP API on a SG table as DMA MAP APIs updates the SG table and for_each_sgtable_sg() walks through the original SG table. Fixes:ff13be8303
("accel/qaic: Add datapath") Fixes:129776ac2e
("accel/qaic: Add control path") Signed-off-by: Pranjal Ramajor Asha Kanojiya <quic_pkanojiy@quicinc.com> Reviewed-by: Jeffrey Hugo <quic_jhugo@quicinc.com> Signed-off-by: Jeffrey Hugo <quic_jhugo@quicinc.com> Reviewed-by: Jacek Lawrynowicz <jacek.lawrynowicz@linux.intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20241004193252.3888544-1-quic_jhugo@quicinc.com
This commit is contained in:
parent
f07fd958a4
commit
c5e8e93897
2 changed files with 4 additions and 4 deletions
|
@ -496,7 +496,7 @@ static int encode_addr_size_pairs(struct dma_xfer *xfer, struct wrapper_list *wr
|
||||||
nents = sgt->nents;
|
nents = sgt->nents;
|
||||||
nents_dma = nents;
|
nents_dma = nents;
|
||||||
*size = QAIC_MANAGE_EXT_MSG_LENGTH - msg_hdr_len - sizeof(**out_trans);
|
*size = QAIC_MANAGE_EXT_MSG_LENGTH - msg_hdr_len - sizeof(**out_trans);
|
||||||
for_each_sgtable_sg(sgt, sg, i) {
|
for_each_sgtable_dma_sg(sgt, sg, i) {
|
||||||
*size -= sizeof(*asp);
|
*size -= sizeof(*asp);
|
||||||
/* Save 1K for possible follow-up transactions. */
|
/* Save 1K for possible follow-up transactions. */
|
||||||
if (*size < SZ_1K) {
|
if (*size < SZ_1K) {
|
||||||
|
|
|
@ -184,7 +184,7 @@ static int clone_range_of_sgt_for_slice(struct qaic_device *qdev, struct sg_tabl
|
||||||
nents = 0;
|
nents = 0;
|
||||||
|
|
||||||
size = size ? size : PAGE_SIZE;
|
size = size ? size : PAGE_SIZE;
|
||||||
for (sg = sgt_in->sgl; sg; sg = sg_next(sg)) {
|
for_each_sgtable_dma_sg(sgt_in, sg, j) {
|
||||||
len = sg_dma_len(sg);
|
len = sg_dma_len(sg);
|
||||||
|
|
||||||
if (!len)
|
if (!len)
|
||||||
|
@ -221,7 +221,7 @@ static int clone_range_of_sgt_for_slice(struct qaic_device *qdev, struct sg_tabl
|
||||||
|
|
||||||
/* copy relevant sg node and fix page and length */
|
/* copy relevant sg node and fix page and length */
|
||||||
sgn = sgf;
|
sgn = sgf;
|
||||||
for_each_sgtable_sg(sgt, sg, j) {
|
for_each_sgtable_dma_sg(sgt, sg, j) {
|
||||||
memcpy(sg, sgn, sizeof(*sg));
|
memcpy(sg, sgn, sizeof(*sg));
|
||||||
if (sgn == sgf) {
|
if (sgn == sgf) {
|
||||||
sg_dma_address(sg) += offf;
|
sg_dma_address(sg) += offf;
|
||||||
|
@ -301,7 +301,7 @@ static int encode_reqs(struct qaic_device *qdev, struct bo_slice *slice,
|
||||||
* fence.
|
* fence.
|
||||||
*/
|
*/
|
||||||
dev_addr = req->dev_addr;
|
dev_addr = req->dev_addr;
|
||||||
for_each_sgtable_sg(slice->sgt, sg, i) {
|
for_each_sgtable_dma_sg(slice->sgt, sg, i) {
|
||||||
slice->reqs[i].cmd = cmd;
|
slice->reqs[i].cmd = cmd;
|
||||||
slice->reqs[i].src_addr = cpu_to_le64(slice->dir == DMA_TO_DEVICE ?
|
slice->reqs[i].src_addr = cpu_to_le64(slice->dir == DMA_TO_DEVICE ?
|
||||||
sg_dma_address(sg) : dev_addr);
|
sg_dma_address(sg) : dev_addr);
|
||||||
|
|
Loading…
Reference in a new issue