[PATCH 11/18] drm/armada: Don't grab dev->struct_mutex for in mmap offset ioctl

2015-08-10 Thread Thierry Reding
On Thu, Jul 09, 2015 at 11:32:43PM +0200, Daniel Vetter wrote:
> Since David Herrmann's mmap vma manager rework we don't need to grab
> dev->struct_mutex any more to prevent races when looking up the mmap
> offset. Drop it and instead don't forget to use the unref_unlocked
> variant (since the drm core still cares).
> 
> While at it also fix a leak when this ioctl is called on an imported
> buffer.
> 
> Cc: Russell King 
> Signed-off-by: Daniel Vetter 
> ---
>  drivers/gpu/drm/armada/armada_gem.c | 11 ---
>  1 file changed, 4 insertions(+), 7 deletions(-)

Reviewed-by: Thierry Reding 
-- next part --
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: 



[PATCH 11/18] drm/armada: Don't grab dev->struct_mutex for in mmap offset ioctl

2015-08-10 Thread Russell King - ARM Linux
On Thu, Jul 09, 2015 at 11:32:43PM +0200, Daniel Vetter wrote:
> Since David Herrmann's mmap vma manager rework we don't need to grab
> dev->struct_mutex any more to prevent races when looking up the mmap
> offset. Drop it and instead don't forget to use the unref_unlocked
> variant (since the drm core still cares).
> 
> While at it also fix a leak when this ioctl is called on an imported
> buffer.

Good catch, thanks Daniel.  I'd prefer these to be two different commits
though, so that the leak can be easily backported to stable kernels if
needed.

I suspect this should go through the same tree that David's work is,
otherwise we end up with random dependencies between trees.  With the
bug fix separated out:

Acked-by: Russell King 

-- 
FTTC broadband for 0.8mile line: currently at 10.5Mbps down 400kbps up
according to speedtest.net.


[PATCH 11/18] drm/armada: Don't grab dev->struct_mutex for in mmap offset ioctl

2015-07-09 Thread Daniel Vetter
Since David Herrmann's mmap vma manager rework we don't need to grab
dev->struct_mutex any more to prevent races when looking up the mmap
offset. Drop it and instead don't forget to use the unref_unlocked
variant (since the drm core still cares).

While at it also fix a leak when this ioctl is called on an imported
buffer.

Cc: Russell King 
Signed-off-by: Daniel Vetter 
---
 drivers/gpu/drm/armada/armada_gem.c | 11 ---
 1 file changed, 4 insertions(+), 7 deletions(-)

diff --git a/drivers/gpu/drm/armada/armada_gem.c 
b/drivers/gpu/drm/armada/armada_gem.c
index 580e10acaa3a..95df74227ec0 100644
--- a/drivers/gpu/drm/armada/armada_gem.c
+++ b/drivers/gpu/drm/armada/armada_gem.c
@@ -273,18 +273,16 @@ int armada_gem_dumb_map_offset(struct drm_file *file, 
struct drm_device *dev,
struct armada_gem_object *obj;
int ret = 0;

-   mutex_lock(&dev->struct_mutex);
obj = armada_gem_object_lookup(dev, file, handle);
if (!obj) {
DRM_ERROR("failed to lookup gem object\n");
-   ret = -EINVAL;
-   goto err_unlock;
+   return -EINVAL;
}

/* Don't allow imported objects to be mapped */
if (obj->obj.import_attach) {
ret = -EINVAL;
-   goto err_unlock;
+   goto err_unref;
}

ret = drm_gem_create_mmap_offset(&obj->obj);
@@ -293,9 +291,8 @@ int armada_gem_dumb_map_offset(struct drm_file *file, 
struct drm_device *dev,
DRM_DEBUG_DRIVER("handle %#x offset %llx\n", handle, *offset);
}

-   drm_gem_object_unreference(&obj->obj);
- err_unlock:
-   mutex_unlock(&dev->struct_mutex);
+err_unref:
+   drm_gem_object_unreference_unlocked(&obj->obj);

return ret;
 }
-- 
2.1.4