diff mbox

[04/53] drm/i915: Extract ringbuffer destroy & make alloc outside accesible

Message ID 1402673891-14618-5-git-send-email-oscar.mateo@intel.com (mailing list archive)
State New, archived
Headers show

Commit Message

oscar.mateo@intel.com June 13, 2014, 3:37 p.m. UTC
From: Oscar Mateo <oscar.mateo@intel.com>

We are going to start creating a lot of extra ringbuffers soon, so
these functions are handy.

No functional changes.

Signed-off-by: Oscar Mateo <oscar.mateo@intel.com>
---
 drivers/gpu/drm/i915/intel_ringbuffer.c | 26 ++++++++++++++++----------
 drivers/gpu/drm/i915/intel_ringbuffer.h |  4 ++++
 2 files changed, 20 insertions(+), 10 deletions(-)

Comments

bradley.d.volkin@intel.com June 18, 2014, 9:39 p.m. UTC | #1
On Fri, Jun 13, 2014 at 08:37:22AM -0700, oscar.mateo@intel.com wrote:
> From: Oscar Mateo <oscar.mateo@intel.com>
> 
> We are going to start creating a lot of extra ringbuffers soon, so
> these functions are handy.
> 
> No functional changes.
> 
> Signed-off-by: Oscar Mateo <oscar.mateo@intel.com>
> ---
>  drivers/gpu/drm/i915/intel_ringbuffer.c | 26 ++++++++++++++++----------
>  drivers/gpu/drm/i915/intel_ringbuffer.h |  4 ++++
>  2 files changed, 20 insertions(+), 10 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c
> index 279488a..915f3d5 100644
> --- a/drivers/gpu/drm/i915/intel_ringbuffer.c
> +++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
> @@ -1378,15 +1378,25 @@ static int init_phys_status_page(struct intel_engine_cs *ring)
>  	return 0;
>  }
>  
> -static int allocate_ring_buffer(struct intel_engine_cs *ring)
> +void intel_destroy_ring_buffer(struct intel_ringbuffer *ringbuf)
> +{
> +	if (!ringbuf->obj)
> +		return;
> +
> +	iounmap(ringbuf->virtual_start);
> +	i915_gem_object_ggtt_unpin(ringbuf->obj);
> +	drm_gem_object_unreference(&ringbuf->obj->base);
> +	ringbuf->obj = NULL;
> +}
> +
> +int intel_allocate_ring_buffer(struct drm_device *dev,
> +			       struct intel_ringbuffer *ringbuf)

A bikeshed, but maybe intel_alloc_ringbuffer_obj() since we're only
allocating the backing object, and to mirror the earlier
i915_gem_alloc_context_obj() with similar purpose. Otherwise, looks
fine to me.

Brad

>  {
> -	struct drm_device *dev = ring->dev;
>  	struct drm_i915_private *dev_priv = to_i915(dev);
> -	struct intel_ringbuffer *ringbuf = ring->buffer;
>  	struct drm_i915_gem_object *obj;
>  	int ret;
>  
> -	if (intel_ring_initialized(ring))
> +	if (ringbuf->obj)
>  		return 0;
>  
>  	obj = NULL;
> @@ -1455,7 +1465,7 @@ static int intel_init_ring_buffer(struct drm_device *dev,
>  			goto error;
>  	}
>  
> -	ret = allocate_ring_buffer(ring);
> +	ret = intel_allocate_ring_buffer(dev, ringbuf);
>  	if (ret) {
>  		DRM_ERROR("Failed to allocate ringbuffer %s: %d\n", ring->name, ret);
>  		goto error;
> @@ -1496,11 +1506,7 @@ void intel_cleanup_ring_buffer(struct intel_engine_cs *ring)
>  	intel_stop_ring_buffer(ring);
>  	WARN_ON(!IS_GEN2(ring->dev) && (I915_READ_MODE(ring) & MODE_IDLE) == 0);
>  
> -	iounmap(ringbuf->virtual_start);
> -
> -	i915_gem_object_ggtt_unpin(ringbuf->obj);
> -	drm_gem_object_unreference(&ringbuf->obj->base);
> -	ringbuf->obj = NULL;
> +	intel_destroy_ring_buffer(ringbuf);
>  	ring->preallocated_lazy_request = NULL;
>  	ring->outstanding_lazy_seqno = 0;
>  
> diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.h b/drivers/gpu/drm/i915/intel_ringbuffer.h
> index 910c83c..dee5b37 100644
> --- a/drivers/gpu/drm/i915/intel_ringbuffer.h
> +++ b/drivers/gpu/drm/i915/intel_ringbuffer.h
> @@ -318,6 +318,10 @@ int intel_init_vebox_ring_buffer(struct drm_device *dev);
>  u64 intel_ring_get_active_head(struct intel_engine_cs *ring);
>  void intel_ring_setup_status_page(struct intel_engine_cs *ring);
>  
> +void intel_destroy_ring_buffer(struct intel_ringbuffer *ringbuf);
> +int intel_allocate_ring_buffer(struct drm_device *dev,
> +			       struct intel_ringbuffer *ringbuf);
> +
>  static inline u32 intel_ring_get_tail(struct intel_engine_cs *ring)
>  {
>  	return ring->buffer->tail;
> -- 
> 1.9.0
> 
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
oscar.mateo@intel.com June 19, 2014, 10:42 a.m. UTC | #2
> -----Original Message-----
> From: Volkin, Bradley D
> Sent: Wednesday, June 18, 2014 10:39 PM
> To: Mateo Lozano, Oscar
> Cc: intel-gfx@lists.freedesktop.org
> Subject: Re: [Intel-gfx] [PATCH 04/53] drm/i915: Extract ringbuffer destroy &
> make alloc outside accesible
> 
> On Fri, Jun 13, 2014 at 08:37:22AM -0700, oscar.mateo@intel.com wrote:
> > From: Oscar Mateo <oscar.mateo@intel.com>
> >
> > We are going to start creating a lot of extra ringbuffers soon, so
> > these functions are handy.
> >
> > No functional changes.
> >
> > Signed-off-by: Oscar Mateo <oscar.mateo@intel.com>
> > ---
> >  drivers/gpu/drm/i915/intel_ringbuffer.c | 26
> > ++++++++++++++++----------  drivers/gpu/drm/i915/intel_ringbuffer.h |
> > 4 ++++
> >  2 files changed, 20 insertions(+), 10 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c
> > b/drivers/gpu/drm/i915/intel_ringbuffer.c
> > index 279488a..915f3d5 100644
> > --- a/drivers/gpu/drm/i915/intel_ringbuffer.c
> > +++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
> > @@ -1378,15 +1378,25 @@ static int init_phys_status_page(struct
> intel_engine_cs *ring)
> >  	return 0;
> >  }
> >
> > -static int allocate_ring_buffer(struct intel_engine_cs *ring)
> > +void intel_destroy_ring_buffer(struct intel_ringbuffer *ringbuf) {
> > +	if (!ringbuf->obj)
> > +		return;
> > +
> > +	iounmap(ringbuf->virtual_start);
> > +	i915_gem_object_ggtt_unpin(ringbuf->obj);
> > +	drm_gem_object_unreference(&ringbuf->obj->base);
> > +	ringbuf->obj = NULL;
> > +}
> > +
> > +int intel_allocate_ring_buffer(struct drm_device *dev,
> > +			       struct intel_ringbuffer *ringbuf)
> 
> A bikeshed, but maybe intel_alloc_ringbuffer_obj() since we're only
> allocating the backing object, and to mirror the earlier
> i915_gem_alloc_context_obj() with similar purpose. Otherwise, looks fine to
> me.
> 
> Brad

Bikeshed accepted! It does look better.

-- Oscar
diff mbox

Patch

diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c
index 279488a..915f3d5 100644
--- a/drivers/gpu/drm/i915/intel_ringbuffer.c
+++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
@@ -1378,15 +1378,25 @@  static int init_phys_status_page(struct intel_engine_cs *ring)
 	return 0;
 }
 
-static int allocate_ring_buffer(struct intel_engine_cs *ring)
+void intel_destroy_ring_buffer(struct intel_ringbuffer *ringbuf)
+{
+	if (!ringbuf->obj)
+		return;
+
+	iounmap(ringbuf->virtual_start);
+	i915_gem_object_ggtt_unpin(ringbuf->obj);
+	drm_gem_object_unreference(&ringbuf->obj->base);
+	ringbuf->obj = NULL;
+}
+
+int intel_allocate_ring_buffer(struct drm_device *dev,
+			       struct intel_ringbuffer *ringbuf)
 {
-	struct drm_device *dev = ring->dev;
 	struct drm_i915_private *dev_priv = to_i915(dev);
-	struct intel_ringbuffer *ringbuf = ring->buffer;
 	struct drm_i915_gem_object *obj;
 	int ret;
 
-	if (intel_ring_initialized(ring))
+	if (ringbuf->obj)
 		return 0;
 
 	obj = NULL;
@@ -1455,7 +1465,7 @@  static int intel_init_ring_buffer(struct drm_device *dev,
 			goto error;
 	}
 
-	ret = allocate_ring_buffer(ring);
+	ret = intel_allocate_ring_buffer(dev, ringbuf);
 	if (ret) {
 		DRM_ERROR("Failed to allocate ringbuffer %s: %d\n", ring->name, ret);
 		goto error;
@@ -1496,11 +1506,7 @@  void intel_cleanup_ring_buffer(struct intel_engine_cs *ring)
 	intel_stop_ring_buffer(ring);
 	WARN_ON(!IS_GEN2(ring->dev) && (I915_READ_MODE(ring) & MODE_IDLE) == 0);
 
-	iounmap(ringbuf->virtual_start);
-
-	i915_gem_object_ggtt_unpin(ringbuf->obj);
-	drm_gem_object_unreference(&ringbuf->obj->base);
-	ringbuf->obj = NULL;
+	intel_destroy_ring_buffer(ringbuf);
 	ring->preallocated_lazy_request = NULL;
 	ring->outstanding_lazy_seqno = 0;
 
diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.h b/drivers/gpu/drm/i915/intel_ringbuffer.h
index 910c83c..dee5b37 100644
--- a/drivers/gpu/drm/i915/intel_ringbuffer.h
+++ b/drivers/gpu/drm/i915/intel_ringbuffer.h
@@ -318,6 +318,10 @@  int intel_init_vebox_ring_buffer(struct drm_device *dev);
 u64 intel_ring_get_active_head(struct intel_engine_cs *ring);
 void intel_ring_setup_status_page(struct intel_engine_cs *ring);
 
+void intel_destroy_ring_buffer(struct intel_ringbuffer *ringbuf);
+int intel_allocate_ring_buffer(struct drm_device *dev,
+			       struct intel_ringbuffer *ringbuf);
+
 static inline u32 intel_ring_get_tail(struct intel_engine_cs *ring)
 {
 	return ring->buffer->tail;