Hi Am 10.12.19 um 09:57 schrieb Gerd Hoffmann: > virtio-gpu uses cached mappings. shmem helpers use writecombine though. > So roll our own mmap function, wrapping drm_gem_shmem_mmap(), to tweak > vm_page_prot accordingly. > > Reported-by: Gurchetan Singh <gurchetansingh@xxxxxxxxxxxx> > Signed-off-by: Gerd Hoffmann <kraxel@xxxxxxxxxx> > --- > drivers/gpu/drm/virtio/virtgpu_object.c | 18 +++++++++++++++++- > 1 file changed, 17 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/virtio/virtgpu_object.c b/drivers/gpu/drm/virtio/virtgpu_object.c > index 017a9e0fc3bb..158610902054 100644 > --- a/drivers/gpu/drm/virtio/virtgpu_object.c > +++ b/drivers/gpu/drm/virtio/virtgpu_object.c > @@ -75,6 +75,22 @@ static void virtio_gpu_free_object(struct drm_gem_object *obj) > drm_gem_shmem_free_object(obj); > } > > +static int virtio_gpu_gem_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma) > +{ > + pgprot_t prot; > + int ret; > + > + ret = drm_gem_shmem_mmap(obj, vma); > + if (ret < 0) > + return ret; > + > + /* virtio-gpu needs normal caching, so clear writecombine */ > + prot = vm_get_page_prot(vma->vm_flags); > + prot = pgprot_decrypted(prot); > + vma->vm_page_prot = prot; > + return 0; > +} There's similar code in udl, [1] which still uses writecombine for imported buffers. Virtio does not need this? Aside from this, do you think we could handle all special cases within shmem? Best regards Thomas [1] https://cgit.freedesktop.org/drm/drm-tip/tree/drivers/gpu/drm/udl/udl_gem.c?id=28ecf94a6f1072fc4744c06f5b3d267297125b37#n20 > + > static const struct drm_gem_object_funcs virtio_gpu_gem_funcs = { > .free = virtio_gpu_free_object, > .open = virtio_gpu_gem_object_open, > @@ -86,7 +102,7 @@ static const struct drm_gem_object_funcs virtio_gpu_gem_funcs = { > .get_sg_table = drm_gem_shmem_get_sg_table, > .vmap = drm_gem_shmem_vmap, > .vunmap = drm_gem_shmem_vunmap, > - .mmap = &drm_gem_shmem_mmap, > + .mmap = &virtio_gpu_gem_mmap, > }; > > struct drm_gem_object *virtio_gpu_create_object(struct drm_device *dev, > -- Thomas Zimmermann Graphics Driver Developer SUSE Software Solutions Germany GmbH Maxfeldstr. 5, 90409 Nürnberg, Germany (HRB 36809, AG Nürnberg) Geschäftsführer: Felix Imendörffer
Attachment:
signature.asc
Description: OpenPGP digital signature
_______________________________________________ Virtualization mailing list Virtualization@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linuxfoundation.org/mailman/listinfo/virtualization