From: "Ville Syrjälä" <ville.syrjala@linux.intel.com>
To: Chris Wilson <chris@chris-wilson.co.uk>
Cc: intel-gfx@lists.freedesktop.org
Subject: Re: [PATCH] drm/i915: Grab RPM wakeref around enabling vblank interrupts
Date: Fri, 7 Oct 2016 21:06:07 +0300 [thread overview]
Message-ID: <20161007180607.GY4329@intel.com> (raw)
In-Reply-To: <20161007135032.12825-1-chris@chris-wilson.co.uk>
On Fri, Oct 07, 2016 at 02:50:32PM +0100, Chris Wilson wrote:
> Whilst the vblank is configured to send an interrupt everytime, we need
> to keep the device awake to process those interrupts.
If we can enable vblanks the pipe will be active, and thus we can't
runtime suspend anyway. Also might_sleep() would be a problem.
>
> Reported-by: Anssi Hannula <anssi.hannula@bitwise.fi>
> References: https://bugs.freedesktop.org/show_bug.cgi?id=97985
> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
> ---
> drivers/gpu/drm/i915/i915_irq.c | 16 ++++++++++++++++
> 1 file changed, 16 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
> index bd6c8b0eeaef..bda7a27615a6 100644
> --- a/drivers/gpu/drm/i915/i915_irq.c
> +++ b/drivers/gpu/drm/i915/i915_irq.c
> @@ -2723,6 +2723,8 @@ static int i915_enable_vblank(struct drm_device *dev, unsigned int pipe)
> struct drm_i915_private *dev_priv = to_i915(dev);
> unsigned long irqflags;
>
> + intel_runtime_pm_get(dev_priv);
> +
> spin_lock_irqsave(&dev_priv->irq_lock, irqflags);
> if (INTEL_INFO(dev)->gen >= 4)
> i915_enable_pipestat(dev_priv, pipe,
> @@ -2742,6 +2744,8 @@ static int ironlake_enable_vblank(struct drm_device *dev, unsigned int pipe)
> uint32_t bit = (INTEL_INFO(dev)->gen >= 7) ? DE_PIPE_VBLANK_IVB(pipe) :
> DE_PIPE_VBLANK(pipe);
>
> + intel_runtime_pm_get(dev_priv);
> +
> spin_lock_irqsave(&dev_priv->irq_lock, irqflags);
> ilk_enable_display_irq(dev_priv, bit);
> spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags);
> @@ -2754,6 +2758,8 @@ static int valleyview_enable_vblank(struct drm_device *dev, unsigned int pipe)
> struct drm_i915_private *dev_priv = to_i915(dev);
> unsigned long irqflags;
>
> + intel_runtime_pm_get(dev_priv);
> +
> spin_lock_irqsave(&dev_priv->irq_lock, irqflags);
> i915_enable_pipestat(dev_priv, pipe,
> PIPE_START_VBLANK_INTERRUPT_STATUS);
> @@ -2767,6 +2773,8 @@ static int gen8_enable_vblank(struct drm_device *dev, unsigned int pipe)
> struct drm_i915_private *dev_priv = to_i915(dev);
> unsigned long irqflags;
>
> + intel_runtime_pm_get(dev_priv);
> +
> spin_lock_irqsave(&dev_priv->irq_lock, irqflags);
> bdw_enable_pipe_irq(dev_priv, pipe, GEN8_PIPE_VBLANK);
> spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags);
> @@ -2787,6 +2795,8 @@ static void i915_disable_vblank(struct drm_device *dev, unsigned int pipe)
> PIPE_VBLANK_INTERRUPT_STATUS |
> PIPE_START_VBLANK_INTERRUPT_STATUS);
> spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags);
> +
> + intel_runtime_pm_put(dev_priv);
> }
>
> static void ironlake_disable_vblank(struct drm_device *dev, unsigned int pipe)
> @@ -2799,6 +2809,8 @@ static void ironlake_disable_vblank(struct drm_device *dev, unsigned int pipe)
> spin_lock_irqsave(&dev_priv->irq_lock, irqflags);
> ilk_disable_display_irq(dev_priv, bit);
> spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags);
> +
> + intel_runtime_pm_put(dev_priv);
> }
>
> static void valleyview_disable_vblank(struct drm_device *dev, unsigned int pipe)
> @@ -2810,6 +2822,8 @@ static void valleyview_disable_vblank(struct drm_device *dev, unsigned int pipe)
> i915_disable_pipestat(dev_priv, pipe,
> PIPE_START_VBLANK_INTERRUPT_STATUS);
> spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags);
> +
> + intel_runtime_pm_put(dev_priv);
> }
>
> static void gen8_disable_vblank(struct drm_device *dev, unsigned int pipe)
> @@ -2820,6 +2834,8 @@ static void gen8_disable_vblank(struct drm_device *dev, unsigned int pipe)
> spin_lock_irqsave(&dev_priv->irq_lock, irqflags);
> bdw_disable_pipe_irq(dev_priv, pipe, GEN8_PIPE_VBLANK);
> spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags);
> +
> + intel_runtime_pm_put(dev_priv);
> }
>
> static bool
> --
> 2.9.3
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
--
Ville Syrjälä
Intel OTC
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
next prev parent reply other threads:[~2016-10-07 18:06 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-10-07 13:50 [PATCH] drm/i915: Grab RPM wakeref around enabling vblank interrupts Chris Wilson
2016-10-07 18:06 ` Ville Syrjälä [this message]
2016-10-07 18:33 ` Chris Wilson
2016-10-07 18:44 ` Ville Syrjälä
2016-10-07 18:57 ` Chris Wilson
2016-10-07 19:00 ` Chris Wilson
2016-10-07 19:17 ` Ville Syrjälä
2016-10-10 10:19 ` ✗ Fi.CI.BAT: warning for " Patchwork
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=20161007180607.GY4329@intel.com \
--to=ville.syrjala@linux.intel.com \
--cc=chris@chris-wilson.co.uk \
--cc=intel-gfx@lists.freedesktop.org \
/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.