Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ff68b65d authored by Jordan Crouse's avatar Jordan Crouse
Browse files

msm: kgsl: Save a copy of the fence name for syncpoint events



Android native fences have the annoying habit of disappearing before
we are done querying them. Instead of reaching into the fence struct
to find the name for the fence, copy it off at init time and use that
for our various logging needs.

CRs-fixed: 743080
Change-Id: Ic0dedbad21eddf71d5e8a086eea09c5201660f0a
Signed-off-by: default avatarJordan Crouse <jcrouse@codeaurora.org>
parent 0bdded6f
Loading
Loading
Loading
Loading
+7 −9
Original line number Diff line number Diff line
@@ -1526,10 +1526,10 @@ void kgsl_dump_syncpoints(struct kgsl_device *device,
			break;
		}
		case KGSL_CMD_SYNCPOINT_TYPE_FENCE:
			if (event->handle && event->handle->fence)
			if (event->handle)
				dev_err(device->dev, "  fence: [%p] %s\n",
					event->handle->fence,
					event->handle->fence->name);
					event->handle->name);
			else
				dev_err(device->dev, "  fence: invalid\n");
			break;
@@ -1790,12 +1790,9 @@ EXPORT_SYMBOL(kgsl_cmdbatch_destroy);
static void kgsl_cmdbatch_sync_fence_func(void *priv)
{
	struct kgsl_cmdbatch_sync_event *event = priv;
	char *name = "unknown";

	if (event->handle && event->handle->fence)
		name = event->handle->fence->name;

	trace_syncpoint_fence_expire(event->cmdbatch, name);
	trace_syncpoint_fence_expire(event->cmdbatch,
		event->handle ? event->handle->name : "unknown");

	kgsl_cmdbatch_sync_expire(event->device, event);
	/* Put events that have signaled */
@@ -1856,10 +1853,11 @@ static int kgsl_cmdbatch_add_sync_fence(struct kgsl_device *device,
	event->handle = kgsl_sync_fence_async_wait(sync->fd,
		kgsl_cmdbatch_sync_fence_func, event);


	if (IS_ERR_OR_NULL(event->handle)) {
		int ret = PTR_ERR(event->handle);

		event->handle = NULL;

		/* Failed to add the event to the async callback */
		kgsl_cmdbatch_sync_event_put(event);

@@ -1882,7 +1880,7 @@ static int kgsl_cmdbatch_add_sync_fence(struct kgsl_device *device,
		return ret;
	}

	trace_syncpoint_fence(cmdbatch, event->handle->fence->name);
	trace_syncpoint_fence(cmdbatch, event->handle->name);

	/*
	 * Event was successfully added to the synclist, the async
+4 −0
Original line number Diff line number Diff line
@@ -403,9 +403,13 @@ struct kgsl_sync_fence_waiter *kgsl_sync_fence_async_wait(int fd,
		sync_fence_put(fence);
		return ERR_PTR(-ENOMEM);
	}

	kwaiter->fence = fence;
	kwaiter->priv = priv;
	kwaiter->func = func;

	strlcpy(kwaiter->name, fence->name, sizeof(kwaiter->name));

	sync_fence_waiter_init((struct sync_fence_waiter *) kwaiter,
		kgsl_sync_callback);

+1 −0
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@ struct kgsl_sync_pt {
struct kgsl_sync_fence_waiter {
	struct sync_fence_waiter waiter;
	struct sync_fence *fence;
	char name[32];
	void (*func)(void *priv);
	void *priv;
};