Intel-GFX Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Alexey Fisher <bug-track@fisher-privat.net>
To: Chris Wilson <chris@chris-wilson.co.uk>
Cc: intel-gfx@lists.freedesktop.org
Subject: Re: [PATCH] drm/i915: Make the ring IMR handling private
Date: Wed, 05 Jan 2011 12:54:23 +0100	[thread overview]
Message-ID: <1294228463.5957.1.camel@zwerg> (raw)
In-Reply-To: <1294223808-9712-1-git-send-email-chris@chris-wilson.co.uk>

Tested. It's working.
Thank you.

Am Mittwoch, den 05.01.2011, 10:36 +0000 schrieb Chris Wilson:
> As the IMR for the USER interrupts are not modified elsewhere, we can
> separate the spinlock used for these from that of hpd and pipestats.
> Those two IMR are manipulated under an IRQ and so need heavier locking.
> 
> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
> ---
>  drivers/gpu/drm/i915/intel_ringbuffer.c |   26 ++++++++++++++------------
>  drivers/gpu/drm/i915/intel_ringbuffer.h |    1 +
>  2 files changed, 15 insertions(+), 12 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c
> index 13cad98..03e3370 100644
> --- a/drivers/gpu/drm/i915/intel_ringbuffer.c
> +++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
> @@ -526,7 +526,7 @@ render_ring_get_irq(struct intel_ring_buffer *ring)
>  	if (!dev->irq_enabled)
>  		return false;
>  
> -	spin_lock(&dev_priv->irq_lock);
> +	spin_lock(&ring->irq_lock);
>  	if (ring->irq_refcount++ == 0) {
>  		if (HAS_PCH_SPLIT(dev))
>  			ironlake_enable_irq(dev_priv,
> @@ -534,7 +534,7 @@ render_ring_get_irq(struct intel_ring_buffer *ring)
>  		else
>  			i915_enable_irq(dev_priv, I915_USER_INTERRUPT);
>  	}
> -	spin_unlock(&dev_priv->irq_lock);
> +	spin_unlock(&ring->irq_lock);
>  
>  	return true;
>  }
> @@ -545,7 +545,7 @@ render_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(&dev_priv->irq_lock);
> +	spin_lock(&ring->irq_lock);
>  	if (--ring->irq_refcount == 0) {
>  		if (HAS_PCH_SPLIT(dev))
>  			ironlake_disable_irq(dev_priv,
> @@ -554,7 +554,7 @@ render_ring_put_irq(struct intel_ring_buffer *ring)
>  		else
>  			i915_disable_irq(dev_priv, I915_USER_INTERRUPT);
>  	}
> -	spin_unlock(&dev_priv->irq_lock);
> +	spin_unlock(&ring->irq_lock);
>  }
>  
>  void intel_ring_setup_status_page(struct intel_ring_buffer *ring)
> @@ -620,10 +620,10 @@ ring_get_irq(struct intel_ring_buffer *ring, u32 flag)
>  	if (!dev->irq_enabled)
>  	       return false;
>  
> -	spin_lock(&dev_priv->irq_lock);
> +	spin_lock(&ring->irq_lock);
>  	if (ring->irq_refcount++ == 0)
>  		ironlake_enable_irq(dev_priv, flag);
> -	spin_unlock(&dev_priv->irq_lock);
> +	spin_unlock(&ring->irq_lock);
>  
>  	return true;
>  }
> @@ -634,10 +634,10 @@ ring_put_irq(struct intel_ring_buffer *ring, u32 flag)
>  	struct drm_device *dev = ring->dev;
>  	drm_i915_private_t *dev_priv = dev->dev_private;
>  
> -	spin_lock(&dev_priv->irq_lock);
> +	spin_lock(&ring->irq_lock);
>  	if (--ring->irq_refcount == 0)
>  		ironlake_disable_irq(dev_priv, flag);
> -	spin_unlock(&dev_priv->irq_lock);
> +	spin_unlock(&ring->irq_lock);
>  }
>  
>  static bool
> @@ -649,13 +649,13 @@ gen6_ring_get_irq(struct intel_ring_buffer *ring, u32 gflag, u32 rflag)
>  	if (!dev->irq_enabled)
>  	       return false;
>  
> -	spin_lock(&dev_priv->irq_lock);
> +	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);
>  	}
> -	spin_unlock(&dev_priv->irq_lock);
> +	spin_unlock(&ring->irq_lock);
>  
>  	return true;
>  }
> @@ -666,13 +666,13 @@ 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(&dev_priv->irq_lock);
> +	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);
>  	}
> -	spin_unlock(&dev_priv->irq_lock);
> +	spin_unlock(&ring->irq_lock);
>  }
>  
>  static bool
> @@ -814,6 +814,8 @@ int intel_init_ring_buffer(struct drm_device *dev,
>  	INIT_LIST_HEAD(&ring->active_list);
>  	INIT_LIST_HEAD(&ring->request_list);
>  	INIT_LIST_HEAD(&ring->gpu_write_list);
> +
> +	spin_lock_init(&ring->irq_lock);
>  	ring->irq_mask = ~0;
>  
>  	if (I915_NEED_GFX_HWS(dev)) {
> diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.h b/drivers/gpu/drm/i915/intel_ringbuffer.h
> index 6b1d9a5..be9087e 100644
> --- a/drivers/gpu/drm/i915/intel_ringbuffer.h
> +++ b/drivers/gpu/drm/i915/intel_ringbuffer.h
> @@ -55,6 +55,7 @@ struct  intel_ring_buffer {
>  	int		effective_size;
>  	struct intel_hw_status_page status_page;
>  
> +	spinlock_t	irq_lock;
>  	u32		irq_refcount;
>  	u32		irq_mask;
>  	u32		irq_seqno;		/* last seq seem at irq time */

-- 
Regards,
        Alexey

      reply	other threads:[~2011-01-05 11:54 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-01-05 10:02 [regression] drm/i915/ringbuffer: Simplify the ring irq refcounting Alexey Fisher
2011-01-05 10:36 ` [PATCH] drm/i915: Make the ring IMR handling private Chris Wilson
2011-01-05 11:54   ` Alexey Fisher [this message]

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=1294228463.5957.1.camel@zwerg \
    --to=bug-track@fisher-privat.net \
    --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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox