Loading libsync/include/sync/sync.h +50 −1 Original line number Diff line number Diff line Loading @@ -22,9 +22,16 @@ #include <sys/cdefs.h> #include <stdint.h> #include <linux/types.h> __BEGIN_DECLS // XXX: These structs are copied from the header "linux/sync.h". struct sync_legacy_merge_data { int32_t fd2; char name[32]; int32_t fence; }; struct sync_fence_info_data { uint32_t len; char name[32]; Loading @@ -41,6 +48,48 @@ struct sync_pt_info { uint8_t driver_data[0]; }; #define SYNC_IOC_MAGIC '>' /** * DOC: SYNC_IOC_LEGACY_WAIT - wait for a fence to signal * * pass timeout in milliseconds. Waits indefinitely timeout < 0. * * This is the legacy version of the Sync API before the de-stage that happened * on Linux kernel 4.7. */ #define SYNC_IOC_LEGACY_WAIT _IOW(SYNC_IOC_MAGIC, 0, __s32) /** * DOC: SYNC_IOC_MERGE - merge two fences * * Takes a struct sync_merge_data. Creates a new fence containing copies of * the sync_pts in both the calling fd and sync_merge_data.fd2. Returns the * new fence's fd in sync_merge_data.fence * * This is the legacy version of the Sync API before the de-stage that happened * on Linux kernel 4.7. */ #define SYNC_IOC_LEGACY_MERGE _IOWR(SYNC_IOC_MAGIC, 1, \ struct sync_legacy_merge_data) /** * DOC: SYNC_IOC_LEGACY_FENCE_INFO - get detailed information on a fence * * Takes a struct sync_fence_info_data with extra space allocated for pt_info. * Caller should write the size of the buffer into len. On return, len is * updated to reflect the total size of the sync_fence_info_data including * pt_info. * * pt_info is a buffer containing sync_pt_infos for every sync_pt in the fence. * To iterate over the sync_pt_infos, use the sync_pt_info.len field. * * This is the legacy version of the Sync API before the de-stage that happened * on Linux kernel 4.7. */ #define SYNC_IOC_LEGACY_FENCE_INFO _IOWR(SYNC_IOC_MAGIC, 2,\ struct sync_fence_info_data) /* timeout in msecs */ int sync_wait(int fd, int timeout); int sync_merge(const char *name, int fd1, int fd2); Loading libsync/sync.c +4 −16 Original line number Diff line number Diff line Loading @@ -27,18 +27,6 @@ #include <sync/sync.h> // The sync code is undergoing a major change. Add enough in to get // everything to compile wih the latest uapi headers. struct sync_merge_data { int32_t fd2; char name[32]; int32_t fence; }; #define SYNC_IOC_MAGIC '>' #define SYNC_IOC_WAIT _IOW(SYNC_IOC_MAGIC, 0, __s32) #define SYNC_IOC_MERGE _IOWR(SYNC_IOC_MAGIC, 1, struct sync_merge_data) #define SYNC_IOC_FENCE_INFO _IOWR(SYNC_IOC_MAGIC, 2, struct sync_fence_info_data) struct sw_sync_create_fence_data { __u32 value; Loading @@ -54,18 +42,18 @@ int sync_wait(int fd, int timeout) { __s32 to = timeout; return ioctl(fd, SYNC_IOC_WAIT, &to); return ioctl(fd, SYNC_IOC_LEGACY_WAIT, &to); } int sync_merge(const char *name, int fd1, int fd2) { struct sync_merge_data data; struct sync_legacy_merge_data data; int err; data.fd2 = fd2; strlcpy(data.name, name, sizeof(data.name)); err = ioctl(fd1, SYNC_IOC_MERGE, &data); err = ioctl(fd1, SYNC_IOC_LEGACY_MERGE, &data); if (err < 0) return err; Loading @@ -82,7 +70,7 @@ struct sync_fence_info_data *sync_fence_info(int fd) return NULL; info->len = 4096; err = ioctl(fd, SYNC_IOC_FENCE_INFO, info); err = ioctl(fd, SYNC_IOC_LEGACY_FENCE_INFO, info); if (err < 0) { free(info); return NULL; Loading Loading
libsync/include/sync/sync.h +50 −1 Original line number Diff line number Diff line Loading @@ -22,9 +22,16 @@ #include <sys/cdefs.h> #include <stdint.h> #include <linux/types.h> __BEGIN_DECLS // XXX: These structs are copied from the header "linux/sync.h". struct sync_legacy_merge_data { int32_t fd2; char name[32]; int32_t fence; }; struct sync_fence_info_data { uint32_t len; char name[32]; Loading @@ -41,6 +48,48 @@ struct sync_pt_info { uint8_t driver_data[0]; }; #define SYNC_IOC_MAGIC '>' /** * DOC: SYNC_IOC_LEGACY_WAIT - wait for a fence to signal * * pass timeout in milliseconds. Waits indefinitely timeout < 0. * * This is the legacy version of the Sync API before the de-stage that happened * on Linux kernel 4.7. */ #define SYNC_IOC_LEGACY_WAIT _IOW(SYNC_IOC_MAGIC, 0, __s32) /** * DOC: SYNC_IOC_MERGE - merge two fences * * Takes a struct sync_merge_data. Creates a new fence containing copies of * the sync_pts in both the calling fd and sync_merge_data.fd2. Returns the * new fence's fd in sync_merge_data.fence * * This is the legacy version of the Sync API before the de-stage that happened * on Linux kernel 4.7. */ #define SYNC_IOC_LEGACY_MERGE _IOWR(SYNC_IOC_MAGIC, 1, \ struct sync_legacy_merge_data) /** * DOC: SYNC_IOC_LEGACY_FENCE_INFO - get detailed information on a fence * * Takes a struct sync_fence_info_data with extra space allocated for pt_info. * Caller should write the size of the buffer into len. On return, len is * updated to reflect the total size of the sync_fence_info_data including * pt_info. * * pt_info is a buffer containing sync_pt_infos for every sync_pt in the fence. * To iterate over the sync_pt_infos, use the sync_pt_info.len field. * * This is the legacy version of the Sync API before the de-stage that happened * on Linux kernel 4.7. */ #define SYNC_IOC_LEGACY_FENCE_INFO _IOWR(SYNC_IOC_MAGIC, 2,\ struct sync_fence_info_data) /* timeout in msecs */ int sync_wait(int fd, int timeout); int sync_merge(const char *name, int fd1, int fd2); Loading
libsync/sync.c +4 −16 Original line number Diff line number Diff line Loading @@ -27,18 +27,6 @@ #include <sync/sync.h> // The sync code is undergoing a major change. Add enough in to get // everything to compile wih the latest uapi headers. struct sync_merge_data { int32_t fd2; char name[32]; int32_t fence; }; #define SYNC_IOC_MAGIC '>' #define SYNC_IOC_WAIT _IOW(SYNC_IOC_MAGIC, 0, __s32) #define SYNC_IOC_MERGE _IOWR(SYNC_IOC_MAGIC, 1, struct sync_merge_data) #define SYNC_IOC_FENCE_INFO _IOWR(SYNC_IOC_MAGIC, 2, struct sync_fence_info_data) struct sw_sync_create_fence_data { __u32 value; Loading @@ -54,18 +42,18 @@ int sync_wait(int fd, int timeout) { __s32 to = timeout; return ioctl(fd, SYNC_IOC_WAIT, &to); return ioctl(fd, SYNC_IOC_LEGACY_WAIT, &to); } int sync_merge(const char *name, int fd1, int fd2) { struct sync_merge_data data; struct sync_legacy_merge_data data; int err; data.fd2 = fd2; strlcpy(data.name, name, sizeof(data.name)); err = ioctl(fd1, SYNC_IOC_MERGE, &data); err = ioctl(fd1, SYNC_IOC_LEGACY_MERGE, &data); if (err < 0) return err; Loading @@ -82,7 +70,7 @@ struct sync_fence_info_data *sync_fence_info(int fd) return NULL; info->len = 4096; err = ioctl(fd, SYNC_IOC_FENCE_INFO, info); err = ioctl(fd, SYNC_IOC_LEGACY_FENCE_INFO, info); if (err < 0) { free(info); return NULL; Loading