Message ID | 20211013165942.89806-1-logang@deltatee.com (mailing list archive) |
---|---|
State | Accepted |
Delegated to: | Jason Gunthorpe |
Headers | show |
Series | RDMA/core: Set sgtable nents when using ib_dma_virt_map_sg() | expand |
On 10/13/21 9:59 AM, Logan Gunthorpe wrote: > ib_dma_map_sgtable_attrs() should be mapping the sgls and setting nents > but the ib_uses_virt_dma() path falls back to ib_dma_virt_map_sg() > which will not set the nents in the sgtable. > > Check the return value (per the map_sg calling convention) and set > sgt->nents appropriately on success. > > Link: https://lore.kernel.org/all/996fa723-18ef-d35b-c565-c9cb9dc2d5e1@acm.org/T/#u > Reported-by: Bart Van Assche <bvanassche@acm.org> > Signed-off-by: Logan Gunthorpe <logang@deltatee.com> > Tested-by: Bart Van Assche <bvanassche@acm.org> Does this patch need a "Fixes:" tag? Thanks, Bart.
On 2021-10-13 12:33 p.m., Bart Van Assche wrote: > On 10/13/21 9:59 AM, Logan Gunthorpe wrote: >> ib_dma_map_sgtable_attrs() should be mapping the sgls and setting nents >> but the ib_uses_virt_dma() path falls back to ib_dma_virt_map_sg() >> which will not set the nents in the sgtable. >> >> Check the return value (per the map_sg calling convention) and set >> sgt->nents appropriately on success. >> >> Link: >> https://lore.kernel.org/all/996fa723-18ef-d35b-c565-c9cb9dc2d5e1@acm.org/T/#u >> >> Reported-by: Bart Van Assche <bvanassche@acm.org> >> Signed-off-by: Logan Gunthorpe <logang@deltatee.com> >> Tested-by: Bart Van Assche <bvanassche@acm.org> > > Does this patch need a "Fixes:" tag? Right, yeah: Fixes: 79fbd3e1241c ("RDMA: Use the sg_table directly and remove the opencoded version from umem") Logan
On Wed, Oct 13, 2021 at 10:59:42AM -0600, Logan Gunthorpe wrote: > ib_dma_map_sgtable_attrs() should be mapping the sgls and setting nents > but the ib_uses_virt_dma() path falls back to ib_dma_virt_map_sg() > which will not set the nents in the sgtable. > > Check the return value (per the map_sg calling convention) and set > sgt->nents appropriately on success. > > Link: https://lore.kernel.org/all/996fa723-18ef-d35b-c565-c9cb9dc2d5e1@acm.org/T/#u > Reported-by: Bart Van Assche <bvanassche@acm.org> > Signed-off-by: Logan Gunthorpe <logang@deltatee.com> > Tested-by: Bart Van Assche <bvanassche@acm.org> > --- > include/rdma/ib_verbs.h | 7 ++++++- > 1 file changed, 6 insertions(+), 1 deletion(-) Applied to for-next, thanks Jason
diff --git a/include/rdma/ib_verbs.h b/include/rdma/ib_verbs.h index 4b50d9a3018a..4ba642fc8a19 100644 --- a/include/rdma/ib_verbs.h +++ b/include/rdma/ib_verbs.h @@ -4097,8 +4097,13 @@ static inline int ib_dma_map_sgtable_attrs(struct ib_device *dev, enum dma_data_direction direction, unsigned long dma_attrs) { + int nents; + if (ib_uses_virt_dma(dev)) { - ib_dma_virt_map_sg(dev, sgt->sgl, sgt->orig_nents); + nents = ib_dma_virt_map_sg(dev, sgt->sgl, sgt->orig_nents); + if (!nents) + return -EIO; + sgt->nents = nents; return 0; } return dma_map_sgtable(dev->dma_device, sgt, direction, dma_attrs);