From patchwork Fri Jan 15 14:55:28 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gustavo Padovan X-Patchwork-Id: 8041951 Return-Path: X-Original-To: patchwork-dri-devel@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 63E9DBEEE1 for ; Fri, 15 Jan 2016 14:57:00 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 4E4DA20434 for ; Fri, 15 Jan 2016 14:56:59 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) by mail.kernel.org (Postfix) with ESMTP id 07A942044B for ; Fri, 15 Jan 2016 14:56:58 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 27E9C7A0EB; Fri, 15 Jan 2016 06:56:57 -0800 (PST) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-yk0-f173.google.com (mail-yk0-f173.google.com [209.85.160.173]) by gabe.freedesktop.org (Postfix) with ESMTPS id BA5D57A0F7 for ; Fri, 15 Jan 2016 06:56:55 -0800 (PST) Received: by mail-yk0-f173.google.com with SMTP id a85so467190399ykb.1 for ; Fri, 15 Jan 2016 06:56:55 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=8DxDLz9hy+kJl0qIskTBiQsvIRrt7OydwZ1GqtgOX8A=; b=jAXDazQJh1sVPiHqVgMBRFyZSC873b/dGDEZ55L16e/YkKqmgHaCz36xXkLe6BXhg/ rPvqoI1Giky6oUy/ZEuSsSULi2zDrG5jsFzSVACw179KfwHYgXYi/5ndrAfmYJs2ytPZ rAwcTPweQYCNAoeNqlhtrjXEwzOfWMvUtyD68vuOCun4uwx7QgPRbHMI1I/FwVsPWGi/ RsVUmVnf+Ny2PGdYrBGZmuSjRItzNt8NwXNClN7jHCvdUmG4NDAmuNwgGiyqI752S+dy BJxLT5xi4DEqGglZXxYwpAu0gcuCiaP7cEox9PTY10QMjk3vFdddf8lnXjzHr6Vq5ov/ I09w== X-Gm-Message-State: ALoCoQlY6RzFrahdD+29bCJ9q+50NF09Ht0mbNJ2Z76lU0w+6G0QiKMvrZrOD7Tl/8N1HL21PxaBHtE1o4G0RmJXipSwL2OB9A== X-Received: by 10.129.80.7 with SMTP id e7mr8091198ywb.329.1452869814999; Fri, 15 Jan 2016 06:56:54 -0800 (PST) Received: from jade.localdomain ([2804:14c:487:41f:6257:18ff:feab:2e8f]) by smtp.gmail.com with ESMTPSA id o123sm8267717ywd.2.2016.01.15.06.56.49 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 15 Jan 2016 06:56:52 -0800 (PST) From: Gustavo Padovan To: Greg Kroah-Hartman Subject: [RFC 18/29] dma-buf/fence: create default .fence_value_str() and .timeline_value_str() Date: Fri, 15 Jan 2016 12:55:28 -0200 Message-Id: <1452869739-3304-19-git-send-email-gustavo@padovan.org> X-Mailer: git-send-email 2.5.0 In-Reply-To: <1452869739-3304-1-git-send-email-gustavo@padovan.org> References: <1452869739-3304-1-git-send-email-gustavo@padovan.org> Cc: devel@driverdev.osuosl.org, daniels@collabora.com, Daniel Vetter , Riley Andrews , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, =?UTF-8?q?Arve=20Hj=C3=B8nnev=C3=A5g?= , Maarten Lankhorst , Gustavo Padovan , John Harrison X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" X-Spam-Status: No, score=-4.2 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_MED, RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Gustavo Padovan Provide simple default functions to help users retrieve the values of the fence and the timeline. Signed-off-by: Gustavo Padovan --- 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,