Commit 79f0e202 authored by Rob Clark's avatar Rob Clark

drm/msm: use imported dmabuf's reservation object

This was always the intention, but somehow it was never wired up
properly.
Signed-off-by: default avatarRob Clark <robdclark@gmail.com>
parent fde5de6c
...@@ -208,7 +208,7 @@ int msm_gem_new_handle(struct drm_device *dev, struct drm_file *file, ...@@ -208,7 +208,7 @@ int msm_gem_new_handle(struct drm_device *dev, struct drm_file *file,
struct drm_gem_object *msm_gem_new(struct drm_device *dev, struct drm_gem_object *msm_gem_new(struct drm_device *dev,
uint32_t size, uint32_t flags); uint32_t size, uint32_t flags);
struct drm_gem_object *msm_gem_import(struct drm_device *dev, struct drm_gem_object *msm_gem_import(struct drm_device *dev,
uint32_t size, struct sg_table *sgt); struct dma_buf *dmabuf, struct sg_table *sgt);
int msm_framebuffer_prepare(struct drm_framebuffer *fb, int id); int msm_framebuffer_prepare(struct drm_framebuffer *fb, int id);
void msm_framebuffer_cleanup(struct drm_framebuffer *fb, int id); void msm_framebuffer_cleanup(struct drm_framebuffer *fb, int id);
......
...@@ -584,6 +584,7 @@ int msm_gem_new_handle(struct drm_device *dev, struct drm_file *file, ...@@ -584,6 +584,7 @@ int msm_gem_new_handle(struct drm_device *dev, struct drm_file *file,
static int msm_gem_new_impl(struct drm_device *dev, static int msm_gem_new_impl(struct drm_device *dev,
uint32_t size, uint32_t flags, uint32_t size, uint32_t flags,
struct reservation_object *resv,
struct drm_gem_object **obj) struct drm_gem_object **obj)
{ {
struct msm_drm_private *priv = dev->dev_private; struct msm_drm_private *priv = dev->dev_private;
...@@ -623,8 +624,12 @@ static int msm_gem_new_impl(struct drm_device *dev, ...@@ -623,8 +624,12 @@ static int msm_gem_new_impl(struct drm_device *dev,
msm_obj->flags = flags; msm_obj->flags = flags;
if (resv) {
msm_obj->resv = resv;
} else {
msm_obj->resv = &msm_obj->_resv; msm_obj->resv = &msm_obj->_resv;
reservation_object_init(msm_obj->resv); reservation_object_init(msm_obj->resv);
}
INIT_LIST_HEAD(&msm_obj->submit_entry); INIT_LIST_HEAD(&msm_obj->submit_entry);
list_add_tail(&msm_obj->mm_list, &priv->inactive_list); list_add_tail(&msm_obj->mm_list, &priv->inactive_list);
...@@ -644,7 +649,7 @@ struct drm_gem_object *msm_gem_new(struct drm_device *dev, ...@@ -644,7 +649,7 @@ struct drm_gem_object *msm_gem_new(struct drm_device *dev,
size = PAGE_ALIGN(size); size = PAGE_ALIGN(size);
ret = msm_gem_new_impl(dev, size, flags, &obj); ret = msm_gem_new_impl(dev, size, flags, NULL, &obj);
if (ret) if (ret)
goto fail; goto fail;
...@@ -666,10 +671,11 @@ struct drm_gem_object *msm_gem_new(struct drm_device *dev, ...@@ -666,10 +671,11 @@ struct drm_gem_object *msm_gem_new(struct drm_device *dev,
} }
struct drm_gem_object *msm_gem_import(struct drm_device *dev, struct drm_gem_object *msm_gem_import(struct drm_device *dev,
uint32_t size, struct sg_table *sgt) struct dma_buf *dmabuf, struct sg_table *sgt)
{ {
struct msm_gem_object *msm_obj; struct msm_gem_object *msm_obj;
struct drm_gem_object *obj; struct drm_gem_object *obj;
uint32_t size;
int ret, npages; int ret, npages;
/* if we don't have IOMMU, don't bother pretending we can import: */ /* if we don't have IOMMU, don't bother pretending we can import: */
...@@ -678,9 +684,9 @@ struct drm_gem_object *msm_gem_import(struct drm_device *dev, ...@@ -678,9 +684,9 @@ struct drm_gem_object *msm_gem_import(struct drm_device *dev,
return ERR_PTR(-EINVAL); return ERR_PTR(-EINVAL);
} }
size = PAGE_ALIGN(size); size = PAGE_ALIGN(dmabuf->size);
ret = msm_gem_new_impl(dev, size, MSM_BO_WC, &obj); ret = msm_gem_new_impl(dev, size, MSM_BO_WC, dmabuf->resv, &obj);
if (ret) if (ret)
goto fail; goto fail;
......
...@@ -55,7 +55,7 @@ int msm_gem_prime_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma) ...@@ -55,7 +55,7 @@ int msm_gem_prime_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma)
struct drm_gem_object *msm_gem_prime_import_sg_table(struct drm_device *dev, struct drm_gem_object *msm_gem_prime_import_sg_table(struct drm_device *dev,
struct dma_buf_attachment *attach, struct sg_table *sg) struct dma_buf_attachment *attach, struct sg_table *sg)
{ {
return msm_gem_import(dev, attach->dmabuf->size, sg); return msm_gem_import(dev, attach->dmabuf, sg);
} }
int msm_gem_prime_pin(struct drm_gem_object *obj) int msm_gem_prime_pin(struct drm_gem_object *obj)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment