On Tue, Sep 08, 2020 at 08:47:41AM +0200, Gerd Hoffmann wrote: > These days dma ops can be overridden per device, and the virtio core
"can be overridden" or "are"? The comment above vring_use_dma_api() suggests that's not yet done. If that's wrong then I think updating the comment would be really good. -Daniel > uses that to handle the dma quirks transparently for the rest of the > kernel. So we can drop the virtio_has_dma_quirk() checks, just use > the dma api unconditionally and depend on the virtio core having setup > dma_ops as needed. > > Signed-off-by: Gerd Hoffmann <kra...@redhat.com> > --- > drivers/gpu/drm/virtio/virtgpu_object.c | 19 ++++++------------- > drivers/gpu/drm/virtio/virtgpu_vq.c | 16 ++++++---------- > 2 files changed, 12 insertions(+), 23 deletions(-) > > diff --git a/drivers/gpu/drm/virtio/virtgpu_object.c > b/drivers/gpu/drm/virtio/virtgpu_object.c > index 729f98ad7c02..9c35ce64ff9e 100644 > --- a/drivers/gpu/drm/virtio/virtgpu_object.c > +++ b/drivers/gpu/drm/virtio/virtgpu_object.c > @@ -141,7 +141,6 @@ static int virtio_gpu_object_shmem_init(struct > virtio_gpu_device *vgdev, > struct virtio_gpu_mem_entry **ents, > unsigned int *nents) > { > - bool use_dma_api = !virtio_has_dma_quirk(vgdev->vdev); > struct virtio_gpu_object_shmem *shmem = to_virtio_gpu_shmem(bo); > struct scatterlist *sg; > int si, ret; > @@ -162,15 +161,11 @@ static int virtio_gpu_object_shmem_init(struct > virtio_gpu_device *vgdev, > return -EINVAL; > } > > - if (use_dma_api) { > - shmem->mapped = dma_map_sg(vgdev->vdev->dev.parent, > - shmem->pages->sgl, > - shmem->pages->nents, > - DMA_TO_DEVICE); > - *nents = shmem->mapped; > - } else { > - *nents = shmem->pages->nents; > - } > + shmem->mapped = dma_map_sg(vgdev->vdev->dev.parent, > + shmem->pages->sgl, > + shmem->pages->nents, > + DMA_TO_DEVICE); > + *nents = shmem->mapped; > > *ents = kmalloc_array(*nents, sizeof(struct virtio_gpu_mem_entry), > GFP_KERNEL); > @@ -180,9 +175,7 @@ static int virtio_gpu_object_shmem_init(struct > virtio_gpu_device *vgdev, > } > > for_each_sg(shmem->pages->sgl, sg, *nents, si) { > - (*ents)[si].addr = cpu_to_le64(use_dma_api > - ? sg_dma_address(sg) > - : sg_phys(sg)); > + (*ents)[si].addr = cpu_to_le64(sg_dma_address(sg)); > (*ents)[si].length = cpu_to_le32(sg->length); > (*ents)[si].padding = 0; > } > diff --git a/drivers/gpu/drm/virtio/virtgpu_vq.c > b/drivers/gpu/drm/virtio/virtgpu_vq.c > index c93c2db35aaf..1c1d2834547d 100644 > --- a/drivers/gpu/drm/virtio/virtgpu_vq.c > +++ b/drivers/gpu/drm/virtio/virtgpu_vq.c > @@ -599,13 +599,11 @@ void virtio_gpu_cmd_transfer_to_host_2d(struct > virtio_gpu_device *vgdev, > struct virtio_gpu_object *bo = gem_to_virtio_gpu_obj(objs->objs[0]); > struct virtio_gpu_transfer_to_host_2d *cmd_p; > struct virtio_gpu_vbuffer *vbuf; > - bool use_dma_api = !virtio_has_dma_quirk(vgdev->vdev); > struct virtio_gpu_object_shmem *shmem = to_virtio_gpu_shmem(bo); > > - if (use_dma_api) > - dma_sync_sg_for_device(vgdev->vdev->dev.parent, > - shmem->pages->sgl, shmem->pages->nents, > - DMA_TO_DEVICE); > + dma_sync_sg_for_device(vgdev->vdev->dev.parent, > + shmem->pages->sgl, shmem->pages->nents, > + DMA_TO_DEVICE); > > cmd_p = virtio_gpu_alloc_cmd(vgdev, &vbuf, sizeof(*cmd_p)); > memset(cmd_p, 0, sizeof(*cmd_p)); > @@ -1015,13 +1013,11 @@ void virtio_gpu_cmd_transfer_to_host_3d(struct > virtio_gpu_device *vgdev, > struct virtio_gpu_object *bo = gem_to_virtio_gpu_obj(objs->objs[0]); > struct virtio_gpu_transfer_host_3d *cmd_p; > struct virtio_gpu_vbuffer *vbuf; > - bool use_dma_api = !virtio_has_dma_quirk(vgdev->vdev); > struct virtio_gpu_object_shmem *shmem = to_virtio_gpu_shmem(bo); > > - if (use_dma_api) > - dma_sync_sg_for_device(vgdev->vdev->dev.parent, > - shmem->pages->sgl, shmem->pages->nents, > - DMA_TO_DEVICE); > + dma_sync_sg_for_device(vgdev->vdev->dev.parent, > + shmem->pages->sgl, shmem->pages->nents, > + DMA_TO_DEVICE); > > cmd_p = virtio_gpu_alloc_cmd(vgdev, &vbuf, sizeof(*cmd_p)); > memset(cmd_p, 0, sizeof(*cmd_p)); > -- > 2.27.0 > -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch