From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH v2 1/4] drm/i915: Don't allow ring tail to reach the same cacheline as head Date: Wed, 28 Nov 2012 21:45:46 +0100 Message-ID: <20121128204546.GA3202@phenom.ffwll.local> References: <1354041298-18898-1-git-send-email-ville.syrjala@linux.intel.com> <1354041298-18898-2-git-send-email-ville.syrjala@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Return-path: Received: from mail-ea0-f177.google.com (mail-ea0-f177.google.com [209.85.215.177]) by gabe.freedesktop.org (Postfix) with ESMTP id 28249E5DFF for ; Wed, 28 Nov 2012 12:44:26 -0800 (PST) Received: by mail-ea0-f177.google.com with SMTP id c10so3634676eaa.36 for ; Wed, 28 Nov 2012 12:44:25 -0800 (PST) Content-Disposition: inline In-Reply-To: <1354041298-18898-2-git-send-email-ville.syrjala@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: intel-gfx-bounces+gcfxdi-intel-gfx=m.gmane.org@lists.freedesktop.org Errors-To: intel-gfx-bounces+gcfxdi-intel-gfx=m.gmane.org@lists.freedesktop.org To: ville.syrjala@linux.intel.com Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org On Tue, Nov 27, 2012 at 08:34:55PM +0200, ville.syrjala@linux.intel.com wro= te: > From: Ville Syrj=E4l=E4 > = > From BSpec: > "If the Ring Buffer Head Pointer and the Tail Pointer are on the same > cacheline, the Head Pointer must not be greater than the Tail > Pointer." > = > The easiest way to enforce this is to reduce the reported ring space. > = > References: > Gen2 BSpec "1. Programming Environment" / "1.4.4.6 Ring Buffer Use" > Gen3 BSpec "vol1c Memory Interface Functions" / "2.3.4.5 Ring Buffer Use" > Gen4+ BSpec "vol1c Memory Interface and Command Stream" / "5.3.4.5 Ring B= uffer Use" > = > v2: Include the exact BSpec references in the description > = > Signed-off-by: Ville Syrj=E4l=E4 > Reviewed-by: Chris Wilson Another small bikeshed for this one: Less magic numbers with #define RING_FREE_SPACE 64 -Daniel > --- > drivers/gpu/drm/i915/i915_dma.c | 2 +- > drivers/gpu/drm/i915/intel_ringbuffer.c | 4 ++-- > drivers/gpu/drm/i915/intel_ringbuffer.h | 2 +- > 3 files changed, 4 insertions(+), 4 deletions(-) > = > diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_= dma.c > index 86b93b2..79089aa 100644 > --- a/drivers/gpu/drm/i915/i915_dma.c > +++ b/drivers/gpu/drm/i915/i915_dma.c > @@ -141,7 +141,7 @@ void i915_kernel_lost_context(struct drm_device * dev) > = > ring->head =3D I915_READ_HEAD(ring) & HEAD_ADDR; > ring->tail =3D I915_READ_TAIL(ring) & TAIL_ADDR; > - ring->space =3D ring->head - (ring->tail + 8); > + ring->space =3D ring->head - (ring->tail + 64); > if (ring->space < 0) > ring->space +=3D ring->size; > = > diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i9= 15/intel_ringbuffer.c > index b0a83ce..cf11f8a 100644 > --- a/drivers/gpu/drm/i915/intel_ringbuffer.c > +++ b/drivers/gpu/drm/i915/intel_ringbuffer.c > @@ -45,7 +45,7 @@ struct pipe_control { > = > static inline int ring_space(struct intel_ring_buffer *ring) > { > - int space =3D (ring->head & HEAD_ADDR) - (ring->tail + 8); > + int space =3D (ring->head & HEAD_ADDR) - (ring->tail + 64); > if (space < 0) > space +=3D ring->size; > return space; > @@ -1260,7 +1260,7 @@ static int intel_ring_wait_request(struct intel_rin= g_buffer *ring, int n) > if (request->tail =3D=3D -1) > continue; > = > - space =3D request->tail - (ring->tail + 8); > + space =3D request->tail - (ring->tail + 64); > if (space < 0) > space +=3D ring->size; > if (space >=3D n) { > diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.h b/drivers/gpu/drm/i9= 15/intel_ringbuffer.h > index 5af65b8..2f6d9b1 100644 > --- a/drivers/gpu/drm/i915/intel_ringbuffer.h > +++ b/drivers/gpu/drm/i915/intel_ringbuffer.h > @@ -191,7 +191,7 @@ void intel_cleanup_ring_buffer(struct intel_ring_buff= er *ring); > int __must_check intel_wait_ring_buffer(struct intel_ring_buffer *ring, = int n); > static inline int intel_wait_ring_idle(struct intel_ring_buffer *ring) > { > - return intel_wait_ring_buffer(ring, ring->size - 8); > + return intel_wait_ring_buffer(ring, ring->size - 64); > } > = > int __must_check intel_ring_begin(struct intel_ring_buffer *ring, int n); > -- = > 1.7.8.6 > = > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/intel-gfx -- = Daniel Vetter Software Engineer, Intel Corporation +41 (0) 79 365 57 48 - http://blog.ffwll.ch