OSDN Git Service

virtio: Rework virtio_gpu_object_kmap()
[uclinux-h8/linux.git] / drivers / gpu / drm / virtio / virtgpu_object.c
index 9f2f470..eca7655 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,22 +101,23 @@ int virtio_gpu_object_create(struct virtio_gpu_device *vgdev,
        return 0;
 }
 
-int virtio_gpu_object_kmap(struct virtio_gpu_object *bo, void **ptr)
+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)
 {
        bool is_iomem;
        int r;
 
-       if (bo->vmap) {
-               if (ptr)
-                       *ptr = bo->vmap;
-               return 0;
-       }
+       WARN_ON(bo->vmap);
+
        r = ttm_bo_kmap(&bo->tbo, 0, bo->tbo.num_pages, &bo->kmap);
        if (r)
                return r;
        bo->vmap = ttm_kmap_obj_virtual(&bo->kmap, &is_iomem);
-       if (ptr)
-               *ptr = bo->vmap;
        return 0;
 }