Thread (1 message) 1 message, 1 author, 2019-12-11

Re: [PATCH] drm/virtio: fix mmap page attributes

From: Gurchetan Singh <gurchetansingh@chromium.org>
Date: 2019-12-11 01:06:42

On Tue, Dec 10, 2019 at 12:58 AM Gerd Hoffmann [off-list ref] wrote:
quoted hunk
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@chromium.org>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 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;
+}
+
 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,
Do we need vmap/vmunap?  It seems optionable and also uses non-cacheable memory?
quoted hunk
        .vunmap = drm_gem_shmem_vunmap,
-       .mmap = &drm_gem_shmem_mmap,
+       .mmap = &virtio_gpu_gem_mmap,
Why the &virtio_gpu_gem_mmap?  Shouldn't just virtio_gpu_gem_mmap work?


 };

 struct drm_gem_object *virtio_gpu_create_object(struct drm_device *dev,
--
2.18.1
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help