media: nvmap: Allow access to videobuf2-dma-nvmap
Rahool Paliwal [Mon, 9 Dec 2013 12:37:05 +0000 (17:37 +0530)]
Allow the "user" nvmap client to access the
nvmap memory handle of "videobuf2-dma-nvmap" client.

Bug 1421388

Change-Id: Id7a28c06214508d807098a6b258345023192a601
Signed-off-by: Rahool Paliwal <rpaliwal@nvidia.com>
Reviewed-on: http://git-master/r/344620
Reviewed-by: Automatic_Commit_Validation_User
Reviewed-by: Matthew Pedro <mapedro@nvidia.com>

drivers/video/tegra/nvmap/nvmap_handle.c

index 4b7760b..1c5e61c 100644 (file)
@@ -3,7 +3,7 @@
  *
  * Handle allocation and freeing routines for nvmap
  *
- * Copyright (c) 2009-2012, NVIDIA CORPORATION. All rights reserved.
+ * Copyright (c) 2009-2014, NVIDIA CORPORATION. All rights reserved.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -988,6 +988,15 @@ struct nvmap_handle_ref *nvmap_duplicate_handle_id(struct nvmap_client *client,
        BUG_ON(!client || client->dev != nvmap_dev);
        /* on success, the reference count for the handle should be
         * incremented, so the success paths will not call nvmap_handle_put */
+
+       /* Allow the handle to be accessed by other (non-owner)
+        clients only if the owner is "videobuf2-dma-nvmap
+        which is a V4L2 capture kernel module. This handle can
+        be accessed by the "user" client for rendering/encoding */
+       if (!strcmp(((struct nvmap_handle *)id)->owner->name,
+                               "videobuf2-dma-nvmap"))
+               client = ((struct nvmap_handle *)id)->owner;
+
        h = nvmap_validate_get(client, id);
 
        if (!h) {