From: Gustavo Padovan <gustavo.padovan@xxxxxxxxxxxxxxx> Provide simple default functions to help users retrieve the values of the fence and the timeline. Signed-off-by: Gustavo Padovan <gustavo.padovan@xxxxxxxxxxxxxxx> --- drivers/dma-buf/fence.c | 31 +++++++++++++++++++++++++++++++ drivers/staging/android/sw_sync.c | 18 ------------------ drivers/staging/android/sync.c | 30 ++---------------------------- drivers/staging/android/sync_debug.c | 11 +---------- include/linux/fence.h | 10 ++-------- include/trace/events/fence.h | 12 +++--------- 6 files changed, 39 insertions(+), 73 deletions(-) diff --git a/drivers/dma-buf/fence.c b/drivers/dma-buf/fence.c index 786c987..9fdeae8 100644 --- a/drivers/dma-buf/fence.c +++ b/drivers/dma-buf/fence.c @@ -620,6 +620,37 @@ void fence_default_release(struct fence *fence) } EXPORT_SYMBOL(fence_default_release); +/** + * fence_default_value_str - default .fence_value_str fence ops + * @fence: [in] the fence to get the value from + * @str: [out] the string pointer to write the value + * @size: [in] the size of the allocated string + * + * This functions returns a string containing the value of the fence. + */ +void fence_default_value_str(struct fence *fence, char *str, int size) +{ + snprintf(str, size, "%d", fence->seqno); +} +EXPORT_SYMBOL(fence_default_value_str); + +/** + * fence_default_timeline_value_str - default .timeline_value_str fence ops + * @fence: [in] the timeline child fence + * @str: [out] the string pointer to write the value + * @size: [in] the size of the allocated string + * + * This functions returns a string containing the value of the last signaled + * fence in this timeline. + */ +void fence_default_timeline_value_str(struct fence *fence, char *str, int size) +{ + struct fence_timeline *timeline = fence_parent(fence); + + snprintf(str, size, "%d", timeline->value); +} +EXPORT_SYMBOL(fence_default_timeline_value_str); + static bool fence_test_signaled_any(struct fence **fences, uint32_t count) { diff --git a/drivers/staging/android/sw_sync.c b/drivers/staging/android/sw_sync.c index bed6801..cfd7a18 100644 --- a/drivers/staging/android/sw_sync.c +++ b/drivers/staging/android/sw_sync.c @@ -51,26 +51,8 @@ static int sw_sync_fill_driver_data(struct fence *fence, return sizeof(pt->value); } -static void sw_sync_timeline_value_str(struct fence_timeline *fence_timeline, - char *str, int size) -{ - struct sw_sync_timeline *timeline = - (struct sw_sync_timeline *)fence_timeline; - snprintf(str, size, "%d", timeline->value); -} - -static void sw_sync_fence_value_str(struct fence *fence, - char *str, int size) -{ - struct sw_sync_pt *pt = (struct sw_sync_pt *)fence; - - snprintf(str, size, "%d", pt->value); -} - static struct fence_timeline_ops sw_sync_timeline_ops = { .fill_driver_data = sw_sync_fill_driver_data, - .timeline_value_str = sw_sync_timeline_value_str, - .fence_value_str = sw_sync_fence_value_str, }; struct sw_sync_timeline *sw_sync_timeline_create(const char *name) diff --git a/drivers/staging/android/sync.c b/drivers/staging/android/sync.c index 8216635..147a494 100644 --- a/drivers/staging/android/sync.c +++ b/drivers/staging/android/sync.c @@ -331,32 +331,6 @@ static int sync_fence_fill_driver_data(struct fence *fence, return parent->ops->fill_driver_data(fence, data, size); } -static void sync_fence_value_str(struct fence *fence, - char *str, int size) -{ - struct fence_timeline *parent = fence_parent(fence); - - if (!parent->ops->fence_value_str) { - if (size) - *str = 0; - return; - } - parent->ops->fence_value_str(fence, str, size); -} - -static void sync_fence_timeline_value_str(struct fence *fence, - char *str, int size) -{ - struct fence_timeline *parent = fence_parent(fence); - - if (!parent->ops->timeline_value_str) { - if (size) - *str = 0; - return; - } - parent->ops->timeline_value_str(parent, str, size); -} - static const struct fence_ops sync_fence_ops = { .get_driver_name = fence_default_get_driver_name, .get_timeline_name = fence_default_get_timeline_name, @@ -365,8 +339,8 @@ static const struct fence_ops sync_fence_ops = { .wait = fence_default_wait, .release = fence_default_release, .fill_driver_data = sync_fence_fill_driver_data, - .fence_value_str = sync_fence_value_str, - .timeline_value_str = sync_fence_timeline_value_str, + .fence_value_str = fence_default_value_str, + .timeline_value_str = fence_default_timeline_value_str, }; static void sync_fence_free(struct kref *kref) diff --git a/drivers/staging/android/sync_debug.c b/drivers/staging/android/sync_debug.c index db618ca..89b334c 100644 --- a/drivers/staging/android/sync_debug.c +++ b/drivers/staging/android/sync_debug.c @@ -133,16 +133,7 @@ static void sync_print_obj(struct seq_file *s, struct fence_timeline *obj) struct list_head *pos; unsigned long flags; - seq_printf(s, "%s %s", obj->name, obj->drv_name); - - if (obj->ops->timeline_value_str) { - char value[64]; - - obj->ops->timeline_value_str(obj, value, sizeof(value)); - seq_printf(s, ": %s", value); - } - - seq_puts(s, "\n"); + seq_printf(s, "%s %s: %d\n", obj->name, obj->drv_name, obj->value); spin_lock_irqsave(&obj->lock, flags); list_for_each(pos, &obj->child_list_head) { diff --git a/include/linux/fence.h b/include/linux/fence.h index e71545e..5371beb 100644 --- a/include/linux/fence.h +++ b/include/linux/fence.h @@ -40,19 +40,11 @@ struct fence_cb; * should return an error if there is not enough room * as specified by size. This information is returned * to userspace by SYNC_IOC_FENCE_INFO. - * @timeline_value_str: fill str with the value of the sync_timeline's counter * @pt_value_str: fill str with the value of the sync_pt */ struct fence_timeline_ops { /* optional */ int (*fill_driver_data)(struct fence *fence, void *data, int size); - - /* optional */ - void (*timeline_value_str)(struct fence_timeline *timeline, char *str, - int size); - - /* optional */ - void (*fence_value_str)(struct fence *fence, char *str, int size); }; /** @@ -293,6 +285,8 @@ bool fence_default_signaled(struct fence *fence); bool fence_default_enable_signaling(struct fence *fence); signed long fence_default_wait(struct fence *fence, bool intr, signed long timeout); void fence_default_release(struct fence *fence); +void fence_default_value_str(struct fence *fence, char *str, int size); +void fence_default_timeline_value_str(struct fence *fence, char *str, int size); int fence_add_callback(struct fence *fence, struct fence_cb *cb, fence_func_t func); bool fence_remove_callback(struct fence *fence, struct fence_cb *cb); diff --git a/include/trace/events/fence.h b/include/trace/events/fence.h index c4d01de..e1ca808 100644 --- a/include/trace/events/fence.h +++ b/include/trace/events/fence.h @@ -55,21 +55,15 @@ TRACE_EVENT(fence_timeline, TP_STRUCT__entry( __string(name, timeline->name) - __array(char, value, 32) + __field(unsigned int, value) ), TP_fast_assign( __assign_str(name, timeline->name); - if (timeline->ops->timeline_value_str) { - timeline->ops->timeline_value_str(timeline, - __entry->value, - sizeof(__entry->value)); - } else { - __entry->value[0] = '\0'; - } + __entry->value = timeline->value; ), - TP_printk("name=%s value=%s", __get_str(name), __entry->value) + TP_printk("name=%s value=%u", __get_str(name), __entry->value) ); DECLARE_EVENT_CLASS(fence, -- 2.5.0 _______________________________________________ devel mailing list devel@xxxxxxxxxxxxxxxxxxxxxx http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel