diff mbox

[2/2] drm/i915:fix irq miss in bsd ring for g4x v2

Message ID 1303975325-2156-2-git-send-email-boqun.feng@intel.com (mailing list archive)
State New, archived
Headers show

Commit Message

Feng, Boqun April 28, 2011, 7:22 a.m. UTC
This patch depends on patch "drm/i915:merge ring_put/get_irq into
bsd_ring_put/get_irq"

On g4x, user interrupt in bsd ring is missed.
g4x and ironlake share the same bsd_ring, but their interrupt control 
interfaces are different, g4x use I915 while ironlake use GT.
The interrupt mask reg address on g4x should be IMR, user interrupt flag
in bsd ring on g4x is I915_BSD_USER_INTERRUPT

Add conditional judgment about dev version to find out which interrupt
control interface is to use.

Signed-off-by: Feng, Boqun <boqun.feng@intel.com>
Reviewed-by: Xiang, Haihao <haihao.xiang@intel.com>
---
 drivers/gpu/drm/i915/intel_ringbuffer.c |   16 ++++++++++++----
 1 files changed, 12 insertions(+), 4 deletions(-)

Comments

Chris Wilson April 28, 2011, 8:02 a.m. UTC | #1
On Thu, 28 Apr 2011 15:22:05 +0800, "Feng, Boqun" <boqun.feng@intel.com> wrote:
> This patch depends on patch "drm/i915:merge ring_put/get_irq into
> bsd_ring_put/get_irq"

I'm being a nuisance, but this is the wrong way around. This a bug fix and
needs to apply cleanly on top of -fixes and marked for stable. The cleanup
patch is something we can then do at our leisure and so goes in through
next.
-Chris
Feng, Boqun April 28, 2011, 8:20 a.m. UTC | #2
I got it.
Thanks
-Boqun


-----Original Message-----
From: Chris Wilson [mailto:chris@chris-wilson.co.uk] 
Sent: Thursday, April 28, 2011 4:03 PM
To: Feng, Boqun; intel-gfx@lists.freedesktop.org
Subject: Re: [Intel-gfx] [PATCH 2/2] drm/i915:fix irq miss in bsd ring for g4x v2

On Thu, 28 Apr 2011 15:22:05 +0800, "Feng, Boqun" <boqun.feng@intel.com> wrote:
> This patch depends on patch "drm/i915:merge ring_put/get_irq into
> bsd_ring_put/get_irq"

I'm being a nuisance, but this is the wrong way around. This a bug fix and
needs to apply cleanly on top of -fixes and marked for stable. The cleanup
patch is something we can then do at our leisure and so goes in through
next.
-Chris
diff mbox

Patch

diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c
index 06c921f..48c21aa 100644
--- a/drivers/gpu/drm/i915/intel_ringbuffer.c
+++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
@@ -644,8 +644,12 @@  bsd_ring_get_irq(struct intel_ring_buffer *ring)
 	       return false;
 
 	spin_lock(&ring->irq_lock);
-	if (ring->irq_refcount++ == 0)
-		ironlake_enable_irq(dev_priv, GT_BSD_USER_INTERRUPT);
+	if (ring->irq_refcount++ == 0) {
+		if (IS_G4X(dev))
+			i915_enable_irq(dev_priv, I915_BSD_USER_INTERRUPT);
+		else
+			ironlake_enable_irq(dev_priv, GT_BSD_USER_INTERRUPT);
+	}
 	spin_unlock(&ring->irq_lock);
 
 	return true;
@@ -657,8 +661,12 @@  bsd_ring_put_irq(struct intel_ring_buffer *ring)
 	drm_i915_private_t *dev_priv = dev->dev_private;
 
 	spin_lock(&ring->irq_lock);
-	if (--ring->irq_refcount == 0)
-		ironlake_disable_irq(dev_priv, GT_BSD_USER_INTERRUPT);
+	if (--ring->irq_refcount == 0) {
+		if (IS_G4X(dev))
+			i915_disable_irq(dev_priv, I915_BSD_USER_INTERRUPT);
+		else
+			ironlake_disable_irq(dev_priv, GT_BSD_USER_INTERRUPT);
+	}
 	spin_unlock(&ring->irq_lock);
 }