drm: Branch 'master' - 2 commits

[email protected] (Christian Gmeiner)
Newsgroups gmane.comp.video.dri.patches
Message-ID <[email protected]>
 etnaviv/etnaviv-symbol-check |    2 ++
 etnaviv/etnaviv_device.c     |   23 +++++++++++++++++++++++
 etnaviv/etnaviv_drmif.h      |    2 ++
 etnaviv/etnaviv_priv.h       |    2 ++
 4 files changed, 29 insertions(+)

New commits:
commit befb6429f03072b128a55360c1cf57f7b4d47b67
Author: Christian Gmeiner <[email protected]>
Date:   Sun Nov 13 21:29:22 2016 +0100

    etnaviv: add API to create etna_device from private dup() fd
    
    Like etna_device_new() but creates it's own private dup() of the fd
    which is close()d when the device is finalized.
    
    Signed-off-by: Christian Gmeiner <[email protected]>
    Acked-by: Eric Anholt <[email protected]>

diff --git a/etnaviv/etnaviv-symbol-check b/etnaviv/etnaviv-symbol-check
index 378e073..72f2bc5 100755
--- a/etnaviv/etnaviv-symbol-check
+++ b/etnaviv/etnaviv-symbol-check
@@ -11,6 +11,7 @@ _end
 _fini
 _init
 etna_device_new
+etna_device_new_dup
 etna_device_ref
 etna_device_del
 etna_device_fd
diff --git a/etnaviv/etnaviv_device.c b/etnaviv/etnaviv_device.c
index b716360..3ce9203 100644
--- a/etnaviv/etnaviv_device.c
+++ b/etnaviv/etnaviv_device.c
@@ -61,6 +61,21 @@ struct etna_device *etna_device_new(int fd)
 	return dev;
 }
 
+/* like etna_device_new() but creates it's own private dup() of the fd
+ * which is close()d when the device is finalized. */
+struct etna_device *etna_device_new_dup(int fd)
+{
+	int dup_fd = dup(fd);
+	struct etna_device *dev = etna_device_new(dup_fd);
+
+	if (dev)
+		dev->closefd = 1;
+	else
+		close(dup_fd);
+
+	return dev;
+}
+
 struct etna_device *etna_device_ref(struct etna_device *dev)
 {
 	atomic_inc(&dev->refcnt);
@@ -74,6 +89,9 @@ static void etna_device_del_impl(struct etna_device *dev)
 	drmHashDestroy(dev->handle_table);
 	drmHashDestroy(dev->name_table);
 
+	if (dev->closefd)
+		close(dev->fd);
+
 	free(dev);
 }
 
diff --git a/etnaviv/etnaviv_drmif.h b/etnaviv/etnaviv_drmif.h
index 3a5cb51..fe9d5db 100644
--- a/etnaviv/etnaviv_drmif.h
+++ b/etnaviv/etnaviv_drmif.h
@@ -84,6 +84,7 @@ enum etna_param_id {
  */
 
 struct etna_device *etna_device_new(int fd);
+struct etna_device *etna_device_new_dup(int fd);
 struct etna_device *etna_device_ref(struct etna_device *dev);
 void etna_device_del(struct etna_device *dev);
 int etna_device_fd(struct etna_device *dev);
diff --git a/etnaviv/etnaviv_priv.h b/etnaviv/etnaviv_priv.h
index 6bb0c8d..eb62ed3 100644
--- a/etnaviv/etnaviv_priv.h
+++ b/etnaviv/etnaviv_priv.h
@@ -93,6 +93,8 @@ struct etna_device {
 	void *handle_table, *name_table;
 
 	struct etna_bo_cache bo_cache;
+
+	int closefd;        /* call close(fd) upon destruction */
 };
 
 drm_private void etna_bo_cache_init(struct etna_bo_cache *cache);
commit a14d6a6a43742cfad7ab346bf9168eb893881816
Author: Christian Gmeiner <[email protected]>
Date:   Sun Nov 13 21:14:57 2016 +0100

    etnaviv: add API to get drm fd from etna_device
    
    Signed-off-by: Christian Gmeiner <[email protected]>
    Acked-by: Eric Anholt <[email protected]>

diff --git a/etnaviv/etnaviv-symbol-check b/etnaviv/etnaviv-symbol-check
index 77c94c6..378e073 100755
--- a/etnaviv/etnaviv-symbol-check
+++ b/etnaviv/etnaviv-symbol-check
@@ -13,6 +13,7 @@ _init
 etna_device_new
 etna_device_ref
 etna_device_del
+etna_device_fd
 etna_gpu_new
 etna_gpu_del
 etna_gpu_get_param
diff --git a/etnaviv/etnaviv_device.c b/etnaviv/etnaviv_device.c
index f954ca4..b716360 100644
--- a/etnaviv/etnaviv_device.c
+++ b/etnaviv/etnaviv_device.c
@@ -94,3 +94,8 @@ void etna_device_del(struct etna_device *dev)
 	etna_device_del_impl(dev);
 	pthread_mutex_unlock(&table_lock);
 }
+
+int etna_device_fd(struct etna_device *dev)
+{
+   return dev->fd;
+}
diff --git a/etnaviv/etnaviv_drmif.h b/etnaviv/etnaviv_drmif.h
index 979b16a..3a5cb51 100644
--- a/etnaviv/etnaviv_drmif.h
+++ b/etnaviv/etnaviv_drmif.h
@@ -86,6 +86,7 @@ enum etna_param_id {
 struct etna_device *etna_device_new(int fd);
 struct etna_device *etna_device_ref(struct etna_device *dev);
 void etna_device_del(struct etna_device *dev);
+int etna_device_fd(struct etna_device *dev);
 
 /* gpu functions:
  */

------------------------------------------------------------------------------
--
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.