|
@@ -125,13 +125,15 @@ static void *i915_gem_dmabuf_vmap(struct dma_buf *dma_buf)
|
|
|
|
|
|
ret = i915_gem_object_get_pages(obj);
|
|
|
if (ret)
|
|
|
- goto error;
|
|
|
+ goto err;
|
|
|
+
|
|
|
+ i915_gem_object_pin_pages(obj);
|
|
|
|
|
|
ret = -ENOMEM;
|
|
|
|
|
|
pages = drm_malloc_ab(obj->base.size >> PAGE_SHIFT, sizeof(*pages));
|
|
|
if (pages == NULL)
|
|
|
- goto error;
|
|
|
+ goto err_unpin;
|
|
|
|
|
|
i = 0;
|
|
|
for_each_sg_page(obj->pages->sgl, &sg_iter, obj->pages->nents, 0)
|
|
@@ -141,15 +143,16 @@ static void *i915_gem_dmabuf_vmap(struct dma_buf *dma_buf)
|
|
|
drm_free_large(pages);
|
|
|
|
|
|
if (!obj->dma_buf_vmapping)
|
|
|
- goto error;
|
|
|
+ goto err_unpin;
|
|
|
|
|
|
obj->vmapping_count = 1;
|
|
|
- i915_gem_object_pin_pages(obj);
|
|
|
out_unlock:
|
|
|
mutex_unlock(&dev->struct_mutex);
|
|
|
return obj->dma_buf_vmapping;
|
|
|
|
|
|
-error:
|
|
|
+err_unpin:
|
|
|
+ i915_gem_object_unpin_pages(obj);
|
|
|
+err:
|
|
|
mutex_unlock(&dev->struct_mutex);
|
|
|
return ERR_PTR(ret);
|
|
|
}
|