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: */ ------------------------------------------------------------------------------ --