* [PATCH 1/2] drm/i915:merge ring_put/get_irq into bsd_ring_put/get_irq v2
@ 2011-04-28 7:22 Feng, Boqun
2011-04-28 7:22 ` [PATCH 2/2] drm/i915:fix irq miss in bsd ring for g4x v2 Feng, Boqun
0 siblings, 1 reply; 4+ messages in thread
From: Feng, Boqun @ 2011-04-28 7:22 UTC (permalink / raw)
To: intel-gfx
This patch is a clean-up, since ring_put_irq/ring_get_irq are only used
by bsd_ring_put_irq and bsd_ring_get_irq.
This patch also serve the further fix about irq miss in bsd ring on g4x.
Interrupt control interfaces are different between g4x and ironlake,
they use different interrupt control reg addresses and interrupt flags.
Rather than handle the two differences in two put-get pairs, it's better
to merge them and put conditional judgment about dev version in one pair,
and handle them.
Remove ring_put_irq/ring_get_irq:drivers/gpu/drm/i915/intel_ringbuffer.c.
Expand the code in bsd_ring_put_irq/bsd_ring_get_irq.
Signed-off-by: Feng, Boqun <boqun.feng@intel.com>
Reviewed-by: Xiang, Haihao <haihao.xiang@intel.com>
---
drivers/gpu/drm/i915/intel_ringbuffer.c | 48 +++++++++++-------------------
1 files changed, 18 insertions(+), 30 deletions(-)
diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c
index e9e6f71..06c921f 100644
--- a/drivers/gpu/drm/i915/intel_ringbuffer.c
+++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
@@ -600,7 +600,7 @@ ring_add_request(struct intel_ring_buffer *ring,
}
static bool
-ring_get_irq(struct intel_ring_buffer *ring, u32 flag)
+gen6_ring_get_irq(struct intel_ring_buffer *ring, u32 gflag, u32 rflag)
{
struct drm_device *dev = ring->dev;
drm_i915_private_t *dev_priv = dev->dev_private;
@@ -609,27 +609,33 @@ ring_get_irq(struct intel_ring_buffer *ring, u32 flag)
return false;
spin_lock(&ring->irq_lock);
- if (ring->irq_refcount++ == 0)
- ironlake_enable_irq(dev_priv, flag);
+ if (ring->irq_refcount++ == 0) {
+ ring->irq_mask &= ~rflag;
+ I915_WRITE_IMR(ring, ring->irq_mask);
+ ironlake_enable_irq(dev_priv, gflag);
+ }
spin_unlock(&ring->irq_lock);
return true;
}
static void
-ring_put_irq(struct intel_ring_buffer *ring, u32 flag)
+gen6_ring_put_irq(struct intel_ring_buffer *ring, u32 gflag, u32 rflag)
{
struct drm_device *dev = ring->dev;
drm_i915_private_t *dev_priv = dev->dev_private;
spin_lock(&ring->irq_lock);
- if (--ring->irq_refcount == 0)
- ironlake_disable_irq(dev_priv, flag);
+ if (--ring->irq_refcount == 0) {
+ ring->irq_mask |= rflag;
+ I915_WRITE_IMR(ring, ring->irq_mask);
+ ironlake_disable_irq(dev_priv, gflag);
+ }
spin_unlock(&ring->irq_lock);
}
static bool
-gen6_ring_get_irq(struct intel_ring_buffer *ring, u32 gflag, u32 rflag)
+bsd_ring_get_irq(struct intel_ring_buffer *ring)
{
struct drm_device *dev = ring->dev;
drm_i915_private_t *dev_priv = dev->dev_private;
@@ -638,42 +644,24 @@ gen6_ring_get_irq(struct intel_ring_buffer *ring, u32 gflag, u32 rflag)
return false;
spin_lock(&ring->irq_lock);
- if (ring->irq_refcount++ == 0) {
- ring->irq_mask &= ~rflag;
- I915_WRITE_IMR(ring, ring->irq_mask);
- ironlake_enable_irq(dev_priv, gflag);
- }
+ if (ring->irq_refcount++ == 0)
+ ironlake_enable_irq(dev_priv, GT_BSD_USER_INTERRUPT);
spin_unlock(&ring->irq_lock);
return true;
}
-
static void
-gen6_ring_put_irq(struct intel_ring_buffer *ring, u32 gflag, u32 rflag)
+bsd_ring_put_irq(struct intel_ring_buffer *ring)
{
struct drm_device *dev = ring->dev;
drm_i915_private_t *dev_priv = dev->dev_private;
spin_lock(&ring->irq_lock);
- if (--ring->irq_refcount == 0) {
- ring->irq_mask |= rflag;
- I915_WRITE_IMR(ring, ring->irq_mask);
- ironlake_disable_irq(dev_priv, gflag);
- }
+ if (--ring->irq_refcount == 0)
+ ironlake_disable_irq(dev_priv, GT_BSD_USER_INTERRUPT);
spin_unlock(&ring->irq_lock);
}
-static bool
-bsd_ring_get_irq(struct intel_ring_buffer *ring)
-{
- return ring_get_irq(ring, GT_BSD_USER_INTERRUPT);
-}
-static void
-bsd_ring_put_irq(struct intel_ring_buffer *ring)
-{
- ring_put_irq(ring, GT_BSD_USER_INTERRUPT);
-}
-
static int
ring_dispatch_execbuffer(struct intel_ring_buffer *ring, u32 offset, u32 length)
{
--
1.7.4.4
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH 2/2] drm/i915:fix irq miss in bsd ring for g4x v2
2011-04-28 7:22 [PATCH 1/2] drm/i915:merge ring_put/get_irq into bsd_ring_put/get_irq v2 Feng, Boqun
@ 2011-04-28 7:22 ` Feng, Boqun
2011-04-28 8:02 ` Chris Wilson
0 siblings, 1 reply; 4+ messages in thread
From: Feng, Boqun @ 2011-04-28 7:22 UTC (permalink / raw)
To: intel-gfx
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(-)
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);
}
--
1.7.4.4
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH 2/2] drm/i915:fix irq miss in bsd ring for g4x v2
2011-04-28 7:22 ` [PATCH 2/2] drm/i915:fix irq miss in bsd ring for g4x v2 Feng, Boqun
@ 2011-04-28 8:02 ` Chris Wilson
2011-04-28 8:20 ` Feng, Boqun
0 siblings, 1 reply; 4+ messages in thread
From: Chris Wilson @ 2011-04-28 8:02 UTC (permalink / raw)
To: Feng, Boqun, intel-gfx
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
--
Chris Wilson, Intel Open Source Technology Centre
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH 2/2] drm/i915:fix irq miss in bsd ring for g4x v2
2011-04-28 8:02 ` Chris Wilson
@ 2011-04-28 8:20 ` Feng, Boqun
0 siblings, 0 replies; 4+ messages in thread
From: Feng, Boqun @ 2011-04-28 8:20 UTC (permalink / raw)
To: Chris Wilson, intel-gfx@lists.freedesktop.org
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
--
Chris Wilson, Intel Open Source Technology Centre
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2011-04-28 8:22 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-04-28 7:22 [PATCH 1/2] drm/i915:merge ring_put/get_irq into bsd_ring_put/get_irq v2 Feng, Boqun
2011-04-28 7:22 ` [PATCH 2/2] drm/i915:fix irq miss in bsd ring for g4x v2 Feng, Boqun
2011-04-28 8:02 ` Chris Wilson
2011-04-28 8:20 ` Feng, Boqun
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.