[Intel-gfx] [PATCH 1/2] drm/i915:merge ring_put/get_irq into bsd_ring_put/get_irq

2011-04-28 Thread Feng, Boqun
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.f...@intel.com
Reviewed-by: Xiang, Haihao haihao.xi...@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

___
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx


[Intel-gfx] [PATCH 1/2] drm/i915:merge ring_put/get_irq into bsd_ring_put/get_irq v2

2011-04-28 Thread Feng, Boqun
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.f...@intel.com
Reviewed-by: Xiang, Haihao haihao.xi...@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

___
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx


[Intel-gfx] [PATCH 1/2] drm/i915:merge ring_put/get_irq into bsd_ring_put/get_irq

2011-04-27 Thread Feng, Boqun
Remove ring_put_irq/ring_get_irq:drivers/gpu/drm/i915/intel_ringbuffer.c
, they are only used by bsd_ring_put_irq/bsd_ring_get_irq.
Expand the code in bsd_ring_put_irq/bsd_ring_get_irq.

Signed-off-by: Feng, Boqun boqun.f...@intel.com
Reviewed-by: Xiang, Haihao haihao.xi...@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

___
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx


Re: [Intel-gfx] [PATCH 1/2] drm/i915:merge ring_put/get_irq into bsd_ring_put/get_irq

2011-04-27 Thread Keith Packard
On Wed, 27 Apr 2011 15:41:18 +0800, Feng, Boqun boqun.f...@intel.com wrote:
 Remove ring_put_irq/ring_get_irq:drivers/gpu/drm/i915/intel_ringbuffer.c
 , they are only used by bsd_ring_put_irq/bsd_ring_get_irq.
 Expand the code in bsd_ring_put_irq/bsd_ring_get_irq.

Why is this change useful?

-- 
keith.pack...@intel.com


pgpHOOQFp5LL8.pgp
Description: PGP signature
___
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx


Re: [Intel-gfx] [PATCH 1/2] drm/i915:merge ring_put/get_irq into bsd_ring_put/get_irq

2011-04-27 Thread Feng, Boqun
I have discussed this with Chris in my earlier patch.

This change is a clean-up, since ring_put_irq and ring_get_irq are only used by 
bsd_ring_put_irq and bsd_ring_get_irq.

And once this change is made, it is more clear to see the difference between
g4x and ironlake BSD interrupt control interface, because they are handled in
a single function and they are different at the interrupt mask reg addresss as
well as the interrupt flag
.
Thanks
Feng, Boqun

-Original Message-
From: Keith Packard [mailto:kei...@keithp.com] 
Sent: Thursday, April 28, 2011 12:43 AM
To: Feng, Boqun; intel-gfx@lists.freedesktop.org
Subject: Re: [Intel-gfx] [PATCH 1/2] drm/i915:merge ring_put/get_irq into 
bsd_ring_put/get_irq

On Wed, 27 Apr 2011 15:41:18 +0800, Feng, Boqun boqun.f...@intel.com wrote:
 Remove ring_put_irq/ring_get_irq:drivers/gpu/drm/i915/intel_ringbuffer.c
 , they are only used by bsd_ring_put_irq/bsd_ring_get_irq.
 Expand the code in bsd_ring_put_irq/bsd_ring_get_irq.

Why is this change useful?

-- 
keith.pack...@intel.com
___
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx


Re: [Intel-gfx] [PATCH 1/2] drm/i915:merge ring_put/get_irq into bsd_ring_put/get_irq

2011-04-27 Thread Keith Packard
On Thu, 28 Apr 2011 10:06:51 +0800, Feng, Boqun boqun.f...@intel.com wrote:
 I have discussed this with Chris in my earlier patch.
 
 This change is a clean-up, since ring_put_irq and ring_get_irq are only used 
 by 
 bsd_ring_put_irq and bsd_ring_get_irq.
 
 And once this change is made, it is more clear to see the difference between
 g4x and ironlake BSD interrupt control interface, because they are handled in
 a single function and they are different at the interrupt mask reg addresss as
 well as the interrupt flag

please put important details like that in the commit message; having
some way to evaluate the utility of the patch is very important for
something which doesn't actually change how the code works.

-- 
keith.pack...@intel.com


pgpuVK3a9n7El.pgp
Description: PGP signature
___
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx