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 6E929C43381 for ; Wed, 27 Mar 2019 19:18:55 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 428002064A for ; Wed, 27 Mar 2019 19:18:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1553714335; bh=U4FrbHQVU5pAAR6QFdkGVBhH645KpOhMaj1MOvfwEtA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:List-ID:From; b=RiZiFhi722AkhPbiu7F9CrfWejuh22iVnVniwX4O96/V2l0NHhXJywHdLV6EiPwyh dTzQcmYKTNqO8BFmqiBY1a7dfaJw25q8MBruirclp98jmjkEOnwuETurH/EvC2r1th 4cqQPLUO0sGU2MtEM1IUqCEpF+IecpGxr0G3GCn0= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388555AbfC0TSx (ORCPT ); Wed, 27 Mar 2019 15:18:53 -0400 Received: from mail.kernel.org ([198.145.29.99]:49954 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388275AbfC0SH7 (ORCPT ); Wed, 27 Mar 2019 14:07:59 -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 C147D2184D; Wed, 27 Mar 2019 18:07:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1553710078; bh=U4FrbHQVU5pAAR6QFdkGVBhH645KpOhMaj1MOvfwEtA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=dhR3/Ad59opa0n03f0euYNt6oZmXB7ecQCk1fP4PMSPTJdASoCrGvWCdv5YKTpR3j HIbnT3dUUzgL2149pWPCD1D1wzZUpuGpsN/RDnOn0le0yGgMCn+kmFe9rb3XmykekR hBXI7Gh4uSmERzqDXO5EyUl8n93RrMgVzhxv7sgU= 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 188/262] drm/vkms: Bugfix racing hrtimer vblank handle Date: Wed, 27 Mar 2019 14:00:43 -0400 Message-Id: <20190327180158.10245-188-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 ba420afab565bdc7b028ddd4f222260f2de7a1db ] When the vblank irq happens, kernel time subsystem executes `vkms_vblank_simulate`. In parallel or not, it prepares all stuff necessary to the next vblank with arm, and it must flush these stuff before the next vblank irq. However, vblank counter is ahead when arm is executed in parallel with handle vblank. CPU 0: CPU 1: | | atomic_commit_tail is ongoing | | | | hrtimer: vkms_vblank_simulate() | | | drm_crtc_handle_vblank() | | drm_crtc_arm_vblank() | | | ->get_vblank_timestamp() | | | | hrtimer_forward_now() Then, we should guarantee that the vblank interval time is correct (not changed) before finish the vblank handle. Fix the bug including the call to `hrtimer_forward_now()` in the same lock of `drm_crtc_handle_vblank()` to ensure that the timestamp update is correct when finish the vblank handle. 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/e2e4b8f3a5cab7b2dba75bf1930f86b0a4ee08c9.1548856186.git.shayenneluzmoura@gmail.com Signed-off-by: Sasha Levin --- drivers/gpu/drm/vkms/vkms_crtc.c | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/drivers/gpu/drm/vkms/vkms_crtc.c b/drivers/gpu/drm/vkms/vkms_crtc.c index eb56ee893761..53ab49408a98 100644 --- a/drivers/gpu/drm/vkms/vkms_crtc.c +++ b/drivers/gpu/drm/vkms/vkms_crtc.c @@ -4,13 +4,17 @@ #include #include -static void _vblank_handle(struct vkms_output *output) +static enum hrtimer_restart vkms_vblank_simulate(struct hrtimer *timer) { + struct vkms_output *output = container_of(timer, struct vkms_output, + vblank_hrtimer); struct drm_crtc *crtc = &output->crtc; struct vkms_crtc_state *state = to_vkms_crtc_state(crtc->state); + int ret_overrun; bool ret; spin_lock(&output->lock); + ret = drm_crtc_handle_vblank(crtc); if (!ret) DRM_ERROR("vkms failure on handling vblank"); @@ -31,19 +35,9 @@ static void _vblank_handle(struct vkms_output *output) DRM_WARN("failed to queue vkms_crc_work_handle"); } - spin_unlock(&output->lock); -} - -static enum hrtimer_restart vkms_vblank_simulate(struct hrtimer *timer) -{ - struct vkms_output *output = container_of(timer, struct vkms_output, - vblank_hrtimer); - int ret_overrun; - - _vblank_handle(output); - ret_overrun = hrtimer_forward_now(&output->vblank_hrtimer, output->period_ns); + spin_unlock(&output->lock); return HRTIMER_RESTART; } -- 2.19.1 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sasha Levin Subject: [PATCH AUTOSEL 5.0 188/262] drm/vkms: Bugfix racing hrtimer vblank handle Date: Wed, 27 Mar 2019 14:00:43 -0400 Message-ID: <20190327180158.10245-188-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 AE11089CA0 for ; Wed, 27 Mar 2019 18:07:58 +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 cmVhbSBjb21taXQgYmE0MjBhZmFiNTY1YmRjN2IwMjhkZGQ0ZjIyMjI2MGYyZGU3YTFkYiBdCgpX aGVuIHRoZSB2YmxhbmsgaXJxIGhhcHBlbnMsIGtlcm5lbCB0aW1lIHN1YnN5c3RlbSBleGVjdXRl cwpgdmttc192Ymxhbmtfc2ltdWxhdGVgLiBJbiBwYXJhbGxlbCBvciBub3QsIGl0IHByZXBhcmVz IGFsbCBzdHVmZgpuZWNlc3NhcnkgdG8gdGhlIG5leHQgdmJsYW5rIHdpdGggYXJtLCBhbmQgaXQg bXVzdCBmbHVzaCB0aGVzZSBzdHVmZgpiZWZvcmUgdGhlIG5leHQgdmJsYW5rIGlycS4gSG93ZXZl ciwgdmJsYW5rIGNvdW50ZXIgaXMgYWhlYWQgd2hlbiBhcm0gaXMKZXhlY3V0ZWQgaW4gcGFyYWxs ZWwgd2l0aCBoYW5kbGUgdmJsYW5rLgoKQ1BVIDA6CQkJCQlDUFUgMToKIHwJCQkJCSB8CmF0b21p Y19jb21taXRfdGFpbCBpcyBvbmdvaW5nCQkgfAogfAkJCQkJIHwKIHwJCQkJCWhydGltZXI6IHZr bXNfdmJsYW5rX3NpbXVsYXRlKCkKIHwJCQkJCSB8CiB8CQkJCQlkcm1fY3J0Y19oYW5kbGVfdmJs YW5rKCkKIHwJCQkJCSB8CmRybV9jcnRjX2FybV92YmxhbmsoKQkJCSB8CiB8CQkJCQkgfAotPmdl dF92YmxhbmtfdGltZXN0YW1wKCkJCSB8CiB8CQkJCQkgfAogfAkJCQkJaHJ0aW1lcl9mb3J3YXJk X25vdygpCgpUaGVuLCB3ZSBzaG91bGQgZ3VhcmFudGVlIHRoYXQgdGhlIHZibGFuayBpbnRlcnZh bCB0aW1lIGlzIGNvcnJlY3QgKG5vdApjaGFuZ2VkKSBiZWZvcmUgZmluaXNoIHRoZSB2Ymxhbmsg aGFuZGxlLgoKRml4IHRoZSBidWcgaW5jbHVkaW5nIHRoZSBjYWxsIHRvIGBocnRpbWVyX2Zvcndh cmRfbm93KClgIGluIHRoZSBzYW1lCmxvY2sgb2YgYGRybV9jcnRjX2hhbmRsZV92YmxhbmsoKWAg dG8gZW5zdXJlIHRoYXQgdGhlIHRpbWVzdGFtcCB1cGRhdGUKaXMgY29ycmVjdCB3aGVuIGZpbmlz aCB0aGUgdmJsYW5rIGhhbmRsZS4KClNpZ25lZC1vZmYtYnk6IFNoYXllbm5lIE1vdXJhIDxzaGF5 ZW5uZWx1em1vdXJhQGdtYWlsLmNvbT4KU2lnbmVkLW9mZi1ieTogRGFuaWVsIFZldHRlciA8ZGFu aWVsLnZldHRlckBpbnRlbC5jb20+ClJldmlld2VkLWJ5OiBSb2RyaWdvIFNpcXVlaXJhIDxyb2Ry aWdvc2lxdWVpcmFtZWxvQGdtYWlsLmNvbT4KU2lnbmVkLW9mZi1ieTogUm9kcmlnbyBTaXF1ZWly YSA8cm9kcmlnb3NpcXVlaXJhbWVsb0BnbWFpbC5jb20+Ckxpbms6IGh0dHBzOi8vcGF0Y2h3b3Jr LmZyZWVkZXNrdG9wLm9yZy9wYXRjaC9tc2dpZC9lMmU0YjhmM2E1Y2FiN2IyZGJhNzViZjE5MzBm ODZiMGE0ZWUwOGM5LjE1NDg4NTYxODYuZ2l0LnNoYXllbm5lbHV6bW91cmFAZ21haWwuY29tClNp Z25lZC1vZmYtYnk6IFNhc2hhIExldmluIDxzYXNoYWxAa2VybmVsLm9yZz4KLS0tCiBkcml2ZXJz L2dwdS9kcm0vdmttcy92a21zX2NydGMuYyB8IDE4ICsrKysrKy0tLS0tLS0tLS0tLQogMSBmaWxl IGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgMTIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL3ZrbXMvdmttc19jcnRjLmMgYi9kcml2ZXJzL2dwdS9kcm0vdmttcy92 a21zX2NydGMuYwppbmRleCBlYjU2ZWU4OTM3NjEuLjUzYWI0OTQwOGE5OCAxMDA2NDQKLS0tIGEv ZHJpdmVycy9ncHUvZHJtL3ZrbXMvdmttc19jcnRjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Zr bXMvdmttc19jcnRjLmMKQEAgLTQsMTMgKzQsMTcgQEAKICNpbmNsdWRlIDxkcm0vZHJtX2F0b21p Y19oZWxwZXIuaD4KICNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+CiAKLXN0YXRpYyB2 b2lkIF92YmxhbmtfaGFuZGxlKHN0cnVjdCB2a21zX291dHB1dCAqb3V0cHV0KQorc3RhdGljIGVu dW0gaHJ0aW1lcl9yZXN0YXJ0IHZrbXNfdmJsYW5rX3NpbXVsYXRlKHN0cnVjdCBocnRpbWVyICp0 aW1lcikKIHsKKwlzdHJ1Y3Qgdmttc19vdXRwdXQgKm91dHB1dCA9IGNvbnRhaW5lcl9vZih0aW1l ciwgc3RydWN0IHZrbXNfb3V0cHV0LAorCQkJCQkJICB2YmxhbmtfaHJ0aW1lcik7CiAJc3RydWN0 IGRybV9jcnRjICpjcnRjID0gJm91dHB1dC0+Y3J0YzsKIAlzdHJ1Y3Qgdmttc19jcnRjX3N0YXRl ICpzdGF0ZSA9IHRvX3ZrbXNfY3J0Y19zdGF0ZShjcnRjLT5zdGF0ZSk7CisJaW50IHJldF9vdmVy cnVuOwogCWJvb2wgcmV0OwogCiAJc3Bpbl9sb2NrKCZvdXRwdXQtPmxvY2spOworCiAJcmV0ID0g ZHJtX2NydGNfaGFuZGxlX3ZibGFuayhjcnRjKTsKIAlpZiAoIXJldCkKIAkJRFJNX0VSUk9SKCJ2 a21zIGZhaWx1cmUgb24gaGFuZGxpbmcgdmJsYW5rIik7CkBAIC0zMSwxOSArMzUsOSBAQCBzdGF0 aWMgdm9pZCBfdmJsYW5rX2hhbmRsZShzdHJ1Y3Qgdmttc19vdXRwdXQgKm91dHB1dCkKIAkJCURS TV9XQVJOKCJmYWlsZWQgdG8gcXVldWUgdmttc19jcmNfd29ya19oYW5kbGUiKTsKIAl9CiAKLQlz cGluX3VubG9jaygmb3V0cHV0LT5sb2NrKTsKLX0KLQotc3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0 YXJ0IHZrbXNfdmJsYW5rX3NpbXVsYXRlKHN0cnVjdCBocnRpbWVyICp0aW1lcikKLXsKLQlzdHJ1 Y3Qgdmttc19vdXRwdXQgKm91dHB1dCA9IGNvbnRhaW5lcl9vZih0aW1lciwgc3RydWN0IHZrbXNf b3V0cHV0LAotCQkJCQkJICB2YmxhbmtfaHJ0aW1lcik7Ci0JaW50IHJldF9vdmVycnVuOwotCi0J X3ZibGFua19oYW5kbGUob3V0cHV0KTsKLQogCXJldF9vdmVycnVuID0gaHJ0aW1lcl9mb3J3YXJk X25vdygmb3V0cHV0LT52YmxhbmtfaHJ0aW1lciwKIAkJCQkJICBvdXRwdXQtPnBlcmlvZF9ucyk7 CisJc3Bpbl91bmxvY2soJm91dHB1dC0+bG9jayk7CiAKIAlyZXR1cm4gSFJUSU1FUl9SRVNUQVJU OwogfQotLSAKMi4xOS4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3Rv cC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmkt ZGV2ZWw=