diff mbox

[2/7] staging/android: display sync_pt name on debugfs

Message ID 1466437993-21573-3-git-send-email-gustavo@padovan.org (mailing list archive)
State New, archived
Headers show

Commit Message

Gustavo Padovan June 20, 2016, 3:53 p.m. UTC
From: Gustavo Padovan <gustavo.padovan@collabora.co.uk>

When creating a sync_pt the name received wasn't used anywhere.
Now we add it to the sync info debug output to make it easier to indetify
the userspace name of that sync pt.

Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk>
---
 drivers/staging/android/sw_sync.c    | 16 ++++------------
 drivers/staging/android/sync_debug.c |  5 +++--
 drivers/staging/android/sync_debug.h |  9 +++++++++
 3 files changed, 16 insertions(+), 14 deletions(-)

Comments

Maarten Lankhorst Aug. 8, 2016, 9:34 a.m. UTC | #1
Op 20-06-16 om 17:53 schreef Gustavo Padovan:
> From: Gustavo Padovan <gustavo.padovan@collabora.co.uk>
>
> When creating a sync_pt the name received wasn't used anywhere.
> Now we add it to the sync info debug output to make it easier to indetify
> the userspace name of that sync pt.
>
> Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk>
> ---
>  drivers/staging/android/sw_sync.c    | 16 ++++------------
>  drivers/staging/android/sync_debug.c |  5 +++--
>  drivers/staging/android/sync_debug.h |  9 +++++++++
>  3 files changed, 16 insertions(+), 14 deletions(-)
>
> diff --git a/drivers/staging/android/sw_sync.c b/drivers/staging/android/sw_sync.c
> index b4ae092..ea27512 100644
> --- a/drivers/staging/android/sw_sync.c
> +++ b/drivers/staging/android/sw_sync.c
> @@ -37,15 +37,6 @@ struct sw_sync_create_fence_data {
>  		struct sw_sync_create_fence_data)
>  #define SW_SYNC_IOC_INC			_IOW(SW_SYNC_IOC_MAGIC, 1, __u32)
>  
> -static const struct fence_ops timeline_fence_ops;
> -
> -static inline struct sync_pt *fence_to_sync_pt(struct fence *fence)
> -{
> -	if (fence->ops != &timeline_fence_ops)
> -		return NULL;
> -	return container_of(fence, struct sync_pt, base);
> -}
> -
>  struct sync_timeline *sync_timeline_create(const char *name)
>  {
>  	struct sync_timeline *obj;
> @@ -108,7 +99,7 @@ static void sync_timeline_signal(struct sync_timeline *obj, unsigned int inc)
>  }
>  
>  static struct sync_pt *sync_pt_create(struct sync_timeline *obj, int size,
> -			     unsigned int value)
> +			     unsigned int value, char *name)
>  {
>  	unsigned long flags;
>  	struct sync_pt *pt;
> @@ -120,6 +111,7 @@ static struct sync_pt *sync_pt_create(struct sync_timeline *obj, int size,
>  	if (!pt)
>  		return NULL;
>  
> +	strlcpy(pt->name, name, sizeof(pt->name));
>  	spin_lock_irqsave(&obj->child_list_lock, flags);
>  	sync_timeline_get(obj);
>  	fence_init(&pt->base, &timeline_fence_ops, &obj->child_list_lock,
> @@ -191,7 +183,7 @@ static void timeline_fence_timeline_value_str(struct fence *fence,
>  	snprintf(str, size, "%d", parent->value);
>  }
>  
> -static const struct fence_ops timeline_fence_ops = {
> +const struct fence_ops timeline_fence_ops = {
>  	.get_driver_name = timeline_fence_get_driver_name,
>  	.get_timeline_name = timeline_fence_get_timeline_name,
>  	.enable_signaling = timeline_fence_enable_signaling,
> @@ -252,7 +244,7 @@ static long sw_sync_ioctl_create_fence(struct sync_timeline *obj,
>  		goto err;
>  	}
>  
> -	pt = sync_pt_create(obj, sizeof(*pt), data.value);
> +	pt = sync_pt_create(obj, sizeof(*pt), data.value, data.name);
>  	if (!pt) {
>  		err = -ENOMEM;
>  		goto err;
> diff --git a/drivers/staging/android/sync_debug.c b/drivers/staging/android/sync_debug.c
> index 4c5a855..b732ea3 100644
> --- a/drivers/staging/android/sync_debug.c
> +++ b/drivers/staging/android/sync_debug.c
> @@ -75,13 +75,14 @@ static void sync_print_fence(struct seq_file *s, struct fence *fence, bool show)
>  {
>  	int status = 1;
>  	struct sync_timeline *parent = fence_parent(fence);
> +	struct sync_pt *pt = fence_to_sync_pt(fence);
>  
>  	if (fence_is_signaled_locked(fence))
>  		status = fence->status;
>  
> -	seq_printf(s, "  %s%sfence %s",
> +	seq_printf(s, "  %s%sfence %s %s",
>  		   show ? parent->name : "",
> -		   show ? "_" : "",
> +		   show ? "_" : "", pt->name,
>  		   sync_status_str(status));
>  
NAK,
A fence in sync_print_fence can be of any type. If you want to print the name, use the fence_value_str callback.

~Maarten
Gustavo Padovan Aug. 8, 2016, 7:59 p.m. UTC | #2
2016-08-08 Maarten Lankhorst <maarten.lankhorst@linux.intel.com>:

> Op 20-06-16 om 17:53 schreef Gustavo Padovan:
> > From: Gustavo Padovan <gustavo.padovan@collabora.co.uk>
> >
> > When creating a sync_pt the name received wasn't used anywhere.
> > Now we add it to the sync info debug output to make it easier to indetify
> > the userspace name of that sync pt.
> >
> > Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk>
> > ---
> >  drivers/staging/android/sw_sync.c    | 16 ++++------------
> >  drivers/staging/android/sync_debug.c |  5 +++--
> >  drivers/staging/android/sync_debug.h |  9 +++++++++
> >  3 files changed, 16 insertions(+), 14 deletions(-)
> >
> > diff --git a/drivers/staging/android/sw_sync.c b/drivers/staging/android/sw_sync.c
> > index b4ae092..ea27512 100644
> > --- a/drivers/staging/android/sw_sync.c
> > +++ b/drivers/staging/android/sw_sync.c
> > @@ -37,15 +37,6 @@ struct sw_sync_create_fence_data {
> >  		struct sw_sync_create_fence_data)
> >  #define SW_SYNC_IOC_INC			_IOW(SW_SYNC_IOC_MAGIC, 1, __u32)
> >  
> > -static const struct fence_ops timeline_fence_ops;
> > -
> > -static inline struct sync_pt *fence_to_sync_pt(struct fence *fence)
> > -{
> > -	if (fence->ops != &timeline_fence_ops)
> > -		return NULL;
> > -	return container_of(fence, struct sync_pt, base);
> > -}
> > -
> >  struct sync_timeline *sync_timeline_create(const char *name)
> >  {
> >  	struct sync_timeline *obj;
> > @@ -108,7 +99,7 @@ static void sync_timeline_signal(struct sync_timeline *obj, unsigned int inc)
> >  }
> >  
> >  static struct sync_pt *sync_pt_create(struct sync_timeline *obj, int size,
> > -			     unsigned int value)
> > +			     unsigned int value, char *name)
> >  {
> >  	unsigned long flags;
> >  	struct sync_pt *pt;
> > @@ -120,6 +111,7 @@ static struct sync_pt *sync_pt_create(struct sync_timeline *obj, int size,
> >  	if (!pt)
> >  		return NULL;
> >  
> > +	strlcpy(pt->name, name, sizeof(pt->name));
> >  	spin_lock_irqsave(&obj->child_list_lock, flags);
> >  	sync_timeline_get(obj);
> >  	fence_init(&pt->base, &timeline_fence_ops, &obj->child_list_lock,
> > @@ -191,7 +183,7 @@ static void timeline_fence_timeline_value_str(struct fence *fence,
> >  	snprintf(str, size, "%d", parent->value);
> >  }
> >  
> > -static const struct fence_ops timeline_fence_ops = {
> > +const struct fence_ops timeline_fence_ops = {
> >  	.get_driver_name = timeline_fence_get_driver_name,
> >  	.get_timeline_name = timeline_fence_get_timeline_name,
> >  	.enable_signaling = timeline_fence_enable_signaling,
> > @@ -252,7 +244,7 @@ static long sw_sync_ioctl_create_fence(struct sync_timeline *obj,
> >  		goto err;
> >  	}
> >  
> > -	pt = sync_pt_create(obj, sizeof(*pt), data.value);
> > +	pt = sync_pt_create(obj, sizeof(*pt), data.value, data.name);
> >  	if (!pt) {
> >  		err = -ENOMEM;
> >  		goto err;
> > diff --git a/drivers/staging/android/sync_debug.c b/drivers/staging/android/sync_debug.c
> > index 4c5a855..b732ea3 100644
> > --- a/drivers/staging/android/sync_debug.c
> > +++ b/drivers/staging/android/sync_debug.c
> > @@ -75,13 +75,14 @@ static void sync_print_fence(struct seq_file *s, struct fence *fence, bool show)
> >  {
> >  	int status = 1;
> >  	struct sync_timeline *parent = fence_parent(fence);
> > +	struct sync_pt *pt = fence_to_sync_pt(fence);
> >  
> >  	if (fence_is_signaled_locked(fence))
> >  		status = fence->status;
> >  
> > -	seq_printf(s, "  %s%sfence %s",
> > +	seq_printf(s, "  %s%sfence %s %s",
> >  		   show ? parent->name : "",
> > -		   show ? "_" : "",
> > +		   show ? "_" : "", pt->name,
> >  		   sync_status_str(status));
> >  
> NAK,
> A fence in sync_print_fence can be of any type. If you want to print the name, use the fence_value_str callback.

Indeed. But fence_value_str doesn't return the sync_pt name, but the
seqno of that fence. I'll keep this change out for the de-staging and
then try to come with something that works better.

	Gustavo
Maarten Lankhorst Aug. 9, 2016, 10:04 a.m. UTC | #3
Op 08-08-16 om 21:59 schreef Gustavo Padovan:
> 2016-08-08 Maarten Lankhorst <maarten.lankhorst@linux.intel.com>:
>
>> Op 20-06-16 om 17:53 schreef Gustavo Padovan:
>>> From: Gustavo Padovan <gustavo.padovan@collabora.co.uk>
>>>
>>> When creating a sync_pt the name received wasn't used anywhere.
>>> Now we add it to the sync info debug output to make it easier to indetify
>>> the userspace name of that sync pt.
>>>
>>> Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk>
>>> ---
>>>  drivers/staging/android/sw_sync.c    | 16 ++++------------
>>>  drivers/staging/android/sync_debug.c |  5 +++--
>>>  drivers/staging/android/sync_debug.h |  9 +++++++++
>>>  3 files changed, 16 insertions(+), 14 deletions(-)
>>>
>>> diff --git a/drivers/staging/android/sw_sync.c b/drivers/staging/android/sw_sync.c
>>> index b4ae092..ea27512 100644
>>> --- a/drivers/staging/android/sw_sync.c
>>> +++ b/drivers/staging/android/sw_sync.c
>>> @@ -37,15 +37,6 @@ struct sw_sync_create_fence_data {
>>>  		struct sw_sync_create_fence_data)
>>>  #define SW_SYNC_IOC_INC			_IOW(SW_SYNC_IOC_MAGIC, 1, __u32)
>>>  
>>> -static const struct fence_ops timeline_fence_ops;
>>> -
>>> -static inline struct sync_pt *fence_to_sync_pt(struct fence *fence)
>>> -{
>>> -	if (fence->ops != &timeline_fence_ops)
>>> -		return NULL;
>>> -	return container_of(fence, struct sync_pt, base);
>>> -}
>>> -
>>>  struct sync_timeline *sync_timeline_create(const char *name)
>>>  {
>>>  	struct sync_timeline *obj;
>>> @@ -108,7 +99,7 @@ static void sync_timeline_signal(struct sync_timeline *obj, unsigned int inc)
>>>  }
>>>  
>>>  static struct sync_pt *sync_pt_create(struct sync_timeline *obj, int size,
>>> -			     unsigned int value)
>>> +			     unsigned int value, char *name)
>>>  {
>>>  	unsigned long flags;
>>>  	struct sync_pt *pt;
>>> @@ -120,6 +111,7 @@ static struct sync_pt *sync_pt_create(struct sync_timeline *obj, int size,
>>>  	if (!pt)
>>>  		return NULL;
>>>  
>>> +	strlcpy(pt->name, name, sizeof(pt->name));
>>>  	spin_lock_irqsave(&obj->child_list_lock, flags);
>>>  	sync_timeline_get(obj);
>>>  	fence_init(&pt->base, &timeline_fence_ops, &obj->child_list_lock,
>>> @@ -191,7 +183,7 @@ static void timeline_fence_timeline_value_str(struct fence *fence,
>>>  	snprintf(str, size, "%d", parent->value);
>>>  }
>>>  
>>> -static const struct fence_ops timeline_fence_ops = {
>>> +const struct fence_ops timeline_fence_ops = {
>>>  	.get_driver_name = timeline_fence_get_driver_name,
>>>  	.get_timeline_name = timeline_fence_get_timeline_name,
>>>  	.enable_signaling = timeline_fence_enable_signaling,
>>> @@ -252,7 +244,7 @@ static long sw_sync_ioctl_create_fence(struct sync_timeline *obj,
>>>  		goto err;
>>>  	}
>>>  
>>> -	pt = sync_pt_create(obj, sizeof(*pt), data.value);
>>> +	pt = sync_pt_create(obj, sizeof(*pt), data.value, data.name);
>>>  	if (!pt) {
>>>  		err = -ENOMEM;
>>>  		goto err;
>>> diff --git a/drivers/staging/android/sync_debug.c b/drivers/staging/android/sync_debug.c
>>> index 4c5a855..b732ea3 100644
>>> --- a/drivers/staging/android/sync_debug.c
>>> +++ b/drivers/staging/android/sync_debug.c
>>> @@ -75,13 +75,14 @@ static void sync_print_fence(struct seq_file *s, struct fence *fence, bool show)
>>>  {
>>>  	int status = 1;
>>>  	struct sync_timeline *parent = fence_parent(fence);
>>> +	struct sync_pt *pt = fence_to_sync_pt(fence);
>>>  
>>>  	if (fence_is_signaled_locked(fence))
>>>  		status = fence->status;
>>>  
>>> -	seq_printf(s, "  %s%sfence %s",
>>> +	seq_printf(s, "  %s%sfence %s %s",
>>>  		   show ? parent->name : "",
>>> -		   show ? "_" : "",
>>> +		   show ? "_" : "", pt->name,
>>>  		   sync_status_str(status));
>>>  
>> NAK,
>> A fence in sync_print_fence can be of any type. If you want to print the name, use the fence_value_str callback.
> Indeed. But fence_value_str doesn't return the sync_pt name, but the
> seqno of that fence. I'll keep this change out for the de-staging and
> then try to come with something that works better.
>
> 	Gustavo

This will probably cause a kernel panic if you keep it like it is and you look at
debugfs for non sync_pt fences, it should definitely be fixed before destaging.
Ignoring sync_pt name would be better than crashing.

~Maarten
Gustavo Padovan Aug. 9, 2016, 2:45 p.m. UTC | #4
2016-08-09 Maarten Lankhorst <maarten.lankhorst@linux.intel.com>:

> Op 08-08-16 om 21:59 schreef Gustavo Padovan:
> > 2016-08-08 Maarten Lankhorst <maarten.lankhorst@linux.intel.com>:
> >
> >> Op 20-06-16 om 17:53 schreef Gustavo Padovan:
> >>> From: Gustavo Padovan <gustavo.padovan@collabora.co.uk>
> >>>
> >>> When creating a sync_pt the name received wasn't used anywhere.
> >>> Now we add it to the sync info debug output to make it easier to indetify
> >>> the userspace name of that sync pt.
> >>>
> >>> Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk>
> >>> ---
> >>>  drivers/staging/android/sw_sync.c    | 16 ++++------------
> >>>  drivers/staging/android/sync_debug.c |  5 +++--
> >>>  drivers/staging/android/sync_debug.h |  9 +++++++++
> >>>  3 files changed, 16 insertions(+), 14 deletions(-)
> >>>
> >>> diff --git a/drivers/staging/android/sw_sync.c b/drivers/staging/android/sw_sync.c
> >>> index b4ae092..ea27512 100644
> >>> --- a/drivers/staging/android/sw_sync.c
> >>> +++ b/drivers/staging/android/sw_sync.c
> >>> @@ -37,15 +37,6 @@ struct sw_sync_create_fence_data {
> >>>  		struct sw_sync_create_fence_data)
> >>>  #define SW_SYNC_IOC_INC			_IOW(SW_SYNC_IOC_MAGIC, 1, __u32)
> >>>  
> >>> -static const struct fence_ops timeline_fence_ops;
> >>> -
> >>> -static inline struct sync_pt *fence_to_sync_pt(struct fence *fence)
> >>> -{
> >>> -	if (fence->ops != &timeline_fence_ops)
> >>> -		return NULL;
> >>> -	return container_of(fence, struct sync_pt, base);
> >>> -}
> >>> -
> >>>  struct sync_timeline *sync_timeline_create(const char *name)
> >>>  {
> >>>  	struct sync_timeline *obj;
> >>> @@ -108,7 +99,7 @@ static void sync_timeline_signal(struct sync_timeline *obj, unsigned int inc)
> >>>  }
> >>>  
> >>>  static struct sync_pt *sync_pt_create(struct sync_timeline *obj, int size,
> >>> -			     unsigned int value)
> >>> +			     unsigned int value, char *name)
> >>>  {
> >>>  	unsigned long flags;
> >>>  	struct sync_pt *pt;
> >>> @@ -120,6 +111,7 @@ static struct sync_pt *sync_pt_create(struct sync_timeline *obj, int size,
> >>>  	if (!pt)
> >>>  		return NULL;
> >>>  
> >>> +	strlcpy(pt->name, name, sizeof(pt->name));
> >>>  	spin_lock_irqsave(&obj->child_list_lock, flags);
> >>>  	sync_timeline_get(obj);
> >>>  	fence_init(&pt->base, &timeline_fence_ops, &obj->child_list_lock,
> >>> @@ -191,7 +183,7 @@ static void timeline_fence_timeline_value_str(struct fence *fence,
> >>>  	snprintf(str, size, "%d", parent->value);
> >>>  }
> >>>  
> >>> -static const struct fence_ops timeline_fence_ops = {
> >>> +const struct fence_ops timeline_fence_ops = {
> >>>  	.get_driver_name = timeline_fence_get_driver_name,
> >>>  	.get_timeline_name = timeline_fence_get_timeline_name,
> >>>  	.enable_signaling = timeline_fence_enable_signaling,
> >>> @@ -252,7 +244,7 @@ static long sw_sync_ioctl_create_fence(struct sync_timeline *obj,
> >>>  		goto err;
> >>>  	}
> >>>  
> >>> -	pt = sync_pt_create(obj, sizeof(*pt), data.value);
> >>> +	pt = sync_pt_create(obj, sizeof(*pt), data.value, data.name);
> >>>  	if (!pt) {
> >>>  		err = -ENOMEM;
> >>>  		goto err;
> >>> diff --git a/drivers/staging/android/sync_debug.c b/drivers/staging/android/sync_debug.c
> >>> index 4c5a855..b732ea3 100644
> >>> --- a/drivers/staging/android/sync_debug.c
> >>> +++ b/drivers/staging/android/sync_debug.c
> >>> @@ -75,13 +75,14 @@ static void sync_print_fence(struct seq_file *s, struct fence *fence, bool show)
> >>>  {
> >>>  	int status = 1;
> >>>  	struct sync_timeline *parent = fence_parent(fence);
> >>> +	struct sync_pt *pt = fence_to_sync_pt(fence);
> >>>  
> >>>  	if (fence_is_signaled_locked(fence))
> >>>  		status = fence->status;
> >>>  
> >>> -	seq_printf(s, "  %s%sfence %s",
> >>> +	seq_printf(s, "  %s%sfence %s %s",
> >>>  		   show ? parent->name : "",
> >>> -		   show ? "_" : "",
> >>> +		   show ? "_" : "", pt->name,
> >>>  		   sync_status_str(status));
> >>>  
> >> NAK,
> >> A fence in sync_print_fence can be of any type. If you want to print the name, use the fence_value_str callback.
> > Indeed. But fence_value_str doesn't return the sync_pt name, but the
> > seqno of that fence. I'll keep this change out for the de-staging and
> > then try to come with something that works better.
> >
> > 	Gustavo
> 
> This will probably cause a kernel panic if you keep it like it is and you look at
> debugfs for non sync_pt fences, it should definitely be fixed before destaging.
> Ignoring sync_pt name would be better than crashing.

No, I meant ignoring sync_pt name for now. I've already sent v2 without
it.

Gustavo
diff mbox

Patch

diff --git a/drivers/staging/android/sw_sync.c b/drivers/staging/android/sw_sync.c
index b4ae092..ea27512 100644
--- a/drivers/staging/android/sw_sync.c
+++ b/drivers/staging/android/sw_sync.c
@@ -37,15 +37,6 @@  struct sw_sync_create_fence_data {
 		struct sw_sync_create_fence_data)
 #define SW_SYNC_IOC_INC			_IOW(SW_SYNC_IOC_MAGIC, 1, __u32)
 
-static const struct fence_ops timeline_fence_ops;
-
-static inline struct sync_pt *fence_to_sync_pt(struct fence *fence)
-{
-	if (fence->ops != &timeline_fence_ops)
-		return NULL;
-	return container_of(fence, struct sync_pt, base);
-}
-
 struct sync_timeline *sync_timeline_create(const char *name)
 {
 	struct sync_timeline *obj;
@@ -108,7 +99,7 @@  static void sync_timeline_signal(struct sync_timeline *obj, unsigned int inc)
 }
 
 static struct sync_pt *sync_pt_create(struct sync_timeline *obj, int size,
-			     unsigned int value)
+			     unsigned int value, char *name)
 {
 	unsigned long flags;
 	struct sync_pt *pt;
@@ -120,6 +111,7 @@  static struct sync_pt *sync_pt_create(struct sync_timeline *obj, int size,
 	if (!pt)
 		return NULL;
 
+	strlcpy(pt->name, name, sizeof(pt->name));
 	spin_lock_irqsave(&obj->child_list_lock, flags);
 	sync_timeline_get(obj);
 	fence_init(&pt->base, &timeline_fence_ops, &obj->child_list_lock,
@@ -191,7 +183,7 @@  static void timeline_fence_timeline_value_str(struct fence *fence,
 	snprintf(str, size, "%d", parent->value);
 }
 
-static const struct fence_ops timeline_fence_ops = {
+const struct fence_ops timeline_fence_ops = {
 	.get_driver_name = timeline_fence_get_driver_name,
 	.get_timeline_name = timeline_fence_get_timeline_name,
 	.enable_signaling = timeline_fence_enable_signaling,
@@ -252,7 +244,7 @@  static long sw_sync_ioctl_create_fence(struct sync_timeline *obj,
 		goto err;
 	}
 
-	pt = sync_pt_create(obj, sizeof(*pt), data.value);
+	pt = sync_pt_create(obj, sizeof(*pt), data.value, data.name);
 	if (!pt) {
 		err = -ENOMEM;
 		goto err;
diff --git a/drivers/staging/android/sync_debug.c b/drivers/staging/android/sync_debug.c
index 4c5a855..b732ea3 100644
--- a/drivers/staging/android/sync_debug.c
+++ b/drivers/staging/android/sync_debug.c
@@ -75,13 +75,14 @@  static void sync_print_fence(struct seq_file *s, struct fence *fence, bool show)
 {
 	int status = 1;
 	struct sync_timeline *parent = fence_parent(fence);
+	struct sync_pt *pt = fence_to_sync_pt(fence);
 
 	if (fence_is_signaled_locked(fence))
 		status = fence->status;
 
-	seq_printf(s, "  %s%sfence %s",
+	seq_printf(s, "  %s%sfence %s %s",
 		   show ? parent->name : "",
-		   show ? "_" : "",
+		   show ? "_" : "", pt->name,
 		   sync_status_str(status));
 
 	if (status <= 0) {
diff --git a/drivers/staging/android/sync_debug.h b/drivers/staging/android/sync_debug.h
index c44f447..c14587c 100644
--- a/drivers/staging/android/sync_debug.h
+++ b/drivers/staging/android/sync_debug.h
@@ -43,10 +43,19 @@  static inline struct sync_timeline *fence_parent(struct fence *fence)
 
 struct sync_pt {
 	struct fence base;
+	char name[32];
 	struct list_head child_list;
 	struct list_head active_list;
 };
 
+extern const struct fence_ops timeline_fence_ops;
+static inline struct sync_pt *fence_to_sync_pt(struct fence *fence)
+{
+	if (fence->ops != &timeline_fence_ops)
+		return NULL;
+	return container_of(fence, struct sync_pt, base);
+}
+
 #ifdef CONFIG_SW_SYNC
 
 extern const struct file_operations sw_sync_debugfs_fops;