OSDN Git Service

virtio: Add virtio_gpu_object_kunmap()
authorEzequiel Garcia <ezequiel@collabora.com>
Tue, 25 Sep 2018 16:16:04 +0000 (18:16 +0200)
committerGerd Hoffmann <kraxel@redhat.com>
Wed, 26 Sep 2018 06:05:05 +0000 (08:05 +0200)
Implement a virtio_gpu_object_kunmap() to unmap the kernel
mapping, and use it in the TTM object destroy path.

Signed-off-by: Ezequiel Garcia <ezequiel@collabora.com>
Link: http://patchwork.freedesktop.org/patch/msgid/20180925161606.17980-2-ezequiel@collabora.com
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
drivers/gpu/drm/virtio/virtgpu_drv.h
drivers/gpu/drm/virtio/virtgpu_object.c

index 253fcf0..6669bf4 100644 (file)
@@ -363,6 +363,7 @@ void virtio_gpu_fence_event_process(struct virtio_gpu_device *vdev,
 int virtio_gpu_object_create(struct virtio_gpu_device *vgdev,
                             unsigned long size, bool kernel, bool pinned,
                             struct virtio_gpu_object **bo_ptr);
+void virtio_gpu_object_kunmap(struct virtio_gpu_object *bo);
 int virtio_gpu_object_kmap(struct virtio_gpu_object *bo, void **ptr);
 int virtio_gpu_object_get_sg_table(struct virtio_gpu_device *qdev,
                                   struct virtio_gpu_object *bo);
index 9f2f470..113eae0 100644 (file)
@@ -37,6 +37,8 @@ static void virtio_gpu_ttm_bo_destroy(struct ttm_buffer_object *tbo)
                virtio_gpu_cmd_unref_resource(vgdev, bo->hw_res_handle);
        if (bo->pages)
                virtio_gpu_object_free_sg_table(bo);
+       if (bo->vmap)
+               virtio_gpu_object_kunmap(bo);
        drm_gem_object_release(&bo->gem_base);
        kfree(bo);
 }
@@ -99,6 +101,12 @@ int virtio_gpu_object_create(struct virtio_gpu_device *vgdev,
        return 0;
 }
 
+void virtio_gpu_object_kunmap(struct virtio_gpu_object *bo)
+{
+       bo->vmap = NULL;
+       ttm_bo_kunmap(&bo->kmap);
+}
+
 int virtio_gpu_object_kmap(struct virtio_gpu_object *bo, void **ptr)
 {
        bool is_iomem;