From: Alexandre Courbot <acourbot@nvidia.com>
To: Andrzej Hajda <a.hajda@samsung.com>,
Inki Dae <inki.dae@samsung.com>,
Joonyoung Shim <jy0922.shim@samsung.com>,
Thierry Reding <treding@nvidia.com>
Cc: linux-samsung-soc@vger.kernel.org,
"Daniel Vetter" <daniel.vetter@ffwll.ch>,
"Seung-Woo Kim" <sw0312.kim@samsung.com>,
linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org,
"Kyungmin Park" <kyungmin.park@samsung.com>,
"Kukjin Kim" <kgene.kim@samsung.com>,
"Benjamin Gaignard" <benjamin.gaignard@linaro.org>,
"Russell King" <rmk+kernel@arm.linux.org.uk>,
"Ville Syrjälä" <ville.syrjala@linux.intel.com>,
"linux-tegra@vger.kernel.org" <linux-tegra@vger.kernel.org>
Subject: Re: [PATCH] drm/exynos: fix vblank handling during dpms off
Date: Thu, 9 Oct 2014 14:43:02 +0900 [thread overview]
Message-ID: <54362066.9000504@nvidia.com> (raw)
In-Reply-To: <542D3C96.7000400@samsung.com>
On 10/02/2014 08:52 PM, Andrzej Hajda wrote:
> Hi,
>
> +CC possible victims
>
> On 10/02/2014 12:52 PM, Inki Dae wrote:
>> On 2014년 10월 02일 17:58, Joonyoung Shim wrote:
>>> Hi Andrzej,
>>>
>>> On 10/01/2014 05:14 PM, Andrzej Hajda wrote:
>>>> The patch disables vblanks during dpms off only if pagefilp has
>>>> not been finished. It also replaces drm_vblank_off with drm_crtc_vblank_put.
>>>> It fixes issue with page_flip ioctl not being able to acquire vblank counter.
>>> This problem isn't related with pageflip, it just causes from
>>> 7ffd7a68511c710b84db3548a1997fd2625f580a commit (drm: Always reject
>>> drm_vblank_get() after drm_vblank_off()).
>>>
>>> We need to use drm_vblank_on() as a counterpart to drm_vblank_off()
>>> after the commit .
>
> This patch should break also other drivers, it seems at least following
> drms could be affected:
> armada, sti, tegra.
Indeed we (tegra) have just been hit by this. The problem seems to come
from the fact that we have been using drm_vblank_pre_modeset,
drm_vblank_post_modeset and drm_vblank_off conjointly. All these
functions depend on the value of vblank->inmodeset, and 7ffd7a68511
increases the vblank reference counter only in drm_vblank_off, which can
result in the acquired reference never being released.
The following seems to fix this for Tegra, by stopping using
drm_vblank_pre/post_modeset and relying on drm_vblank_off/on instead:
diff --git a/drivers/gpu/drm/tegra/dc.c b/drivers/gpu/drm/tegra/dc.c
index b08df07cad47..3955d81236d0 100644
--- a/drivers/gpu/drm/tegra/dc.c
+++ b/drivers/gpu/drm/tegra/dc.c
@@ -739,7 +739,6 @@ static const struct drm_crtc_funcs tegra_crtc_funcs = {
static void tegra_crtc_disable(struct drm_crtc *crtc)
{
- struct tegra_dc *dc = to_tegra_dc(crtc);
struct drm_device *drm = crtc->dev;
struct drm_plane *plane;
@@ -755,7 +754,7 @@ static void tegra_crtc_disable(struct drm_crtc *crtc)
}
}
- drm_vblank_off(drm, dc->pipe);
+ drm_crtc_vblank_off(crtc);
}
static bool tegra_crtc_mode_fixup(struct drm_crtc *crtc,
@@ -844,7 +843,7 @@ static int tegra_crtc_mode_set(struct drm_crtc *crtc,
u32 value;
int err;
- drm_vblank_pre_modeset(crtc->dev, dc->pipe);
+ drm_crtc_vblank_off(crtc);
err = tegra_crtc_setup_clk(crtc, mode);
if (err) {
@@ -946,7 +945,7 @@ static void tegra_crtc_commit(struct drm_crtc *crtc)
value = GENERAL_ACT_REQ | WIN_A_ACT_REQ;
tegra_dc_writel(dc, value, DC_CMD_STATE_CONTROL);
- drm_vblank_post_modeset(crtc->dev, dc->pipe);
+ drm_crtc_vblank_on(crtc);
}
static void tegra_crtc_load_lut(struct drm_crtc *crtc)
Thierry, does this look ok to you?
But there might be another issue, which is that calls to
drm_vblank_get() will return -EINVAL if invoked between drm_blank_off
and drm_blank_on. Is this really the desired behavior? Can it at least
happen? If so, how are drivers supposed to react to this situation?
next prev parent reply other threads:[~2014-10-09 5:43 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-09-10 11:53 [PATCH] drm/exynos: remove ifdeferry from initialization code Andrzej Hajda
2014-09-10 11:53 ` Andrzej Hajda
2014-09-30 11:29 ` Andrzej Hajda
2014-10-01 5:48 ` Inki Dae
2014-10-01 5:48 ` Inki Dae
2014-10-01 6:07 ` Inki Dae
2014-10-01 8:14 ` [PATCH] drm/exynos: fix vblank handling during dpms off Andrzej Hajda
2014-10-02 8:58 ` Joonyoung Shim
2014-10-02 8:58 ` Joonyoung Shim
2014-10-02 10:52 ` Inki Dae
2014-10-02 10:52 ` Inki Dae
2014-10-02 11:52 ` Andrzej Hajda
2014-10-02 11:52 ` Andrzej Hajda
2014-10-09 5:43 ` Alexandre Courbot [this message]
2014-10-09 8:52 ` Russell King - ARM Linux
2014-10-09 9:58 ` Thierry Reding
[not found] ` <54362066.9000504-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2014-10-09 10:08 ` Thierry Reding
2014-10-09 10:08 ` Thierry Reding
2014-10-09 10:23 ` Alexandre Courbot
2014-10-10 12:39 ` Andrzej Hajda
2014-10-15 5:32 ` Inki Dae
2014-10-01 6:26 ` [PATCH] drm/exynos: remove ifdeferry from initialization code Ajay kumar
2014-10-30 12:36 ` Andrzej Hajda
2014-10-30 12:36 ` Andrzej Hajda
2014-10-30 13:02 ` Inki Dae
2014-10-30 13:02 ` Inki Dae
2014-10-30 13:13 ` Andrzej Hajda
2014-10-30 14:29 ` Inki Dae
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=54362066.9000504@nvidia.com \
--to=acourbot@nvidia.com \
--cc=a.hajda@samsung.com \
--cc=benjamin.gaignard@linaro.org \
--cc=daniel.vetter@ffwll.ch \
--cc=dri-devel@lists.freedesktop.org \
--cc=inki.dae@samsung.com \
--cc=jy0922.shim@samsung.com \
--cc=kgene.kim@samsung.com \
--cc=kyungmin.park@samsung.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-samsung-soc@vger.kernel.org \
--cc=linux-tegra@vger.kernel.org \
--cc=rmk+kernel@arm.linux.org.uk \
--cc=sw0312.kim@samsung.com \
--cc=treding@nvidia.com \
--cc=ville.syrjala@linux.intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.