Merge "msm: kgsl: Fix the syncpoint_fence trace"
This commit is contained in:
commit
e81d17ff12
1 changed files with 17 additions and 11 deletions
|
@ -1,4 +1,4 @@
|
||||||
/* Copyright (c) 2016, The Linux Foundation. All rights reserved.
|
/* Copyright (c) 2016-2017, The Linux Foundation. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License version 2 and
|
* it under the terms of the GNU General Public License version 2 and
|
||||||
|
@ -348,7 +348,13 @@ static int drawobj_add_sync_fence(struct kgsl_device *device,
|
||||||
struct kgsl_cmd_syncpoint_fence *sync = priv;
|
struct kgsl_cmd_syncpoint_fence *sync = priv;
|
||||||
struct kgsl_drawobj *drawobj = DRAWOBJ(syncobj);
|
struct kgsl_drawobj *drawobj = DRAWOBJ(syncobj);
|
||||||
struct kgsl_drawobj_sync_event *event;
|
struct kgsl_drawobj_sync_event *event;
|
||||||
|
struct sync_fence *fence = NULL;
|
||||||
unsigned int id;
|
unsigned int id;
|
||||||
|
int ret = 0;
|
||||||
|
|
||||||
|
fence = sync_fence_fdget(sync->fd);
|
||||||
|
if (fence == NULL)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
kref_get(&drawobj->refcount);
|
kref_get(&drawobj->refcount);
|
||||||
|
|
||||||
|
@ -364,11 +370,13 @@ static int drawobj_add_sync_fence(struct kgsl_device *device,
|
||||||
|
|
||||||
set_bit(event->id, &syncobj->pending);
|
set_bit(event->id, &syncobj->pending);
|
||||||
|
|
||||||
|
trace_syncpoint_fence(syncobj, fence->name);
|
||||||
|
|
||||||
event->handle = kgsl_sync_fence_async_wait(sync->fd,
|
event->handle = kgsl_sync_fence_async_wait(sync->fd,
|
||||||
drawobj_sync_fence_func, event);
|
drawobj_sync_fence_func, event);
|
||||||
|
|
||||||
if (IS_ERR_OR_NULL(event->handle)) {
|
if (IS_ERR_OR_NULL(event->handle)) {
|
||||||
int ret = PTR_ERR(event->handle);
|
ret = PTR_ERR(event->handle);
|
||||||
|
|
||||||
clear_bit(event->id, &syncobj->pending);
|
clear_bit(event->id, &syncobj->pending);
|
||||||
event->handle = NULL;
|
event->handle = NULL;
|
||||||
|
@ -376,18 +384,16 @@ static int drawobj_add_sync_fence(struct kgsl_device *device,
|
||||||
drawobj_put(drawobj);
|
drawobj_put(drawobj);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If ret == 0 the fence was already signaled - print a trace
|
* Print a syncpoint_fence_expire trace if
|
||||||
* message so we can track that
|
* the fence is already signaled or there is
|
||||||
|
* a failure in registering the fence waiter.
|
||||||
*/
|
*/
|
||||||
if (ret == 0)
|
trace_syncpoint_fence_expire(syncobj, (ret < 0) ?
|
||||||
trace_syncpoint_fence_expire(syncobj, "signaled");
|
"error" : fence->name);
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
trace_syncpoint_fence(syncobj, event->handle->name);
|
sync_fence_put(fence);
|
||||||
|
return ret;
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* drawobj_add_sync_timestamp() - Add a new sync point for a sync obj
|
/* drawobj_add_sync_timestamp() - Add a new sync point for a sync obj
|
||||||
|
|
Loading…
Add table
Reference in a new issue