From patchwork Thu Jun 5 06:19:42 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: YoungJun Cho X-Patchwork-Id: 4303411 Return-Path: X-Original-To: patchwork-linux-samsung-soc@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 88B09BEEAA for ; Thu, 5 Jun 2014 06:20:08 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id BC98D20306 for ; Thu, 5 Jun 2014 06:20:07 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id D7B8120218 for ; Thu, 5 Jun 2014 06:20:06 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751426AbaFEGUF (ORCPT ); Thu, 5 Jun 2014 02:20:05 -0400 Received: from mailout3.samsung.com ([203.254.224.33]:25286 "EHLO mailout3.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750876AbaFEGUB (ORCPT ); Thu, 5 Jun 2014 02:20:01 -0400 Received: from epcpsbgr1.samsung.com (u141.gpu120.samsung.co.kr [203.254.230.141]) by mailout3.samsung.com (Oracle Communications Messaging Server 7u4-24.01 (7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTP id <0N6O009FRMXA0560@mailout3.samsung.com>; Thu, 05 Jun 2014 15:19:58 +0900 (KST) Received: from epcpsbgm2.samsung.com ( [203.254.230.43]) by epcpsbgr1.samsung.com (EPCPMTA) with SMTP id D9.A7.24374.E0C00935; Thu, 05 Jun 2014 15:19:58 +0900 (KST) X-AuditID: cbfee68d-b7fd46d000005f36-72-53900c0eb2f4 Received: from epmmp2 ( [203.254.227.17]) by epcpsbgm2.samsung.com (EPCPMTA) with SMTP id E6.2A.07139.E0C00935; Thu, 05 Jun 2014 15:19:58 +0900 (KST) Received: from localhost.localdomain ([10.252.75.90]) by mmp2.samsung.com (Oracle Communications Messaging Server 7u4-24.01 (7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTPA id <0N6O00CKJMX7FQ60@mmp2.samsung.com>; Thu, 05 Jun 2014 15:19:58 +0900 (KST) From: YoungJun Cho To: airlied@linux.ie, dri-devel@lists.freedesktop.org Cc: devicetree@vger.kernel.org, robh+dt@kernel.org, pawel.moll@arm.com, mark.rutland@arm.com, ijc+devicetree@hellion.org.uk, galak@codeaurora.org, linux-samsung-soc@vger.kernel.org, thierry.reding@gmail.com, kyungmin.park@samsung.com, inki.dae@samsung.com, kgene.kim@samsung.com, jy0922.shim@samsung.com, sw0312.kim@samsung.com, a.hajda@samsung.com Subject: [PATCH v4 02/14] drm/exynos: use wait_event_timeout() for safety usage Date: Thu, 05 Jun 2014 15:19:42 +0900 Message-id: <1401949194-20092-3-git-send-email-yj44.cho@samsung.com> X-Mailer: git-send-email 1.7.9.5 In-reply-to: <1401949194-20092-1-git-send-email-yj44.cho@samsung.com> References: <1401949194-20092-1-git-send-email-yj44.cho@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFtrBIsWRmVeSWpSXmKPExsVy+t8zbV0+ngnBBic3K1vcWneO1aL33Ekm i/lHgKwrX9+zWfS/Wchqce7VSkaLSfcnsFi8uHeRxaJ3wVU2i7NNb9gtZpzfx2Sx9PpFJosJ 09eyWLTuPQIUm/ySzeLnrnksDgIea+atYfS43NfL5LFz1l12j5XLv7B5bFrVyeax/dsDVo/7 3ceZPPq2rGL0+LxJLoAzissmJTUnsyy1SN8ugSvj4IQZLAUHeSs+rP7F2MB4lLuLkZNDQsBE YsKVvcwQtpjEhXvr2boYuTiEBJYxSpyc088MU/R70wyoxHRGiRfHXkA5rUwSHUvOM4JUsQlo Sjz/uIMVxBYRMJXomLSUBaSIWeAJk8SpzftZQBLCAv4SOxu/gxWxCKhKHN17GSzOK+AicWPa WqBBHEDrFCTmTLIBCXMKuEp075gCNl8IqKTxw0WwxRICP9klDn9dxwgxR0Di2+RDLBC9shKb DkBdLSlxcMUNlgmMwgsYGVYxiqYWJBcUJ6UXGeoVJ+YWl+al6yXn525ihMRa7w7G2wesDzEm A42byCwlmpwPjNW8knhDYzMjC1MTU2Mjc0sz0oSVxHmTHiYFCQmkJ5akZqemFqQWxReV5qQW H2Jk4uCUamBkNVgpeSIuOER2yqpngf/8HZyUk3+dm67mveHU5WePraZdM/7uHOH4+cTWiyd+ 3f00U3TfvZXLy3f599cevPElNfHHbWePpwWNecGLpq/L3++1xngzy/pnk1VWLHvv4t7rcFT6 q+L3Ppl5BR+PioSt0fH4fUp5xxPZnieil3udrbPXzfTLqcqdo8RSnJFoqMVcVJwIAO4QAmzL AgAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprKKsWRmVeSWpSXmKPExsVy+t9jQV0+ngnBBmtny1ncWneO1aL33Ekm i/lHgKwrX9+zWfS/Wchqce7VSkaLSfcnsFi8uHeRxaJ3wVU2i7NNb9gtZpzfx2Sx9PpFJosJ 09eyWLTuPQIUm/ySzeLnrnksDgIea+atYfS43NfL5LFz1l12j5XLv7B5bFrVyeax/dsDVo/7 3ceZPPq2rGL0+LxJLoAzqoHRJiM1MSW1SCE1Lzk/JTMv3VbJOzjeOd7UzMBQ19DSwlxJIS8x N9VWycUnQNctMwfoESWFssScUqBQQGJxsZK+HaYJoSFuuhYwjRG6viFBcD1GBmggYR1jxsEJ M1gKDvJWfFj9i7GB8Sh3FyMnh4SAicTvTTPYIGwxiQv31gPZXBxCAtMZJV4cewHltDJJdCw5 zwhSxSagKfH84w5WEFtEwFSiY9JSFpAiZoEnTBKnNu9nAUkIC/hL7Gz8DlbEIqAqcXTvZbA4 r4CLxI1pa4EGcQCtU5CYM8kGJMwp4CrRvWMK2HwhoJLGDxfZJjDyLmBkWMUomlqQXFCclJ5r pFecmFtcmpeul5yfu4kRHMnPpHcwrmqwOMQowMGoxMM7IaA/WIg1say4MvcQowQHs5II759i oBBvSmJlVWpRfnxRaU5q8SHGZKCjJjJLiSbnA5NMXkm8obGJmZGlkZmxibmxMWnCSuK8B1ut A4UE0hNLUrNTUwtSi2C2MHFwSjUwdj+xEmAWN1CPV+K4ylNZYR63Y9NVziMs81lD/spvf2hm /tKwZodASS3v6bspG/oMD66/+PbgXuGMFq5u1kOtz9aUcLtOnXfxS/atmRcOHv+pdEJyeZhj VfW9iLevbNrm2aXP3b9vbszzCZfT6tb8PbayuGyxw/VOs2fZnXHPLbUPr6469JnXXYmlOCPR UIu5qDgRACwVnFQoAwAA DLP-Filter: Pass X-MTR: 20000000000000000@CPGS X-CFilter-Loop: Reflected Sender: linux-samsung-soc-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-samsung-soc@vger.kernel.org X-Spam-Status: No, score=-7.5 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, 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 There could be the case that the page flip operation isn't finished correctly with some abnormal condition such as panel reset. So this patch replaces wait_event() with wait_event_timeout() to avoid waiting for page flip completion infinitely. And clears exynos_crtc->pending_flip in exynos_drm_crtc_page_flip() when exynos_drm_crtc_mode_set_commit() is failed. Signed-off-by: YoungJun Cho Acked-by: Inki Dae Acked-by: Kyungmin Park Reviewed-by: Andrzej Hajda --- drivers/gpu/drm/exynos/exynos_drm_crtc.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/exynos/exynos_drm_crtc.c b/drivers/gpu/drm/exynos/exynos_drm_crtc.c index 95c9435..3bf091d 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_crtc.c +++ b/drivers/gpu/drm/exynos/exynos_drm_crtc.c @@ -69,8 +69,10 @@ static void exynos_drm_crtc_dpms(struct drm_crtc *crtc, int mode) if (mode > DRM_MODE_DPMS_ON) { /* wait for the completion of page flip. */ - wait_event(exynos_crtc->pending_flip_queue, - atomic_read(&exynos_crtc->pending_flip) == 0); + if (!wait_event_timeout(exynos_crtc->pending_flip_queue, + !atomic_read(&exynos_crtc->pending_flip), + HZ/20)) + atomic_set(&exynos_crtc->pending_flip, 0); drm_vblank_off(crtc->dev, exynos_crtc->pipe); } @@ -259,6 +261,7 @@ static int exynos_drm_crtc_page_flip(struct drm_crtc *crtc, spin_lock_irq(&dev->event_lock); drm_vblank_put(dev, exynos_crtc->pipe); list_del(&event->base.link); + atomic_set(&exynos_crtc->pending_flip, 0); spin_unlock_irq(&dev->event_lock); goto out;