[Intel-gfx] [PATCH 1/2] drm/i915:merge ring_put/get_irq into bsd_ring_put/get_irq
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
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
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
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
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
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