From: Gustavo Padovan <gustavo.padovan@xxxxxxxxxxxxxxx> Move driver name handling to fence and create a default function for it. Returns the driver which the fence belongs. Signed-off-by: Gustavo Padovan <gustavo.padovan@xxxxxxxxxxxxxxx> --- drivers/dma-buf/fence.c | 19 ++++++++++++++++++- drivers/staging/android/sw_sync.c | 3 +-- drivers/staging/android/sync.c | 9 +-------- drivers/staging/android/sync_debug.c | 2 +- include/linux/fence.h | 8 ++++---- 5 files changed, 25 insertions(+), 16 deletions(-) diff --git a/drivers/dma-buf/fence.c b/drivers/dma-buf/fence.c index e17397d..85b5074 100644 --- a/drivers/dma-buf/fence.c +++ b/drivers/dma-buf/fence.c @@ -56,6 +56,7 @@ EXPORT_SYMBOL(fence_context_alloc); * @num: [in] amount of contexts to allocate * @ops: [in] timeline ops of the caller * @size: [in] size to allocate struct fence_timeline + * @drv_name: [in] name of the driver * @name: [in] name of the timeline * * This function will return the new fence_timeline or NULL in case of error. @@ -64,7 +65,8 @@ EXPORT_SYMBOL(fence_context_alloc); */ struct fence_timeline *fence_timeline_create(unsigned num, struct fence_timeline_ops *ops, - int size, const char *name) + int size, const char *drv_name, + const char *name) { struct fence_timeline *timeline; @@ -79,6 +81,7 @@ struct fence_timeline *fence_timeline_create(unsigned num, timeline->ops = ops; timeline->context = fence_context_alloc(1); strlcpy(timeline->name, name, sizeof(timeline->name)); + strlcpy(timeline->drv_name, drv_name, sizeof(timeline->drv_name)); INIT_LIST_HEAD(&timeline->child_list_head); INIT_LIST_HEAD(&timeline->active_list_head); @@ -439,6 +442,20 @@ fence_remove_callback(struct fence *fence, struct fence_cb *cb) EXPORT_SYMBOL(fence_remove_callback); /** + * fence_default_get_driver_name - default .get_driver_name op + * @fence: [in] the fence to get driver name + * + * This function returns the name of the driver that the fence belongs. + */ +const char *fence_default_get_driver_name(struct fence *fence) +{ + struct fence_timeline *parent = fence_parent(fence); + + return parent->drv_name; +} +EXPORT_SYMBOL(fence_default_get_driver_name); + +/** * fence_default_enable_signaling - default op for .enable_signaling * @fence: [in] the fence to enable signaling * diff --git a/drivers/staging/android/sw_sync.c b/drivers/staging/android/sw_sync.c index 9d6a5bd..9720267 100644 --- a/drivers/staging/android/sw_sync.c +++ b/drivers/staging/android/sw_sync.c @@ -77,7 +77,6 @@ static void sw_sync_fence_value_str(struct fence *fence, } static struct fence_timeline_ops sw_sync_timeline_ops = { - .driver_name = "sw_sync", .has_signaled = sw_sync_fence_has_signaled, .fill_driver_data = sw_sync_fill_driver_data, .timeline_value_str = sw_sync_timeline_value_str, @@ -89,7 +88,7 @@ struct sw_sync_timeline *sw_sync_timeline_create(const char *name) struct sw_sync_timeline *obj = (struct sw_sync_timeline *) fence_timeline_create(1, &sw_sync_timeline_ops, sizeof(struct sw_sync_timeline), - name); + "sw_sync", name); return obj; } diff --git a/drivers/staging/android/sync.c b/drivers/staging/android/sync.c index 6cddec9..c3386a6 100644 --- a/drivers/staging/android/sync.c +++ b/drivers/staging/android/sync.c @@ -321,13 +321,6 @@ int sync_fence_wait(struct sync_fence *sync_fence, long timeout) } EXPORT_SYMBOL(sync_fence_wait); -static const char *sync_fence_get_driver_name(struct fence *fence) -{ - struct fence_timeline *parent = fence_parent(fence); - - return parent->ops->driver_name; -} - static const char *sync_fence_get_timeline_name(struct fence *fence) { struct fence_timeline *parent = fence_parent(fence); @@ -383,7 +376,7 @@ static void sync_fence_timeline_value_str(struct fence *fence, } static const struct fence_ops sync_fence_ops = { - .get_driver_name = sync_fence_get_driver_name, + .get_driver_name = fence_default_get_driver_name, .get_timeline_name = sync_fence_get_timeline_name, .enable_signaling = fence_default_enable_signaling, .signaled = sync_fence_signaled, diff --git a/drivers/staging/android/sync_debug.c b/drivers/staging/android/sync_debug.c index b8602d2..db618ca 100644 --- a/drivers/staging/android/sync_debug.c +++ b/drivers/staging/android/sync_debug.c @@ -133,7 +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->ops->driver_name); + seq_printf(s, "%s %s", obj->name, obj->drv_name); if (obj->ops->timeline_value_str) { char value[64]; diff --git a/include/linux/fence.h b/include/linux/fence.h index 0c97014..f355c28a 100644 --- a/include/linux/fence.h +++ b/include/linux/fence.h @@ -36,7 +36,6 @@ struct fence_ops; struct fence_cb; /** * struct fence_timeline_ops - fence context implementation ops - * @driver_name: name of the implementation * @has_signaled: returns: * 1 if pt has signaled * 0 if pt has not signaled @@ -49,8 +48,6 @@ struct fence_cb; * @pt_value_str: fill str with the value of the sync_pt */ struct fence_timeline_ops { - const char *driver_name; - /* required */ int (*has_signaled)(struct fence *fence); @@ -80,6 +77,7 @@ struct fence_timeline_ops { struct fence_timeline { struct kref kref; char name[32]; + char drv_name[32]; const struct fence_timeline_ops *ops; bool destroyed; int value; @@ -94,7 +92,8 @@ struct fence_timeline { struct fence_timeline *fence_timeline_create(unsigned num, struct fence_timeline_ops *ops, - int size, const char *name); + int size, const char *drv_name, + const char *name); void fence_timeline_get(struct fence_timeline *timeline); void fence_timeline_put(struct fence_timeline *timeline); void fence_timeline_destroy(struct fence_timeline *timeline); @@ -295,6 +294,7 @@ static inline void fence_put(struct fence *fence) int fence_signal(struct fence *fence); int fence_signal_locked(struct fence *fence); +const char *fence_default_get_driver_name(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); -- 2.5.0 _______________________________________________ devel mailing list devel@xxxxxxxxxxxxxxxxxxxxxx http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel