From 9fb6c7d6a06da6ac789634f9e69ccedf2c6b11ec Mon Sep 17 00:00:00 2001 From: Changyeon Lee Date: Fri, 13 Sep 2024 11:52:23 +0900 Subject: [PATCH] tbm_sync: Add tbm_sync_fence_is_signaled Change-Id: I7140aa69ee9553801e3e513f59a67580543978cf --- include/tbm_sync.h | 7 +++++++ src/tbm_sync.c | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/include/tbm_sync.h b/include/tbm_sync.h index c391d5d..b2225d7 100644 --- a/include/tbm_sync.h +++ b/include/tbm_sync.h @@ -51,6 +51,13 @@ int tbm_sync_fence_wait(tbm_fd fence, int timeout); */ tbm_fd tbm_sync_fence_merge(const char *name, tbm_fd fence1, tbm_fd fence2); +/** + * @brief Get signaled of fence + * @param[in] fence fence object + * @return 0 on active, 1 on signaled, -1 on error + */ +int tbm_sync_fence_is_signaled(tbm_fd fence); + #ifdef __cplusplus } #endif diff --git a/src/tbm_sync.c b/src/tbm_sync.c index 1501567..335bf08 100644 --- a/src/tbm_sync.c +++ b/src/tbm_sync.c @@ -223,4 +223,40 @@ tbm_sync_fence_merge(const char *name, tbm_fd fence1, tbm_fd fence2) return data.fence; } + +int +tbm_sync_fence_is_signaled(tbm_fd fence) +{ + struct sync_file_info info; + int signaled; + int ret; + + memset(&info, 0, sizeof(info)); + ret = ioctl(fence, SYNC_IOC_FILE_INFO, &info); + if (ret < 0 && errno == ENOTTY) { + struct sync_fence_info_data *legacy_info; + + legacy_info = calloc(1, sizeof *legacy_info); + if (!legacy_info) + return -1; + + legacy_info->len = sizeof *legacy_info; + ret = ioctl(fence, SYNC_IOC_LEGACY_FENCE_INFO, legacy_info); + if ((ret < 0) || (legacy_info->status < 0)) { + free(legacy_info); + _log_errno(); + return -1; + } + + signaled = legacy_info->status; + free(legacy_info); + + return signaled; + } else if ((ret < 0) || (info.status < 0)) { + _log_errno(); + return -1; + } + + return info.status; +} /* LCOV_EXCL_STOP */ -- 2.34.1