Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp329210yba; Wed, 8 May 2019 21:35:52 -0700 (PDT) X-Google-Smtp-Source: APXvYqzxP8qESc0cLsHbmAZOuUHcsPJ1bAXbvFpHWWAbX/5nB+n78LoYtnnq6n73HJ0Od51alnGg X-Received: by 2002:a17:902:aa85:: with SMTP id d5mr2276250plr.245.1557376552822; Wed, 08 May 2019 21:35:52 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1557376552; cv=none; d=google.com; s=arc-20160816; b=tiEfPlPb1/EgFPNZOEmIUgbW6RnWpG8xNoW+CEOD5wK9XMdQa1f+m1NNvASDWIj6wY ayKz5nKG03FsBjM8mQHN18YWhmXG2M/FdQqYSxPUUuQkXoauqxRjfUfKBKeNuIEVnPZn YuJtyFcf70g/aajo1pfIeDzD+Fi0BFc+S9T7mvrrGlyA304bZNru0W3vWkk2o8uYBHeU Whdw7yBWnZA9xz5VeuAYtv1vCSWjYvrBFQKGwPj6VXm3EM0EaTfSkRNpWm4Si+LgdpJF 5tMY7ElLHYMVbfJTEHVzJD8il16YwRum+BxijlpWUepRYKp4SM/HoHzG3hxSV/ozm8M6 YNOQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature; bh=TUGJ2U0A2v399my7K+20ZfwrAtvVzXgUK8GFLa6dde4=; b=g4IBdNwbqHOwDD0RRQeQnoZXoVOwrVzDxm6sOsddHGQkSAMtSS2iiRTox14NbuP2e7 DHbnr9BGm0IM0y6bu2qBbJFpAYfMT8au9R4ZFz0gaILr/ckCTxc9DBUfOxxBzD0d+mY1 4ySTZXn5pjohmHMxPzESYYHF1waKSfe4e+GbFCI+/n/XrH5EQqp4/UyTCEWtY8f/XMqB gjuwIVzlywRMvaE5qacvfazmF4ZK5nJY0dWxZmD0TGIXXY789oUN3WKwWmcCBghteKN/ FSiuLWw4bJ1UMd79Im/B3GYTgx6UH3Lme/LaC34/eWkrigSSGw20iYfhV+azauXj7/oJ +8DQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@imgtec.com header.s=dk201812 header.b=L96NZE2e; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id w126si1305079pfw.53.2019.05.08.21.35.34; Wed, 08 May 2019 21:35:52 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@imgtec.com header.s=dk201812 header.b=L96NZE2e; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1725992AbfEIEek (ORCPT + 99 others); Thu, 9 May 2019 00:34:40 -0400 Received: from mx08-00376f01.pphosted.com ([91.207.212.86]:49121 "EHLO mx08-00376f01.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725822AbfEIEek (ORCPT ); Thu, 9 May 2019 00:34:40 -0400 Received: from pps.filterd (m0168888.ppops.net [127.0.0.1]) by mx08-00376f01.pphosted.com (8.16.0.27/8.16.0.27) with SMTP id x494XFBm003700; Thu, 9 May 2019 05:34:28 +0100 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=imgtec.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-type; s=dk201812; bh=TUGJ2U0A2v399my7K+20ZfwrAtvVzXgUK8GFLa6dde4=; b=L96NZE2espTAXuQoSBjx6LHFL6m+wMKsIOpCTvYicbx9oKxHqxl9GRbtKux7Zto3fA8P g0+w8MKUIT7kdqCK2NAB1m9WeH/XpLlCk0W5vKgohHQYF2Yr42zdWs5jI0Tu481bm7OO hLKqQEQAWoM4UXG0pNxG+KNZPL+xKhhj6bKkXmfn58qqhKhLJ68mB818uNMSOFgyf88Q yv8cxuMywhwTG2i3cJ3w99z8dNFrXPhBMFigePXPHG1gc+jCjJHZ7I1qM1TH3jFjEhCO bbrZmEJY98hdOYxKB6Zsxdfa1XCL/Le73loxywaGPRaCTqBkPJZCxk2u65FBc1A94RFK CA== Received: from hhmail02.hh.imgtec.org ([217.156.249.195]) by mx08-00376f01.pphosted.com with ESMTP id 2scb9h03fr-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Thu, 09 May 2019 05:34:28 +0100 Received: from michael-imgtec.tp.imgtec.org (10.80.17.22) by hhmail02.hh.imgtec.org (10.100.10.21) with Microsoft SMTP Server (TLS) id 14.3.408.0; Thu, 9 May 2019 05:34:26 +0100 From: Michael Yang To: CC: , , , , , , Subject: [PATCH] sync_file: Return reasonable timestamp when merging signaled fences Date: Thu, 9 May 2019 12:34:11 +0800 Message-ID: <1557376451-20164-1-git-send-email-michael.yang@imgtec.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1554710495-6646-1-git-send-email-michael.yang@imgtec.com> References: <1554710495-6646-1-git-send-email-michael.yang@imgtec.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.80.17.22] Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org If all the sync points were signaled in both fences a and b, there was only one sync point in merged fence which is a_fence[0]. The Fence structure in android framework might be confused about timestamp if there were any sync points which were signaled after a_fence[0]. It might be more reasonable to use timestamp of last signaled sync point to represent the merged fence. The issue can be found from EGL extension ANDROID_get_frame_timestamps. Sometimes the return value of EGL_READS_DONE_TIME_ANDROID is head of the return value of EGL_RENDERING_COMPLETE_TIME_ANDROID. That means display/composition had been completed before rendering was completed that is incorrect. Some discussion can be found at: https://android-review.googlesource.com/c/kernel/common/+/907009 Signed-off-by: Michael Yang --- Hi, I didn't get response since I previously sent this a month ago. Could someone have a chance to look at it please? Thanks. drivers/dma-buf/sync_file.c | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/drivers/dma-buf/sync_file.c b/drivers/dma-buf/sync_file.c index 4f6305c..d46bfe1 100644 --- a/drivers/dma-buf/sync_file.c +++ b/drivers/dma-buf/sync_file.c @@ -274,8 +274,29 @@ static struct sync_file *sync_file_merge(const char *name, struct sync_file *a, for (; i_b < b_num_fences; i_b++) add_fence(fences, &i, b_fences[i_b]); - if (i == 0) - fences[i++] = dma_fence_get(a_fences[0]); + /* If all the sync pts were signaled, then adding the sync_pt who + * was the last signaled to the fence. + */ + if (i == 0) { + struct dma_fence *last_signaled_sync_pt = a_fences[0]; + int iter; + + for (iter = 1; iter < a_num_fences; iter++) { + if (ktime_compare(last_signaled_sync_pt->timestamp, + a_fences[iter]->timestamp) < 0) { + last_signaled_sync_pt = a_fences[iter]; + } + } + + for (iter = 0; iter < b_num_fences; iter++) { + if (ktime_compare(last_signaled_sync_pt->timestamp, + b_fences[iter]->timestamp) < 0) { + last_signaled_sync_pt = b_fences[iter]; + } + } + + fences[i++] = dma_fence_get(last_signaled_sync_pt); + } if (num_fences > i) { nfences = krealloc(fences, i * sizeof(*fences), -- 2.7.4