Merge branch 'for-5.10-drm-sg-fix' of https://github.com/mszyprow/linux into drm-next
Please pull a set of fixes for various DRM drivers that finally resolve incorrect usage of the scatterlists (struct sg_table nents and orig_nents entries), what causes issues when IOMMU is used. Signed-off-by: Dave Airlie <airlied@redhat.com> From: Marek Szyprowski <m.szyprowski@samsung.com> Link: https://patchwork.freedesktop.org/patch/msgid/20200910080505.24456-1-m.szyprowski@samsung.com
Cette révision appartient à :
@@ -48,12 +48,9 @@ static struct sg_table *i915_gem_map_dma_buf(struct dma_buf_attachment *attachme
|
||||
src = sg_next(src);
|
||||
}
|
||||
|
||||
if (!dma_map_sg_attrs(attachment->dev,
|
||||
st->sgl, st->nents, dir,
|
||||
DMA_ATTR_SKIP_CPU_SYNC)) {
|
||||
ret = -ENOMEM;
|
||||
ret = dma_map_sgtable(attachment->dev, st, dir, DMA_ATTR_SKIP_CPU_SYNC);
|
||||
if (ret)
|
||||
goto err_free_sg;
|
||||
}
|
||||
|
||||
return st;
|
||||
|
||||
@@ -73,9 +70,7 @@ static void i915_gem_unmap_dma_buf(struct dma_buf_attachment *attachment,
|
||||
{
|
||||
struct drm_i915_gem_object *obj = dma_buf_to_obj(attachment->dmabuf);
|
||||
|
||||
dma_unmap_sg_attrs(attachment->dev,
|
||||
sg->sgl, sg->nents, dir,
|
||||
DMA_ATTR_SKIP_CPU_SYNC);
|
||||
dma_unmap_sgtable(attachment->dev, sg, dir, DMA_ATTR_SKIP_CPU_SYNC);
|
||||
sg_free_table(sg);
|
||||
kfree(sg);
|
||||
|
||||
|
@@ -28,10 +28,9 @@ static struct sg_table *mock_map_dma_buf(struct dma_buf_attachment *attachment,
|
||||
sg = sg_next(sg);
|
||||
}
|
||||
|
||||
if (!dma_map_sg(attachment->dev, st->sgl, st->nents, dir)) {
|
||||
err = -ENOMEM;
|
||||
err = dma_map_sgtable(attachment->dev, st, dir, 0);
|
||||
if (err)
|
||||
goto err_st;
|
||||
}
|
||||
|
||||
return st;
|
||||
|
||||
@@ -46,7 +45,7 @@ static void mock_unmap_dma_buf(struct dma_buf_attachment *attachment,
|
||||
struct sg_table *st,
|
||||
enum dma_data_direction dir)
|
||||
{
|
||||
dma_unmap_sg(attachment->dev, st->sgl, st->nents, dir);
|
||||
dma_unmap_sgtable(attachment->dev, st, dir, 0);
|
||||
sg_free_table(st);
|
||||
kfree(st);
|
||||
}
|
||||
|
Référencer dans un nouveau ticket
Bloquer un utilisateur