On 08/21/19 13:12, Gerd Hoffmann wrote: > We must make sure our scatterlist segments are not too big, otherwise > we might see swiotlb failures (happens with sev, also reproducable with > swiotlb=force). > > Suggested-by: Laszlo Ersek <lersek@xxxxxxxxxx> > Signed-off-by: Gerd Hoffmann <kraxel@xxxxxxxxxx> > --- > drivers/gpu/drm/virtio/virtgpu_object.c | 10 ++++++++-- > 1 file changed, 8 insertions(+), 2 deletions(-) > > diff --git a/drivers/gpu/drm/virtio/virtgpu_object.c b/drivers/gpu/drm/virtio/virtgpu_object.c > index b2da31310d24..09b526518f5a 100644 > --- a/drivers/gpu/drm/virtio/virtgpu_object.c > +++ b/drivers/gpu/drm/virtio/virtgpu_object.c > @@ -204,6 +204,7 @@ int virtio_gpu_object_get_sg_table(struct virtio_gpu_device *qdev, > .interruptible = false, > .no_wait_gpu = false > }; > + size_t max_segment; > > /* wtf swapping */ > if (bo->pages) > @@ -215,8 +216,13 @@ int virtio_gpu_object_get_sg_table(struct virtio_gpu_device *qdev, > if (!bo->pages) > goto out; > > - ret = sg_alloc_table_from_pages(bo->pages, pages, nr_pages, 0, > - nr_pages << PAGE_SHIFT, GFP_KERNEL); > + max_segment = virtio_max_dma_size(qdev->vdev); > + max_segment &= PAGE_MASK; > + if (max_segment > SCATTERLIST_MAX_SEGMENT) > + max_segment = SCATTERLIST_MAX_SEGMENT; > + ret = __sg_alloc_table_from_pages(bo->pages, pages, nr_pages, 0, > + nr_pages << PAGE_SHIFT, > + max_segment, GFP_KERNEL); > if (ret) > goto out; > return 0; > Reviewed-by: Laszlo Ersek <lersek@xxxxxxxxxx> Thanks! Laszlo _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel