From patchwork Wed Jan 14 05:55:46 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joonyoung Shim X-Patchwork-Id: 5625881 Return-Path: X-Original-To: patchwork-dri-devel@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork1.web.kernel.org (Postfix) with ESMTP id 5C3A09F357 for ; Wed, 14 Jan 2015 05:55:38 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 61E2F2022A for ; Wed, 14 Jan 2015 05:55:37 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) by mail.kernel.org (Postfix) with ESMTP id AA88520212 for ; Wed, 14 Jan 2015 05:55:35 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 44EC56E712; Tue, 13 Jan 2015 21:55:34 -0800 (PST) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mailout2.samsung.com (mailout2.samsung.com [203.254.224.25]) by gabe.freedesktop.org (Postfix) with ESMTP id EA2D46E712 for ; Tue, 13 Jan 2015 21:55:32 -0800 (PST) Received: from epcpsbgr1.samsung.com (u141.gpu120.samsung.co.kr [203.254.230.141]) by mailout2.samsung.com (Oracle Communications Messaging Server 7u4-24.01 (7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTP id <0NI500DACKGJUYA0@mailout2.samsung.com> for dri-devel@lists.freedesktop.org; Wed, 14 Jan 2015 14:55:31 +0900 (KST) Received: from epcpsbgm1.samsung.com ( [172.20.52.112]) by epcpsbgr1.samsung.com (EPCPMTA) with SMTP id 00.D3.17016.1D406B45; Wed, 14 Jan 2015 14:55:29 +0900 (KST) X-AuditID: cbfee68d-f79296d000004278-77-54b604d189ea Received: from epmmp1.local.host ( [203.254.227.16]) by epcpsbgm1.samsung.com (EPCPMTA) with SMTP id 6E.85.20081.1D406B45; Wed, 14 Jan 2015 14:55:29 +0900 (KST) Received: from localhost.localdomain ([10.252.81.123]) by mmp1.samsung.com (Oracle Communications Messaging Server 7u4-24.01 (7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTPA id <0NI5005IYKGGMLH0@mmp1.samsung.com>; Wed, 14 Jan 2015 14:55:29 +0900 (KST) From: Joonyoung Shim To: dri-devel@lists.freedesktop.org Subject: [PATCH] drm/exynos: fix warning of vblank reference count Date: Wed, 14 Jan 2015 14:55:46 +0900 Message-id: <1421214946-31156-1-git-send-email-jy0922.shim@samsung.com> X-Mailer: git-send-email 1.9.1 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFtrKLMWRmVeSWpSXmKPExsWyRsSkQPciy7YQg69b5S2ufH3PZjHp/gQW ixf3LrJYnG16w25xYcVGdospiw6zWsyY/JLNgd3jfvdxJo++LasYA5iiuGxSUnMyy1KL9O0S uDJ+nFEp2CFXcXH+NaYGxhVSXYycHBICJhJTH99gg7DFJC7cWw9kc3EICSxllOhaO40JpujZ 8g5miMQiRonLs36zgySEBNqYJHadDwGx2QT0JO5sOw7WICKgLPF34ipGkAZmgZmMEpc2t4Gt EBZwktjaPgvMZhFQldgy5SiYzSvgLnFl001GiG1yEiePTWYFaZYQeM0mcXz6XlaIBgGJb5MP sXQxcgAlZCU2HWCGqJeUOLjiBssERsEFjAyrGEVTC5ILipPSiwz1ihNzi0vz0vWS83M3MQJD 8/S/Z707GG8fsD7EKMDBqMTD63Bka4gQa2JZcWXuIUZToA0TmaVEk/OBEZBXEm9obGZkYWpi amxkbmmmJM6rKPUzWEggPbEkNTs1tSC1KL6oNCe1+BAjEwenVANj9tHyRsmsNat22U+N6P36 ymXygdhp/12PB5Z+X/LJXyu15sPJq83qcY0CjrX1b4M/pWcf3Wik0rHf02Z5wLXk9kXfv5p3 vRP4fZr3+fcTU2e8/uNkrhrvXOcy8YXVvKcHL37VXGluV/T69N+Wla29DxkiStP5fWd+/pby cs/uu6JtJ1KqRF7eVmIpzkg01GIuKk4EAENeGdBIAgAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrPLMWRmVeSWpSXmKPExsVy+t9jAd2LLNtCDF5vELO48vU9m8Wk+xNY LF7cu8hicbbpDbvFhRUb2S2mLDrMajFj8ks2B3aP+93HmTz6tqxiDGCKamC0yUhNTEktUkjN S85PycxLt1XyDo53jjc1MzDUNbS0MFdSyEvMTbVVcvEJ0HXLzAHarKRQlphTChQKSCwuVtK3 wzQhNMRN1wKmMULXNyQIrsfIAA0krGHM+HFGpWCHXMXF+deYGhhXSHUxcnJICJhIPFvewQxh i0lcuLeerYuRi0NIYBGjxOVZv9lBEkICbUwSu86HgNhsAnoSd7YdZwKxRQSUJf5OXMUI0sAs MJNR4tLmNjaQhLCAk8TW9llgNouAqsSWKUfBbF4Bd4krm24yQmyTkzh5bDLrBEbuBYwMqxhF UwuSC4qT0nMN9YoTc4tL89L1kvNzNzGCA/+Z1A7GlQ0WhxgFOBiVeHgdjmwNEWJNLCuuzD3E KMHBrCTCu55pW4gQb0piZVVqUX58UWlOavEhRlOg7ROZpUST84FRmVcSb2hsYmZkaWRuaGFk bK4kzqtk3xYiJJCeWJKanZpakFoE08fEwSnVwOib9yqlQ3Zul6GAt+0e3xkpDtsmc+q13Ix/ xu8ze/vkN3or9COZtxVoG5oydyybcy8t4Qm3aZbskp3i/qUP4uZ3XlyqFum4ab2u4uSg2j2J HaZZgq1OU2a4S3idvjGx16f/eIxU+v5ewS3ejh7Jr5yfT7KxTfeOfLjihezsy2ubZIxW3w+O U2Ipzkg01GIuKk4EAO/uT5qSAgAA DLP-Filter: Pass X-MTR: 20000000000000000@CPGS X-CFilter-Loop: Reflected Cc: prathyush.k@samsung.com, sw0312.kim@samsung.com, kyungmin.park@samsung.com, rahul.sharma@samsung.com X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" X-Spam-Status: No, score=-4.2 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_MED, T_RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Prevented re-enabling the vblank interrupt by drm_vblank_off and drm_vblank_get from mixer_wait_for_vblank returns error after drm_vblank_off. We get below warnings without this error handling because vblank reference count is mismatched by above sequence. setting mode 1920x1080-60Hz@XR24 on connectors 16, crtc 13 [ 19.900793] ------------[ cut here ]------------ [ 19.903959] WARNING: CPU: 0 PID: 0 at drivers/gpu/drm/drm_irq.c:1072 exynos_drm_crtc_finish_pageflip+0xac/0xdc() [ 19.914076] Modules linked in: [ 19.917116] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 3.19.0-rc4-00040-g3d729789-dirty #46 [ 19.925342] Hardware name: SAMSUNG EXYNOS (Flattened Device Tree) [ 19.931437] [] (unwind_backtrace) from [] (show_stack+0x10/0x14) [ 19.939131] [] (show_stack) from [] (dump_stack+0x84/0xc4) [ 19.946329] [] (dump_stack) from [] (warn_slowpath_common+0x80/0xb0) [ 19.954382] [] (warn_slowpath_common) from [] (warn_slowpath_null+0x1c/0x24) [ 19.963132] [] (warn_slowpath_null) from [] (exynos_drm_crtc_finish_pageflip+0xac/0xdc) [ 19.972841] [] (exynos_drm_crtc_finish_pageflip) from [] (mixer_irq_handler+0xdc/0x104) [ 19.982546] [] (mixer_irq_handler) from [] (handle_irq_event_percpu+0x78/0x134) [ 19.991555] [] (handle_irq_event_percpu) from [] (handle_irq_event+0x3c/0x5c) [ 20.000395] [] (handle_irq_event) from [] (handle_fasteoi_irq+0xe0/0x1ac) [ 20.008885] [] (handle_fasteoi_irq) from [] (generic_handle_irq+0x2c/0x3c) [ 20.017463] [] (generic_handle_irq) from [] (__handle_domain_irq+0x7c/0xec) [ 20.026128] [] (__handle_domain_irq) from [] (gic_handle_irq+0x30/0x68) [ 20.034449] [] (gic_handle_irq) from [] (__irq_svc+0x40/0x74) [ 20.041893] Exception stack(0xc06fff68 to 0xc06fffb0) [ 20.046923] ff60: 00000000 00000000 000052f6 c001b460 c06fe000 c07064e8 [ 20.055070] ff80: c04d743c c07392a2 c0739440 c06da340 ef7fca80 00000000 01000000 c06fffb0 [ 20.063212] ffa0: c000f24c c000f250 60000013 ffffffff [ 20.068245] [] (__irq_svc) from [] (arch_cpu_idle+0x38/0x3c) [ 20.075611] [] (arch_cpu_idle) from [] (cpu_startup_entry+0x108/0x16c) [ 20.083846] [] (cpu_startup_entry) from [] (start_kernel+0x3a0/0x3ac) [ 20.091980] ---[ end trace 2c76ee0500489d1b ]--- Signed-off-by: Joonyoung Shim --- It can be any root solution than this patch. Actually i'm not sure whether it's right to call drm_vblank_get/put from mixer_wait_for_vblank or to call mixer_wait_for_vblank from mixer_window_suspend. drivers/gpu/drm/exynos/exynos_mixer.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/exynos/exynos_mixer.c b/drivers/gpu/drm/exynos/exynos_mixer.c index 0dedb99..ed44cd4 100644 --- a/drivers/gpu/drm/exynos/exynos_mixer.c +++ b/drivers/gpu/drm/exynos/exynos_mixer.c @@ -1018,6 +1018,7 @@ static void mixer_win_disable(struct exynos_drm_crtc *crtc, int zpos) static void mixer_wait_for_vblank(struct exynos_drm_crtc *crtc) { struct mixer_context *mixer_ctx = crtc->ctx; + int err; mutex_lock(&mixer_ctx->mixer_mutex); if (!mixer_ctx->powered) { @@ -1026,7 +1027,11 @@ static void mixer_wait_for_vblank(struct exynos_drm_crtc *crtc) } mutex_unlock(&mixer_ctx->mixer_mutex); - drm_vblank_get(mixer_ctx->drm_dev, mixer_ctx->pipe); + err = drm_vblank_get(mixer_ctx->drm_dev, mixer_ctx->pipe); + if (err < 0) { + DRM_DEBUG_KMS("failed to acquire vblank counter\n"); + return; + } atomic_set(&mixer_ctx->wait_vsync_event, 1);