From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.1 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_PASS, URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id E61AEC43381 for ; Wed, 27 Mar 2019 19:18:49 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id B0EE32064A for ; Wed, 27 Mar 2019 19:18:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1553714329; bh=U99Mo/Q91e3RNz7SrxPPvitkAUQH/eUfMXyKA0WCGrk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:List-ID:From; b=2RQnMHyTV3dXQEw4UwJY5pxQOvkHZzmILUTEpWx88t2M9eZMmChjw6orjwZ+vTEMD GIOOC8eKWZjr7/iUtVDFa3eMutplZs7UNZDf8FJvNrgIOIc8jQAVg8Bgl5yVzVwyVL ETaD1uqgXIDTUHX45otIFpGltm7Dfew5DOxYyIoI= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388470AbfC0TSr (ORCPT ); Wed, 27 Mar 2019 15:18:47 -0400 Received: from mail.kernel.org ([198.145.29.99]:49970 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388278AbfC0SIA (ORCPT ); Wed, 27 Mar 2019 14:08:00 -0400 Received: from sasha-vm.mshome.net (c-73-47-72-35.hsd1.nh.comcast.net [73.47.72.35]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id ED3FF2183F; Wed, 27 Mar 2019 18:07:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1553710079; bh=U99Mo/Q91e3RNz7SrxPPvitkAUQH/eUfMXyKA0WCGrk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=MydxmlNCWcVyFeVwC7BeUuH7PjD+TtDK9oG6eYs9nwmkijM3qwOaOpTjLG9tvZios gEZ9aACF8o/+49CIC5MBib2VDPSs8eM3d/pppodjMpWnb6IFRhYB+O/FuTRR9R15yp 6a2tyIgyfA0vlzYLukeqP2UNd3DdDzCojP/EI6/M= From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Shayenne Moura , Daniel Vetter , Rodrigo Siqueira , Sasha Levin , dri-devel@lists.freedesktop.org Subject: [PATCH AUTOSEL 5.0 189/262] drm/vkms: Bugfix extra vblank frame Date: Wed, 27 Mar 2019 14:00:44 -0400 Message-Id: <20190327180158.10245-189-sashal@kernel.org> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20190327180158.10245-1-sashal@kernel.org> References: <20190327180158.10245-1-sashal@kernel.org> MIME-Version: 1.0 X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Shayenne Moura [ Upstream commit def35e7c592616bc09be328de8795e5e624a3cf8 ] kms_flip tests are breaking on vkms when simulate vblank because vblank event sequence count returns one extra frame after arm vblank event to make a page flip. When vblank interrupt happens, userspace processes the vblank event and issues the next page flip command. Kernel calls queue_work to call commit_planes and arm the new page flip. The next vblank picks up the newly armed vblank event and vblank interrupt happens again. The arm and vblank event are asynchronous, then, on the next vblank, we receive x+2 from `get_vblank_timestamp`, instead x+1, although timestamp and vblank seqno matches. Function `get_vblank_timestamp` is reached by 2 ways: - from `drm_mode_page_flip_ioctl`: driver is doing one atomic operation to synchronize planes in the same output. There is no vblank simulation, the `drm_crtc_arm_vblank_event` function adds 1 on vblank count, and the variable in_vblank_irq is false - from `vkms_vblank_simulate`: since the driver is doing a vblank simulation, the variable in_vblank_irq is true. Fix this problem subtracting one vblank period from vblank_time when `get_vblank_timestamp` is called from trace `drm_mode_page_flip_ioctl`, i.e., is not a real vblank interrupt, and getting the timestamp and vblank seqno when it is a real vblank interrupt. The reason for all this is that get_vblank_timestamp always supplies the timestamp for the next vblank event. The hrtimer is the vblank simulator, and it needs the correct previous value to present the next vblank. Since this is how hw timestamp registers work and what the vblank core expects. Signed-off-by: Shayenne Moura Signed-off-by: Daniel Vetter Reviewed-by: Rodrigo Siqueira Signed-off-by: Rodrigo Siqueira Link: https://patchwork.freedesktop.org/patch/msgid/171e6e1c239cbca0c3df7183ed8acdfeeace9cf4.1548856186.git.shayenneluzmoura@gmail.com Signed-off-by: Sasha Levin --- drivers/gpu/drm/vkms/vkms_crtc.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/gpu/drm/vkms/vkms_crtc.c b/drivers/gpu/drm/vkms/vkms_crtc.c index 53ab49408a98..a0bef7de9df7 100644 --- a/drivers/gpu/drm/vkms/vkms_crtc.c +++ b/drivers/gpu/drm/vkms/vkms_crtc.c @@ -75,6 +75,9 @@ bool vkms_get_vblank_timestamp(struct drm_device *dev, unsigned int pipe, *vblank_time = output->vblank_hrtimer.node.expires; + if (!in_vblank_irq) + *vblank_time -= output->period_ns; + return true; } -- 2.19.1 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sasha Levin Subject: [PATCH AUTOSEL 5.0 189/262] drm/vkms: Bugfix extra vblank frame Date: Wed, 27 Mar 2019 14:00:44 -0400 Message-ID: <20190327180158.10245-189-sashal@kernel.org> References: <20190327180158.10245-1-sashal@kernel.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by gabe.freedesktop.org (Postfix) with ESMTPS id E4E7D6E284 for ; Wed, 27 Mar 2019 18:07:59 +0000 (UTC) In-Reply-To: <20190327180158.10245-1-sashal@kernel.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Sasha Levin , Shayenne Moura , dri-devel@lists.freedesktop.org, Rodrigo Siqueira , Daniel Vetter List-Id: dri-devel@lists.freedesktop.org RnJvbTogU2hheWVubmUgTW91cmEgPHNoYXllbm5lbHV6bW91cmFAZ21haWwuY29tPgoKWyBVcHN0 cmVhbSBjb21taXQgZGVmMzVlN2M1OTI2MTZiYzA5YmUzMjhkZTg3OTVlNWU2MjRhM2NmOCBdCgpr bXNfZmxpcCB0ZXN0cyBhcmUgYnJlYWtpbmcgb24gdmttcyB3aGVuIHNpbXVsYXRlIHZibGFuayBi ZWNhdXNlIHZibGFuawpldmVudCBzZXF1ZW5jZSBjb3VudCByZXR1cm5zIG9uZSBleHRyYSBmcmFt ZSBhZnRlciBhcm0gdmJsYW5rIGV2ZW50IHRvCm1ha2UgYSBwYWdlIGZsaXAuCgpXaGVuIHZibGFu ayBpbnRlcnJ1cHQgaGFwcGVucywgdXNlcnNwYWNlIHByb2Nlc3NlcyB0aGUgdmJsYW5rIGV2ZW50 IGFuZAppc3N1ZXMgdGhlIG5leHQgcGFnZSBmbGlwIGNvbW1hbmQuIEtlcm5lbCBjYWxscyBxdWV1 ZV93b3JrIHRvIGNhbGwKY29tbWl0X3BsYW5lcyBhbmQgYXJtIHRoZSBuZXcgcGFnZSBmbGlwLiBU aGUgbmV4dCB2YmxhbmsgcGlja3MgdXAgdGhlCm5ld2x5IGFybWVkIHZibGFuayBldmVudCBhbmQg dmJsYW5rIGludGVycnVwdCBoYXBwZW5zIGFnYWluLgoKVGhlIGFybSBhbmQgdmJsYW5rIGV2ZW50 IGFyZSBhc3luY2hyb25vdXMsIHRoZW4sIG9uIHRoZSBuZXh0IHZibGFuaywgd2UKcmVjZWl2ZSB4 KzIgZnJvbSBgZ2V0X3ZibGFua190aW1lc3RhbXBgLCBpbnN0ZWFkIHgrMSwgYWx0aG91Z2ggdGlt ZXN0YW1wCmFuZCB2Ymxhbmsgc2Vxbm8gbWF0Y2hlcy4KCkZ1bmN0aW9uIGBnZXRfdmJsYW5rX3Rp bWVzdGFtcGAgaXMgcmVhY2hlZCBieSAyIHdheXM6CgogIC0gZnJvbSBgZHJtX21vZGVfcGFnZV9m bGlwX2lvY3RsYDogZHJpdmVyIGlzIGRvaW5nIG9uZSBhdG9taWMKICAgIG9wZXJhdGlvbiB0byBz eW5jaHJvbml6ZSBwbGFuZXMgaW4gdGhlIHNhbWUgb3V0cHV0LiBUaGVyZSBpcyBubwogICAgdmJs YW5rIHNpbXVsYXRpb24sIHRoZSBgZHJtX2NydGNfYXJtX3ZibGFua19ldmVudGAgZnVuY3Rpb24g YWRkcyAxCiAgICBvbiB2YmxhbmsgY291bnQsIGFuZCB0aGUgdmFyaWFibGUgaW5fdmJsYW5rX2ly cSBpcyBmYWxzZQogIC0gZnJvbSBgdmttc192Ymxhbmtfc2ltdWxhdGVgOiBzaW5jZSB0aGUgZHJp dmVyIGlzIGRvaW5nIGEgdmJsYW5rCiAgICBzaW11bGF0aW9uLCB0aGUgdmFyaWFibGUgaW5fdmJs YW5rX2lycSBpcyB0cnVlLgoKRml4IHRoaXMgcHJvYmxlbSBzdWJ0cmFjdGluZyBvbmUgdmJsYW5r IHBlcmlvZCBmcm9tIHZibGFua190aW1lIHdoZW4KYGdldF92YmxhbmtfdGltZXN0YW1wYCBpcyBj YWxsZWQgZnJvbSB0cmFjZSBgZHJtX21vZGVfcGFnZV9mbGlwX2lvY3RsYCwKaS5lLiwgaXMgbm90 IGEgcmVhbCB2YmxhbmsgaW50ZXJydXB0LCBhbmQgZ2V0dGluZyB0aGUgdGltZXN0YW1wIGFuZAp2 Ymxhbmsgc2Vxbm8gd2hlbiBpdCBpcyBhIHJlYWwgdmJsYW5rIGludGVycnVwdC4KClRoZSByZWFz b24gZm9yIGFsbCB0aGlzIGlzIHRoYXQgZ2V0X3ZibGFua190aW1lc3RhbXAgYWx3YXlzIHN1cHBs aWVzIHRoZQp0aW1lc3RhbXAgZm9yIHRoZSBuZXh0IHZibGFuayBldmVudC4gVGhlIGhydGltZXIg aXMgdGhlIHZibGFuawpzaW11bGF0b3IsIGFuZCBpdCBuZWVkcyB0aGUgY29ycmVjdCBwcmV2aW91 cyB2YWx1ZSB0byBwcmVzZW50IHRoZSBuZXh0CnZibGFuay4gU2luY2UgdGhpcyBpcyBob3cgaHcg dGltZXN0YW1wIHJlZ2lzdGVycyB3b3JrIGFuZCB3aGF0IHRoZQp2YmxhbmsgY29yZSBleHBlY3Rz LgoKU2lnbmVkLW9mZi1ieTogU2hheWVubmUgTW91cmEgPHNoYXllbm5lbHV6bW91cmFAZ21haWwu Y29tPgpTaWduZWQtb2ZmLWJ5OiBEYW5pZWwgVmV0dGVyIDxkYW5pZWwudmV0dGVyQGludGVsLmNv bT4KUmV2aWV3ZWQtYnk6IFJvZHJpZ28gU2lxdWVpcmEgPHJvZHJpZ29zaXF1ZWlyYW1lbG9AZ21h aWwuY29tPgpTaWduZWQtb2ZmLWJ5OiBSb2RyaWdvIFNpcXVlaXJhIDxyb2RyaWdvc2lxdWVpcmFt ZWxvQGdtYWlsLmNvbT4KTGluazogaHR0cHM6Ly9wYXRjaHdvcmsuZnJlZWRlc2t0b3Aub3JnL3Bh dGNoL21zZ2lkLzE3MWU2ZTFjMjM5Y2JjYTBjM2RmNzE4M2VkOGFjZGZlZWFjZTljZjQuMTU0ODg1 NjE4Ni5naXQuc2hheWVubmVsdXptb3VyYUBnbWFpbC5jb20KU2lnbmVkLW9mZi1ieTogU2FzaGEg TGV2aW4gPHNhc2hhbEBrZXJuZWwub3JnPgotLS0KIGRyaXZlcnMvZ3B1L2RybS92a21zL3ZrbXNf Y3J0Yy5jIHwgMyArKysKIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKykKCmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vdmttcy92a21zX2NydGMuYyBiL2RyaXZlcnMvZ3B1L2RybS92 a21zL3ZrbXNfY3J0Yy5jCmluZGV4IDUzYWI0OTQwOGE5OC4uYTBiZWY3ZGU5ZGY3IDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vdmttcy92a21zX2NydGMuYworKysgYi9kcml2ZXJzL2dwdS9k cm0vdmttcy92a21zX2NydGMuYwpAQCAtNzUsNiArNzUsOSBAQCBib29sIHZrbXNfZ2V0X3ZibGFu a190aW1lc3RhbXAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHBpcGUsCiAK IAkqdmJsYW5rX3RpbWUgPSBvdXRwdXQtPnZibGFua19ocnRpbWVyLm5vZGUuZXhwaXJlczsKIAor CWlmICghaW5fdmJsYW5rX2lycSkKKwkJKnZibGFua190aW1lIC09IG91dHB1dC0+cGVyaW9kX25z OworCiAJcmV0dXJuIHRydWU7CiB9CiAKLS0gCjIuMTkuMQoKX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2 ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21h aWxtYW4vbGlzdGluZm8vZHJpLWRldmVs