All of lore.kernel.org
 help / color / mirror / Atom feed
* Re: [PATCH] drm/i915: Record error batch buffers using iomem
  2010-05-11 18:22   ` Chris Wilson
  (?)
  (?)
@ 2010-05-11 15:37   ` Andrew Morton
  2010-05-11 18:49     ` Chris Wilson
  2010-05-11 18:49     ` Chris Wilson
  -1 siblings, 2 replies; 24+ messages in thread
From: Andrew Morton @ 2010-05-11 15:37 UTC (permalink / raw)
  To: Chris Wilson
  Cc: intel-gfx, Jaswinder Singh Rajput, dri-devel, Dave Airlie, linux-kernel

On Tue, 11 May 2010 19:22:14 +0100 Chris Wilson <chris@chris-wilson.co.uk> wrote:

> +	reloc_offset = src_priv->gtt_offset;
>  	for (page = 0; page < page_count; page++) {
> -		void *s, *d = kmalloc(PAGE_SIZE, GFP_ATOMIC);
> +		void __iomem *s;
> +		void *d;
> +
> +		d = kmalloc(PAGE_SIZE, GFP_ATOMIC);
>  		if (d == NULL)
>  			goto unwind;
> -		s = kmap_atomic(src_priv->pages[page], KM_USER0);
> -		memcpy(d, s, PAGE_SIZE);
> -		kunmap_atomic(s, KM_USER0);
> +
> +		s = io_mapping_map_atomic_wc(dev_priv->mm.gtt_mapping,
> +					     reloc_offset);
> +		memcpy_fromio(d, s, PAGE_SIZE);
> +		io_mapping_unmap_atomic(s);

As mentioned in the other email, this will still corrupt the KM_USER0
slot, and will generate a debug_kmap_atomic() warning.


^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [PATCH] drm/i915: Record error batch buffers using iomem
  2010-05-11 18:22   ` Chris Wilson
  (?)
@ 2010-05-11 15:37   ` Andrew Morton
  -1 siblings, 0 replies; 24+ messages in thread
From: Andrew Morton @ 2010-05-11 15:37 UTC (permalink / raw)
  To: Chris Wilson; +Cc: intel-gfx, dri-devel, Jaswinder Singh Rajput, linux-kernel

On Tue, 11 May 2010 19:22:14 +0100 Chris Wilson <chris@chris-wilson.co.uk> wrote:

> +	reloc_offset = src_priv->gtt_offset;
>  	for (page = 0; page < page_count; page++) {
> -		void *s, *d = kmalloc(PAGE_SIZE, GFP_ATOMIC);
> +		void __iomem *s;
> +		void *d;
> +
> +		d = kmalloc(PAGE_SIZE, GFP_ATOMIC);
>  		if (d == NULL)
>  			goto unwind;
> -		s = kmap_atomic(src_priv->pages[page], KM_USER0);
> -		memcpy(d, s, PAGE_SIZE);
> -		kunmap_atomic(s, KM_USER0);
> +
> +		s = io_mapping_map_atomic_wc(dev_priv->mm.gtt_mapping,
> +					     reloc_offset);
> +		memcpy_fromio(d, s, PAGE_SIZE);
> +		io_mapping_unmap_atomic(s);

As mentioned in the other email, this will still corrupt the KM_USER0
slot, and will generate a debug_kmap_atomic() warning.

^ permalink raw reply	[flat|nested] 24+ messages in thread

* [PATCH] drm/i915: Record error batch buffers using iomem
       [not found] <0100511104818.8382a7de.akpm@linux-foundation.org>
@ 2010-05-11 18:22   ` Chris Wilson
  0 siblings, 0 replies; 24+ messages in thread
From: Chris Wilson @ 2010-05-11 18:22 UTC (permalink / raw)
  To: intel-gfx
  Cc: Andrew Morton, Jaswinder Singh Rajput, dri-devel, Dave Airlie,
	linux-kernel, Chris Wilson

Directly read the GTT mapping for the contents of the batch buffers
rather than relying on possibly stale CPU caches. Also for completeness
scan the flushing/inactive lists for the current buffers - we are
collecting error state after all.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
---
 drivers/gpu/drm/i915/i915_irq.c |   64 ++++++++++++++++++++++++++++++++++----
 1 files changed, 57 insertions(+), 7 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
index 87113da..14301a4 100644
--- a/drivers/gpu/drm/i915/i915_irq.c
+++ b/drivers/gpu/drm/i915/i915_irq.c
@@ -441,9 +441,11 @@ static struct drm_i915_error_object *
 i915_error_object_create(struct drm_device *dev,
 			 struct drm_gem_object *src)
 {
+	drm_i915_private_t *dev_priv = dev->dev_private;
 	struct drm_i915_error_object *dst;
 	struct drm_i915_gem_object *src_priv;
 	int page, page_count;
+	u32 reloc_offset;
 
 	if (src == NULL)
 		return NULL;
@@ -458,14 +460,23 @@ i915_error_object_create(struct drm_device *dev,
 	if (dst == NULL)
 		return NULL;
 
+	reloc_offset = src_priv->gtt_offset;
 	for (page = 0; page < page_count; page++) {
-		void *s, *d = kmalloc(PAGE_SIZE, GFP_ATOMIC);
+		void __iomem *s;
+		void *d;
+
+		d = kmalloc(PAGE_SIZE, GFP_ATOMIC);
 		if (d == NULL)
 			goto unwind;
-		s = kmap_atomic(src_priv->pages[page], KM_USER0);
-		memcpy(d, s, PAGE_SIZE);
-		kunmap_atomic(s, KM_USER0);
+
+		s = io_mapping_map_atomic_wc(dev_priv->mm.gtt_mapping,
+					     reloc_offset);
+		memcpy_fromio(d, s, PAGE_SIZE);
+		io_mapping_unmap_atomic(s);
+
 		dst->pages[page] = d;
+
+		reloc_offset += PAGE_SIZE;
 	}
 	dst->page_count = page_count;
 	dst->gtt_offset = src_priv->gtt_offset;
@@ -621,18 +632,57 @@ static void i915_capture_error_state(struct drm_device *dev)
 
 		if (batchbuffer[1] == NULL &&
 		    error->acthd >= obj_priv->gtt_offset &&
-		    error->acthd < obj_priv->gtt_offset + obj->size &&
-		    batchbuffer[0] != obj)
+		    error->acthd < obj_priv->gtt_offset + obj->size)
 			batchbuffer[1] = obj;
 
 		count++;
 	}
+	/* Scan the other lists for completeness for those bizarre errors. */
+	if (batchbuffer[0] == NULL || batchbuffer[1] == NULL) {
+		list_for_each_entry(obj_priv, &dev_priv->mm.flushing_list, list) {
+			struct drm_gem_object *obj = obj_priv->obj;
+
+			if (batchbuffer[0] == NULL &&
+			    bbaddr >= obj_priv->gtt_offset &&
+			    bbaddr < obj_priv->gtt_offset + obj->size)
+				batchbuffer[0] = obj;
+
+			if (batchbuffer[1] == NULL &&
+			    error->acthd >= obj_priv->gtt_offset &&
+			    error->acthd < obj_priv->gtt_offset + obj->size)
+				batchbuffer[1] = obj;
+
+			if (batchbuffer[0] && batchbuffer[1])
+				break;
+		}
+	}
+	if (batchbuffer[0] == NULL || batchbuffer[1] == NULL) {
+		list_for_each_entry(obj_priv, &dev_priv->mm.inactive_list, list) {
+			struct drm_gem_object *obj = obj_priv->obj;
+
+			if (batchbuffer[0] == NULL &&
+			    bbaddr >= obj_priv->gtt_offset &&
+			    bbaddr < obj_priv->gtt_offset + obj->size)
+				batchbuffer[0] = obj;
+
+			if (batchbuffer[1] == NULL &&
+			    error->acthd >= obj_priv->gtt_offset &&
+			    error->acthd < obj_priv->gtt_offset + obj->size)
+				batchbuffer[1] = obj;
+
+			if (batchbuffer[0] && batchbuffer[1])
+				break;
+		}
+	}
 
 	/* We need to copy these to an anonymous buffer as the simplest
 	 * method to avoid being overwritten by userpace.
 	 */
 	error->batchbuffer[0] = i915_error_object_create(dev, batchbuffer[0]);
-	error->batchbuffer[1] = i915_error_object_create(dev, batchbuffer[1]);
+	if (batchbuffer[1] != batchbuffer[0])
+		error->batchbuffer[1] = i915_error_object_create(dev, batchbuffer[1]);
+	else
+		error->batchbuffer[1] = NULL;
 
 	/* Record the ringbuffer */
 	error->ringbuffer = i915_error_object_create(dev, dev_priv->ring.ring_obj);
-- 
1.7.1


^ permalink raw reply related	[flat|nested] 24+ messages in thread

* [PATCH] drm/i915: Record error batch buffers using iomem
@ 2010-05-11 18:22   ` Chris Wilson
  0 siblings, 0 replies; 24+ messages in thread
From: Chris Wilson @ 2010-05-11 18:22 UTC (permalink / raw)
  To: intel-gfx; +Cc: linux-kernel, dri-devel, Jaswinder Singh Rajput, Andrew Morton

Directly read the GTT mapping for the contents of the batch buffers
rather than relying on possibly stale CPU caches. Also for completeness
scan the flushing/inactive lists for the current buffers - we are
collecting error state after all.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
---
 drivers/gpu/drm/i915/i915_irq.c |   64 ++++++++++++++++++++++++++++++++++----
 1 files changed, 57 insertions(+), 7 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
index 87113da..14301a4 100644
--- a/drivers/gpu/drm/i915/i915_irq.c
+++ b/drivers/gpu/drm/i915/i915_irq.c
@@ -441,9 +441,11 @@ static struct drm_i915_error_object *
 i915_error_object_create(struct drm_device *dev,
 			 struct drm_gem_object *src)
 {
+	drm_i915_private_t *dev_priv = dev->dev_private;
 	struct drm_i915_error_object *dst;
 	struct drm_i915_gem_object *src_priv;
 	int page, page_count;
+	u32 reloc_offset;
 
 	if (src == NULL)
 		return NULL;
@@ -458,14 +460,23 @@ i915_error_object_create(struct drm_device *dev,
 	if (dst == NULL)
 		return NULL;
 
+	reloc_offset = src_priv->gtt_offset;
 	for (page = 0; page < page_count; page++) {
-		void *s, *d = kmalloc(PAGE_SIZE, GFP_ATOMIC);
+		void __iomem *s;
+		void *d;
+
+		d = kmalloc(PAGE_SIZE, GFP_ATOMIC);
 		if (d == NULL)
 			goto unwind;
-		s = kmap_atomic(src_priv->pages[page], KM_USER0);
-		memcpy(d, s, PAGE_SIZE);
-		kunmap_atomic(s, KM_USER0);
+
+		s = io_mapping_map_atomic_wc(dev_priv->mm.gtt_mapping,
+					     reloc_offset);
+		memcpy_fromio(d, s, PAGE_SIZE);
+		io_mapping_unmap_atomic(s);
+
 		dst->pages[page] = d;
+
+		reloc_offset += PAGE_SIZE;
 	}
 	dst->page_count = page_count;
 	dst->gtt_offset = src_priv->gtt_offset;
@@ -621,18 +632,57 @@ static void i915_capture_error_state(struct drm_device *dev)
 
 		if (batchbuffer[1] == NULL &&
 		    error->acthd >= obj_priv->gtt_offset &&
-		    error->acthd < obj_priv->gtt_offset + obj->size &&
-		    batchbuffer[0] != obj)
+		    error->acthd < obj_priv->gtt_offset + obj->size)
 			batchbuffer[1] = obj;
 
 		count++;
 	}
+	/* Scan the other lists for completeness for those bizarre errors. */
+	if (batchbuffer[0] == NULL || batchbuffer[1] == NULL) {
+		list_for_each_entry(obj_priv, &dev_priv->mm.flushing_list, list) {
+			struct drm_gem_object *obj = obj_priv->obj;
+
+			if (batchbuffer[0] == NULL &&
+			    bbaddr >= obj_priv->gtt_offset &&
+			    bbaddr < obj_priv->gtt_offset + obj->size)
+				batchbuffer[0] = obj;
+
+			if (batchbuffer[1] == NULL &&
+			    error->acthd >= obj_priv->gtt_offset &&
+			    error->acthd < obj_priv->gtt_offset + obj->size)
+				batchbuffer[1] = obj;
+
+			if (batchbuffer[0] && batchbuffer[1])
+				break;
+		}
+	}
+	if (batchbuffer[0] == NULL || batchbuffer[1] == NULL) {
+		list_for_each_entry(obj_priv, &dev_priv->mm.inactive_list, list) {
+			struct drm_gem_object *obj = obj_priv->obj;
+
+			if (batchbuffer[0] == NULL &&
+			    bbaddr >= obj_priv->gtt_offset &&
+			    bbaddr < obj_priv->gtt_offset + obj->size)
+				batchbuffer[0] = obj;
+
+			if (batchbuffer[1] == NULL &&
+			    error->acthd >= obj_priv->gtt_offset &&
+			    error->acthd < obj_priv->gtt_offset + obj->size)
+				batchbuffer[1] = obj;
+
+			if (batchbuffer[0] && batchbuffer[1])
+				break;
+		}
+	}
 
 	/* We need to copy these to an anonymous buffer as the simplest
 	 * method to avoid being overwritten by userpace.
 	 */
 	error->batchbuffer[0] = i915_error_object_create(dev, batchbuffer[0]);
-	error->batchbuffer[1] = i915_error_object_create(dev, batchbuffer[1]);
+	if (batchbuffer[1] != batchbuffer[0])
+		error->batchbuffer[1] = i915_error_object_create(dev, batchbuffer[1]);
+	else
+		error->batchbuffer[1] = NULL;
 
 	/* Record the ringbuffer */
 	error->ringbuffer = i915_error_object_create(dev, dev_priv->ring.ring_obj);
-- 
1.7.1

^ permalink raw reply related	[flat|nested] 24+ messages in thread

* Re: [PATCH] drm/i915: Record error batch buffers using iomem
  2010-05-11 15:37   ` Andrew Morton
@ 2010-05-11 18:49     ` Chris Wilson
  2010-05-11 18:49     ` Chris Wilson
  1 sibling, 0 replies; 24+ messages in thread
From: Chris Wilson @ 2010-05-11 18:49 UTC (permalink / raw)
  To: Andrew Morton
  Cc: intel-gfx, Jaswinder Singh Rajput, dri-devel, Dave Airlie, linux-kernel

On Tue, 11 May 2010 11:37:22 -0400, Andrew Morton <akpm@linux-foundation.org> wrote:
> On Tue, 11 May 2010 19:22:14 +0100 Chris Wilson <chris@chris-wilson.co.uk> wrote:
> 
> > +	reloc_offset = src_priv->gtt_offset;
> >  	for (page = 0; page < page_count; page++) {
> > -		void *s, *d = kmalloc(PAGE_SIZE, GFP_ATOMIC);
> > +		void __iomem *s;
> > +		void *d;
> > +
> > +		d = kmalloc(PAGE_SIZE, GFP_ATOMIC);
> >  		if (d == NULL)
> >  			goto unwind;
> > -		s = kmap_atomic(src_priv->pages[page], KM_USER0);
> > -		memcpy(d, s, PAGE_SIZE);
> > -		kunmap_atomic(s, KM_USER0);
> > +
> > +		s = io_mapping_map_atomic_wc(dev_priv->mm.gtt_mapping,
> > +					     reloc_offset);
> > +		memcpy_fromio(d, s, PAGE_SIZE);
> > +		io_mapping_unmap_atomic(s);
> 
> As mentioned in the other email, this will still corrupt the KM_USER0
> slot, and will generate a debug_kmap_atomic() warning.

How, as kmap_atomic(KM_USER0) is no longer used?
-- 
Chris Wilson, Intel Open Source Technology Centre

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [PATCH] drm/i915: Record error batch buffers using iomem
  2010-05-11 15:37   ` Andrew Morton
  2010-05-11 18:49     ` Chris Wilson
@ 2010-05-11 18:49     ` Chris Wilson
  1 sibling, 0 replies; 24+ messages in thread
From: Chris Wilson @ 2010-05-11 18:49 UTC (permalink / raw)
  To: Andrew Morton; +Cc: intel-gfx, dri-devel, Jaswinder Singh Rajput, linux-kernel

On Tue, 11 May 2010 11:37:22 -0400, Andrew Morton <akpm@linux-foundation.org> wrote:
> On Tue, 11 May 2010 19:22:14 +0100 Chris Wilson <chris@chris-wilson.co.uk> wrote:
> 
> > +	reloc_offset = src_priv->gtt_offset;
> >  	for (page = 0; page < page_count; page++) {
> > -		void *s, *d = kmalloc(PAGE_SIZE, GFP_ATOMIC);
> > +		void __iomem *s;
> > +		void *d;
> > +
> > +		d = kmalloc(PAGE_SIZE, GFP_ATOMIC);
> >  		if (d == NULL)
> >  			goto unwind;
> > -		s = kmap_atomic(src_priv->pages[page], KM_USER0);
> > -		memcpy(d, s, PAGE_SIZE);
> > -		kunmap_atomic(s, KM_USER0);
> > +
> > +		s = io_mapping_map_atomic_wc(dev_priv->mm.gtt_mapping,
> > +					     reloc_offset);
> > +		memcpy_fromio(d, s, PAGE_SIZE);
> > +		io_mapping_unmap_atomic(s);
> 
> As mentioned in the other email, this will still corrupt the KM_USER0
> slot, and will generate a debug_kmap_atomic() warning.

How, as kmap_atomic(KM_USER0) is no longer used?
-- 
Chris Wilson, Intel Open Source Technology Centre

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [PATCH] drm/i915: Record error batch buffers using iomem
  2010-05-11 18:22   ` Chris Wilson
@ 2010-05-11 19:22     ` Jaswinder Singh Rajput
  -1 siblings, 0 replies; 24+ messages in thread
From: Jaswinder Singh Rajput @ 2010-05-11 19:22 UTC (permalink / raw)
  To: Chris Wilson
  Cc: intel-gfx, Andrew Morton, dri-devel, Dave Airlie, linux-kernel

Hello Chris and Andrew,

On Tue, May 11, 2010 at 11:52 PM, Chris Wilson <chris@chris-wilson.co.uk> wrote:
> Directly read the GTT mapping for the contents of the batch buffers
> rather than relying on possibly stale CPU caches. Also for completeness
> scan the flushing/inactive lists for the current buffers - we are
> collecting error state after all.
>
> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>

Yes, I have tested this patch.

I booted 3 times, and this patch fixes the DRM as well as softirq
warnings and I am getting Xwindows with this patch.

I am still doing more testing.

Thanks,
--
Jaswinder Singh.
> ---
>  drivers/gpu/drm/i915/i915_irq.c |   64 ++++++++++++++++++++++++++++++++++----
>  1 files changed, 57 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
> index 87113da..14301a4 100644
> --- a/drivers/gpu/drm/i915/i915_irq.c
> +++ b/drivers/gpu/drm/i915/i915_irq.c
> @@ -441,9 +441,11 @@ static struct drm_i915_error_object *
>  i915_error_object_create(struct drm_device *dev,
>                         struct drm_gem_object *src)
>  {
> +       drm_i915_private_t *dev_priv = dev->dev_private;
>        struct drm_i915_error_object *dst;
>        struct drm_i915_gem_object *src_priv;
>        int page, page_count;
> +       u32 reloc_offset;
>
>        if (src == NULL)
>                return NULL;
> @@ -458,14 +460,23 @@ i915_error_object_create(struct drm_device *dev,
>        if (dst == NULL)
>                return NULL;
>
> +       reloc_offset = src_priv->gtt_offset;
>        for (page = 0; page < page_count; page++) {
> -               void *s, *d = kmalloc(PAGE_SIZE, GFP_ATOMIC);
> +               void __iomem *s;
> +               void *d;
> +
> +               d = kmalloc(PAGE_SIZE, GFP_ATOMIC);
>                if (d == NULL)
>                        goto unwind;
> -               s = kmap_atomic(src_priv->pages[page], KM_USER0);
> -               memcpy(d, s, PAGE_SIZE);
> -               kunmap_atomic(s, KM_USER0);
> +
> +               s = io_mapping_map_atomic_wc(dev_priv->mm.gtt_mapping,
> +                                            reloc_offset);
> +               memcpy_fromio(d, s, PAGE_SIZE);
> +               io_mapping_unmap_atomic(s);
> +
>                dst->pages[page] = d;
> +
> +               reloc_offset += PAGE_SIZE;
>        }
>        dst->page_count = page_count;
>        dst->gtt_offset = src_priv->gtt_offset;
> @@ -621,18 +632,57 @@ static void i915_capture_error_state(struct drm_device *dev)
>
>                if (batchbuffer[1] == NULL &&
>                    error->acthd >= obj_priv->gtt_offset &&
> -                   error->acthd < obj_priv->gtt_offset + obj->size &&
> -                   batchbuffer[0] != obj)
> +                   error->acthd < obj_priv->gtt_offset + obj->size)
>                        batchbuffer[1] = obj;
>
>                count++;
>        }
> +       /* Scan the other lists for completeness for those bizarre errors. */
> +       if (batchbuffer[0] == NULL || batchbuffer[1] == NULL) {
> +               list_for_each_entry(obj_priv, &dev_priv->mm.flushing_list, list) {
> +                       struct drm_gem_object *obj = obj_priv->obj;
> +
> +                       if (batchbuffer[0] == NULL &&
> +                           bbaddr >= obj_priv->gtt_offset &&
> +                           bbaddr < obj_priv->gtt_offset + obj->size)
> +                               batchbuffer[0] = obj;
> +
> +                       if (batchbuffer[1] == NULL &&
> +                           error->acthd >= obj_priv->gtt_offset &&
> +                           error->acthd < obj_priv->gtt_offset + obj->size)
> +                               batchbuffer[1] = obj;
> +
> +                       if (batchbuffer[0] && batchbuffer[1])
> +                               break;
> +               }
> +       }
> +       if (batchbuffer[0] == NULL || batchbuffer[1] == NULL) {
> +               list_for_each_entry(obj_priv, &dev_priv->mm.inactive_list, list) {
> +                       struct drm_gem_object *obj = obj_priv->obj;
> +
> +                       if (batchbuffer[0] == NULL &&
> +                           bbaddr >= obj_priv->gtt_offset &&
> +                           bbaddr < obj_priv->gtt_offset + obj->size)
> +                               batchbuffer[0] = obj;
> +
> +                       if (batchbuffer[1] == NULL &&
> +                           error->acthd >= obj_priv->gtt_offset &&
> +                           error->acthd < obj_priv->gtt_offset + obj->size)
> +                               batchbuffer[1] = obj;
> +
> +                       if (batchbuffer[0] && batchbuffer[1])
> +                               break;
> +               }
> +       }
>
>        /* We need to copy these to an anonymous buffer as the simplest
>         * method to avoid being overwritten by userpace.
>         */
>        error->batchbuffer[0] = i915_error_object_create(dev, batchbuffer[0]);
> -       error->batchbuffer[1] = i915_error_object_create(dev, batchbuffer[1]);
> +       if (batchbuffer[1] != batchbuffer[0])
> +               error->batchbuffer[1] = i915_error_object_create(dev, batchbuffer[1]);
> +       else
> +               error->batchbuffer[1] = NULL;
>
>        /* Record the ringbuffer */
>        error->ringbuffer = i915_error_object_create(dev, dev_priv->ring.ring_obj);
> --
> 1.7.1
>
>

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [PATCH] drm/i915: Record error batch buffers using iomem
@ 2010-05-11 19:22     ` Jaswinder Singh Rajput
  0 siblings, 0 replies; 24+ messages in thread
From: Jaswinder Singh Rajput @ 2010-05-11 19:22 UTC (permalink / raw)
  To: Chris Wilson; +Cc: intel-gfx, Andrew Morton, dri-devel, linux-kernel

Hello Chris and Andrew,

On Tue, May 11, 2010 at 11:52 PM, Chris Wilson <chris@chris-wilson.co.uk> wrote:
> Directly read the GTT mapping for the contents of the batch buffers
> rather than relying on possibly stale CPU caches. Also for completeness
> scan the flushing/inactive lists for the current buffers - we are
> collecting error state after all.
>
> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>

Yes, I have tested this patch.

I booted 3 times, and this patch fixes the DRM as well as softirq
warnings and I am getting Xwindows with this patch.

I am still doing more testing.

Thanks,
--
Jaswinder Singh.
> ---
>  drivers/gpu/drm/i915/i915_irq.c |   64 ++++++++++++++++++++++++++++++++++----
>  1 files changed, 57 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
> index 87113da..14301a4 100644
> --- a/drivers/gpu/drm/i915/i915_irq.c
> +++ b/drivers/gpu/drm/i915/i915_irq.c
> @@ -441,9 +441,11 @@ static struct drm_i915_error_object *
>  i915_error_object_create(struct drm_device *dev,
>                         struct drm_gem_object *src)
>  {
> +       drm_i915_private_t *dev_priv = dev->dev_private;
>        struct drm_i915_error_object *dst;
>        struct drm_i915_gem_object *src_priv;
>        int page, page_count;
> +       u32 reloc_offset;
>
>        if (src == NULL)
>                return NULL;
> @@ -458,14 +460,23 @@ i915_error_object_create(struct drm_device *dev,
>        if (dst == NULL)
>                return NULL;
>
> +       reloc_offset = src_priv->gtt_offset;
>        for (page = 0; page < page_count; page++) {
> -               void *s, *d = kmalloc(PAGE_SIZE, GFP_ATOMIC);
> +               void __iomem *s;
> +               void *d;
> +
> +               d = kmalloc(PAGE_SIZE, GFP_ATOMIC);
>                if (d == NULL)
>                        goto unwind;
> -               s = kmap_atomic(src_priv->pages[page], KM_USER0);
> -               memcpy(d, s, PAGE_SIZE);
> -               kunmap_atomic(s, KM_USER0);
> +
> +               s = io_mapping_map_atomic_wc(dev_priv->mm.gtt_mapping,
> +                                            reloc_offset);
> +               memcpy_fromio(d, s, PAGE_SIZE);
> +               io_mapping_unmap_atomic(s);
> +
>                dst->pages[page] = d;
> +
> +               reloc_offset += PAGE_SIZE;
>        }
>        dst->page_count = page_count;
>        dst->gtt_offset = src_priv->gtt_offset;
> @@ -621,18 +632,57 @@ static void i915_capture_error_state(struct drm_device *dev)
>
>                if (batchbuffer[1] == NULL &&
>                    error->acthd >= obj_priv->gtt_offset &&
> -                   error->acthd < obj_priv->gtt_offset + obj->size &&
> -                   batchbuffer[0] != obj)
> +                   error->acthd < obj_priv->gtt_offset + obj->size)
>                        batchbuffer[1] = obj;
>
>                count++;
>        }
> +       /* Scan the other lists for completeness for those bizarre errors. */
> +       if (batchbuffer[0] == NULL || batchbuffer[1] == NULL) {
> +               list_for_each_entry(obj_priv, &dev_priv->mm.flushing_list, list) {
> +                       struct drm_gem_object *obj = obj_priv->obj;
> +
> +                       if (batchbuffer[0] == NULL &&
> +                           bbaddr >= obj_priv->gtt_offset &&
> +                           bbaddr < obj_priv->gtt_offset + obj->size)
> +                               batchbuffer[0] = obj;
> +
> +                       if (batchbuffer[1] == NULL &&
> +                           error->acthd >= obj_priv->gtt_offset &&
> +                           error->acthd < obj_priv->gtt_offset + obj->size)
> +                               batchbuffer[1] = obj;
> +
> +                       if (batchbuffer[0] && batchbuffer[1])
> +                               break;
> +               }
> +       }
> +       if (batchbuffer[0] == NULL || batchbuffer[1] == NULL) {
> +               list_for_each_entry(obj_priv, &dev_priv->mm.inactive_list, list) {
> +                       struct drm_gem_object *obj = obj_priv->obj;
> +
> +                       if (batchbuffer[0] == NULL &&
> +                           bbaddr >= obj_priv->gtt_offset &&
> +                           bbaddr < obj_priv->gtt_offset + obj->size)
> +                               batchbuffer[0] = obj;
> +
> +                       if (batchbuffer[1] == NULL &&
> +                           error->acthd >= obj_priv->gtt_offset &&
> +                           error->acthd < obj_priv->gtt_offset + obj->size)
> +                               batchbuffer[1] = obj;
> +
> +                       if (batchbuffer[0] && batchbuffer[1])
> +                               break;
> +               }
> +       }
>
>        /* We need to copy these to an anonymous buffer as the simplest
>         * method to avoid being overwritten by userpace.
>         */
>        error->batchbuffer[0] = i915_error_object_create(dev, batchbuffer[0]);
> -       error->batchbuffer[1] = i915_error_object_create(dev, batchbuffer[1]);
> +       if (batchbuffer[1] != batchbuffer[0])
> +               error->batchbuffer[1] = i915_error_object_create(dev, batchbuffer[1]);
> +       else
> +               error->batchbuffer[1] = NULL;
>
>        /* Record the ringbuffer */
>        error->ringbuffer = i915_error_object_create(dev, dev_priv->ring.ring_obj);
> --
> 1.7.1
>
>

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [PATCH] drm/i915: Record error batch buffers using iomem
  2010-05-11 19:22     ` Jaswinder Singh Rajput
  (?)
  (?)
@ 2010-05-11 19:38     ` Jaswinder Singh Rajput
  2010-05-11 19:53         ` Chris Wilson
  -1 siblings, 1 reply; 24+ messages in thread
From: Jaswinder Singh Rajput @ 2010-05-11 19:38 UTC (permalink / raw)
  To: Chris Wilson; +Cc: Andrew Morton, dri-devel, Dave Airlie, linux-kernel

Hello Chris and Andrew,

I did further testing and noticed that this patch fixes the boot
errors and warnings and I get the XWindows.

But XWindows freezes after some time.

Thanks,
--
Jaswinder Singh.

On Wed, May 12, 2010 at 12:52 AM, Jaswinder Singh Rajput
<jaswinderlinux@gmail.com> wrote:
> Hello Chris and Andrew,
>
> On Tue, May 11, 2010 at 11:52 PM, Chris Wilson <chris@chris-wilson.co.uk> wrote:
>> Directly read the GTT mapping for the contents of the batch buffers
>> rather than relying on possibly stale CPU caches. Also for completeness
>> scan the flushing/inactive lists for the current buffers - we are
>> collecting error state after all.
>>
>> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
>
> Yes, I have tested this patch.
>
> I booted 3 times, and this patch fixes the DRM as well as softirq
> warnings and I am getting Xwindows with this patch.
>
> I am still doing more testing.
>
> Thanks,
> --
> Jaswinder Singh.
>> ---
>>  drivers/gpu/drm/i915/i915_irq.c |   64 ++++++++++++++++++++++++++++++++++----
>>  1 files changed, 57 insertions(+), 7 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
>> index 87113da..14301a4 100644
>> --- a/drivers/gpu/drm/i915/i915_irq.c
>> +++ b/drivers/gpu/drm/i915/i915_irq.c
>> @@ -441,9 +441,11 @@ static struct drm_i915_error_object *
>>  i915_error_object_create(struct drm_device *dev,
>>                         struct drm_gem_object *src)
>>  {
>> +       drm_i915_private_t *dev_priv = dev->dev_private;
>>        struct drm_i915_error_object *dst;
>>        struct drm_i915_gem_object *src_priv;
>>        int page, page_count;
>> +       u32 reloc_offset;
>>
>>        if (src == NULL)
>>                return NULL;
>> @@ -458,14 +460,23 @@ i915_error_object_create(struct drm_device *dev,
>>        if (dst == NULL)
>>                return NULL;
>>
>> +       reloc_offset = src_priv->gtt_offset;
>>        for (page = 0; page < page_count; page++) {
>> -               void *s, *d = kmalloc(PAGE_SIZE, GFP_ATOMIC);
>> +               void __iomem *s;
>> +               void *d;
>> +
>> +               d = kmalloc(PAGE_SIZE, GFP_ATOMIC);
>>                if (d == NULL)
>>                        goto unwind;
>> -               s = kmap_atomic(src_priv->pages[page], KM_USER0);
>> -               memcpy(d, s, PAGE_SIZE);
>> -               kunmap_atomic(s, KM_USER0);
>> +
>> +               s = io_mapping_map_atomic_wc(dev_priv->mm.gtt_mapping,
>> +                                            reloc_offset);
>> +               memcpy_fromio(d, s, PAGE_SIZE);
>> +               io_mapping_unmap_atomic(s);
>> +
>>                dst->pages[page] = d;
>> +
>> +               reloc_offset += PAGE_SIZE;
>>        }
>>        dst->page_count = page_count;
>>        dst->gtt_offset = src_priv->gtt_offset;
>> @@ -621,18 +632,57 @@ static void i915_capture_error_state(struct drm_device *dev)
>>
>>                if (batchbuffer[1] == NULL &&
>>                    error->acthd >= obj_priv->gtt_offset &&
>> -                   error->acthd < obj_priv->gtt_offset + obj->size &&
>> -                   batchbuffer[0] != obj)
>> +                   error->acthd < obj_priv->gtt_offset + obj->size)
>>                        batchbuffer[1] = obj;
>>
>>                count++;
>>        }
>> +       /* Scan the other lists for completeness for those bizarre errors. */
>> +       if (batchbuffer[0] == NULL || batchbuffer[1] == NULL) {
>> +               list_for_each_entry(obj_priv, &dev_priv->mm.flushing_list, list) {
>> +                       struct drm_gem_object *obj = obj_priv->obj;
>> +
>> +                       if (batchbuffer[0] == NULL &&
>> +                           bbaddr >= obj_priv->gtt_offset &&
>> +                           bbaddr < obj_priv->gtt_offset + obj->size)
>> +                               batchbuffer[0] = obj;
>> +
>> +                       if (batchbuffer[1] == NULL &&
>> +                           error->acthd >= obj_priv->gtt_offset &&
>> +                           error->acthd < obj_priv->gtt_offset + obj->size)
>> +                               batchbuffer[1] = obj;
>> +
>> +                       if (batchbuffer[0] && batchbuffer[1])
>> +                               break;
>> +               }
>> +       }
>> +       if (batchbuffer[0] == NULL || batchbuffer[1] == NULL) {
>> +               list_for_each_entry(obj_priv, &dev_priv->mm.inactive_list, list) {
>> +                       struct drm_gem_object *obj = obj_priv->obj;
>> +
>> +                       if (batchbuffer[0] == NULL &&
>> +                           bbaddr >= obj_priv->gtt_offset &&
>> +                           bbaddr < obj_priv->gtt_offset + obj->size)
>> +                               batchbuffer[0] = obj;
>> +
>> +                       if (batchbuffer[1] == NULL &&
>> +                           error->acthd >= obj_priv->gtt_offset &&
>> +                           error->acthd < obj_priv->gtt_offset + obj->size)
>> +                               batchbuffer[1] = obj;
>> +
>> +                       if (batchbuffer[0] && batchbuffer[1])
>> +                               break;
>> +               }
>> +       }
>>
>>        /* We need to copy these to an anonymous buffer as the simplest
>>         * method to avoid being overwritten by userpace.
>>         */
>>        error->batchbuffer[0] = i915_error_object_create(dev, batchbuffer[0]);
>> -       error->batchbuffer[1] = i915_error_object_create(dev, batchbuffer[1]);
>> +       if (batchbuffer[1] != batchbuffer[0])
>> +               error->batchbuffer[1] = i915_error_object_create(dev, batchbuffer[1]);
>> +       else
>> +               error->batchbuffer[1] = NULL;
>>
>>        /* Record the ringbuffer */
>>        error->ringbuffer = i915_error_object_create(dev, dev_priv->ring.ring_obj);
>> --
>> 1.7.1
>>
>>
>

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [PATCH] drm/i915: Record error batch buffers using iomem
  2010-05-11 19:22     ` Jaswinder Singh Rajput
  (?)
@ 2010-05-11 19:38     ` Jaswinder Singh Rajput
  -1 siblings, 0 replies; 24+ messages in thread
From: Jaswinder Singh Rajput @ 2010-05-11 19:38 UTC (permalink / raw)
  To: Chris Wilson; +Cc: Andrew Morton, linux-kernel, dri-devel

Hello Chris and Andrew,

I did further testing and noticed that this patch fixes the boot
errors and warnings and I get the XWindows.

But XWindows freezes after some time.

Thanks,
--
Jaswinder Singh.

On Wed, May 12, 2010 at 12:52 AM, Jaswinder Singh Rajput
<jaswinderlinux@gmail.com> wrote:
> Hello Chris and Andrew,
>
> On Tue, May 11, 2010 at 11:52 PM, Chris Wilson <chris@chris-wilson.co.uk> wrote:
>> Directly read the GTT mapping for the contents of the batch buffers
>> rather than relying on possibly stale CPU caches. Also for completeness
>> scan the flushing/inactive lists for the current buffers - we are
>> collecting error state after all.
>>
>> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
>
> Yes, I have tested this patch.
>
> I booted 3 times, and this patch fixes the DRM as well as softirq
> warnings and I am getting Xwindows with this patch.
>
> I am still doing more testing.
>
> Thanks,
> --
> Jaswinder Singh.
>> ---
>>  drivers/gpu/drm/i915/i915_irq.c |   64 ++++++++++++++++++++++++++++++++++----
>>  1 files changed, 57 insertions(+), 7 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
>> index 87113da..14301a4 100644
>> --- a/drivers/gpu/drm/i915/i915_irq.c
>> +++ b/drivers/gpu/drm/i915/i915_irq.c
>> @@ -441,9 +441,11 @@ static struct drm_i915_error_object *
>>  i915_error_object_create(struct drm_device *dev,
>>                         struct drm_gem_object *src)
>>  {
>> +       drm_i915_private_t *dev_priv = dev->dev_private;
>>        struct drm_i915_error_object *dst;
>>        struct drm_i915_gem_object *src_priv;
>>        int page, page_count;
>> +       u32 reloc_offset;
>>
>>        if (src == NULL)
>>                return NULL;
>> @@ -458,14 +460,23 @@ i915_error_object_create(struct drm_device *dev,
>>        if (dst == NULL)
>>                return NULL;
>>
>> +       reloc_offset = src_priv->gtt_offset;
>>        for (page = 0; page < page_count; page++) {
>> -               void *s, *d = kmalloc(PAGE_SIZE, GFP_ATOMIC);
>> +               void __iomem *s;
>> +               void *d;
>> +
>> +               d = kmalloc(PAGE_SIZE, GFP_ATOMIC);
>>                if (d == NULL)
>>                        goto unwind;
>> -               s = kmap_atomic(src_priv->pages[page], KM_USER0);
>> -               memcpy(d, s, PAGE_SIZE);
>> -               kunmap_atomic(s, KM_USER0);
>> +
>> +               s = io_mapping_map_atomic_wc(dev_priv->mm.gtt_mapping,
>> +                                            reloc_offset);
>> +               memcpy_fromio(d, s, PAGE_SIZE);
>> +               io_mapping_unmap_atomic(s);
>> +
>>                dst->pages[page] = d;
>> +
>> +               reloc_offset += PAGE_SIZE;
>>        }
>>        dst->page_count = page_count;
>>        dst->gtt_offset = src_priv->gtt_offset;
>> @@ -621,18 +632,57 @@ static void i915_capture_error_state(struct drm_device *dev)
>>
>>                if (batchbuffer[1] == NULL &&
>>                    error->acthd >= obj_priv->gtt_offset &&
>> -                   error->acthd < obj_priv->gtt_offset + obj->size &&
>> -                   batchbuffer[0] != obj)
>> +                   error->acthd < obj_priv->gtt_offset + obj->size)
>>                        batchbuffer[1] = obj;
>>
>>                count++;
>>        }
>> +       /* Scan the other lists for completeness for those bizarre errors. */
>> +       if (batchbuffer[0] == NULL || batchbuffer[1] == NULL) {
>> +               list_for_each_entry(obj_priv, &dev_priv->mm.flushing_list, list) {
>> +                       struct drm_gem_object *obj = obj_priv->obj;
>> +
>> +                       if (batchbuffer[0] == NULL &&
>> +                           bbaddr >= obj_priv->gtt_offset &&
>> +                           bbaddr < obj_priv->gtt_offset + obj->size)
>> +                               batchbuffer[0] = obj;
>> +
>> +                       if (batchbuffer[1] == NULL &&
>> +                           error->acthd >= obj_priv->gtt_offset &&
>> +                           error->acthd < obj_priv->gtt_offset + obj->size)
>> +                               batchbuffer[1] = obj;
>> +
>> +                       if (batchbuffer[0] && batchbuffer[1])
>> +                               break;
>> +               }
>> +       }
>> +       if (batchbuffer[0] == NULL || batchbuffer[1] == NULL) {
>> +               list_for_each_entry(obj_priv, &dev_priv->mm.inactive_list, list) {
>> +                       struct drm_gem_object *obj = obj_priv->obj;
>> +
>> +                       if (batchbuffer[0] == NULL &&
>> +                           bbaddr >= obj_priv->gtt_offset &&
>> +                           bbaddr < obj_priv->gtt_offset + obj->size)
>> +                               batchbuffer[0] = obj;
>> +
>> +                       if (batchbuffer[1] == NULL &&
>> +                           error->acthd >= obj_priv->gtt_offset &&
>> +                           error->acthd < obj_priv->gtt_offset + obj->size)
>> +                               batchbuffer[1] = obj;
>> +
>> +                       if (batchbuffer[0] && batchbuffer[1])
>> +                               break;
>> +               }
>> +       }
>>
>>        /* We need to copy these to an anonymous buffer as the simplest
>>         * method to avoid being overwritten by userpace.
>>         */
>>        error->batchbuffer[0] = i915_error_object_create(dev, batchbuffer[0]);
>> -       error->batchbuffer[1] = i915_error_object_create(dev, batchbuffer[1]);
>> +       if (batchbuffer[1] != batchbuffer[0])
>> +               error->batchbuffer[1] = i915_error_object_create(dev, batchbuffer[1]);
>> +       else
>> +               error->batchbuffer[1] = NULL;
>>
>>        /* Record the ringbuffer */
>>        error->ringbuffer = i915_error_object_create(dev, dev_priv->ring.ring_obj);
>> --
>> 1.7.1
>>
>>
>

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [PATCH] drm/i915: Record error batch buffers using iomem
  2010-05-11 19:38     ` Jaswinder Singh Rajput
@ 2010-05-11 19:53         ` Chris Wilson
  0 siblings, 0 replies; 24+ messages in thread
From: Chris Wilson @ 2010-05-11 19:53 UTC (permalink / raw)
  To: Jaswinder Singh Rajput
  Cc: Andrew Morton, dri-devel, Dave Airlie, linux-kernel

On Wed, 12 May 2010 01:08:23 +0530, Jaswinder Singh Rajput <jaswinderlinux@gmail.com> wrote:
> Hello Chris and Andrew,
> 
> I did further testing and noticed that this patch fixes the boot
> errors and warnings and I get the XWindows.
> 
> But XWindows freezes after some time.

The BUG you were hitting before is on the error collection path which
presumably is still being triggered during boot by a GPU error.
Can you check to see if /sys/kernel/debug/dri/0/i915_error_state has
recorded anything? And if not, wait until it freezes and then please file
a bug report at bugs.freedesktop.org with the i915_error_state, Xorg.0.log
and dmesg.

-- 
Chris Wilson, Intel Open Source Technology Centre

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [PATCH] drm/i915: Record error batch buffers using iomem
@ 2010-05-11 19:53         ` Chris Wilson
  0 siblings, 0 replies; 24+ messages in thread
From: Chris Wilson @ 2010-05-11 19:53 UTC (permalink / raw)
  To: Jaswinder Singh Rajput; +Cc: Andrew Morton, linux-kernel, dri-devel

On Wed, 12 May 2010 01:08:23 +0530, Jaswinder Singh Rajput <jaswinderlinux@gmail.com> wrote:
> Hello Chris and Andrew,
> 
> I did further testing and noticed that this patch fixes the boot
> errors and warnings and I get the XWindows.
> 
> But XWindows freezes after some time.

The BUG you were hitting before is on the error collection path which
presumably is still being triggered during boot by a GPU error.
Can you check to see if /sys/kernel/debug/dri/0/i915_error_state has
recorded anything? And if not, wait until it freezes and then please file
a bug report at bugs.freedesktop.org with the i915_error_state, Xorg.0.log
and dmesg.

-- 
Chris Wilson, Intel Open Source Technology Centre

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [PATCH] drm/i915: Record error batch buffers using iomem
  2010-05-11 19:53         ` Chris Wilson
  (?)
  (?)
@ 2010-05-11 20:05         ` Jaswinder Singh Rajput
  2010-05-11 21:45           ` Jaswinder Singh Rajput
  2010-05-11 21:45           ` Jaswinder Singh Rajput
  -1 siblings, 2 replies; 24+ messages in thread
From: Jaswinder Singh Rajput @ 2010-05-11 20:05 UTC (permalink / raw)
  To: Chris Wilson; +Cc: Andrew Morton, dri-devel, Dave Airlie, linux-kernel

Hello Chris,

On Wed, May 12, 2010 at 1:23 AM, Chris Wilson <chris@chris-wilson.co.uk> wrote:
> On Wed, 12 May 2010 01:08:23 +0530, Jaswinder Singh Rajput <jaswinderlinux@gmail.com> wrote:
>> Hello Chris and Andrew,
>>
>> I did further testing and noticed that this patch fixes the boot
>> errors and warnings and I get the XWindows.
>>
>> But XWindows freezes after some time.
>
> The BUG you were hitting before is on the error collection path which
> presumably is still being triggered during boot by a GPU error.

No, I am not getting any bug with your patch.

dmesg with your patch :
http://userweb.kernel.org/~jaswinder/acer_netbook/dmesg_2634-rc7-chris.txt

> Can you check to see if /sys/kernel/debug/dri/0/i915_error_state has
> recorded anything?

No.

> And if not, wait until it freezes and then please file
> a bug report at bugs.freedesktop.org with the i915_error_state, Xorg.0.log
> and dmesg.
>

Ok.

Thanks,
--
Jaswinder Singh.

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [PATCH] drm/i915: Record error batch buffers using iomem
  2010-05-11 19:53         ` Chris Wilson
  (?)
@ 2010-05-11 20:05         ` Jaswinder Singh Rajput
  -1 siblings, 0 replies; 24+ messages in thread
From: Jaswinder Singh Rajput @ 2010-05-11 20:05 UTC (permalink / raw)
  To: Chris Wilson; +Cc: Andrew Morton, linux-kernel, dri-devel

Hello Chris,

On Wed, May 12, 2010 at 1:23 AM, Chris Wilson <chris@chris-wilson.co.uk> wrote:
> On Wed, 12 May 2010 01:08:23 +0530, Jaswinder Singh Rajput <jaswinderlinux@gmail.com> wrote:
>> Hello Chris and Andrew,
>>
>> I did further testing and noticed that this patch fixes the boot
>> errors and warnings and I get the XWindows.
>>
>> But XWindows freezes after some time.
>
> The BUG you were hitting before is on the error collection path which
> presumably is still being triggered during boot by a GPU error.

No, I am not getting any bug with your patch.

dmesg with your patch :
http://userweb.kernel.org/~jaswinder/acer_netbook/dmesg_2634-rc7-chris.txt

> Can you check to see if /sys/kernel/debug/dri/0/i915_error_state has
> recorded anything?

No.

> And if not, wait until it freezes and then please file
> a bug report at bugs.freedesktop.org with the i915_error_state, Xorg.0.log
> and dmesg.
>

Ok.

Thanks,
--
Jaswinder Singh.

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [PATCH] drm/i915: Record error batch buffers using iomem
  2010-05-11 20:05         ` Jaswinder Singh Rajput
@ 2010-05-11 21:45           ` Jaswinder Singh Rajput
  2010-05-11 21:45           ` Jaswinder Singh Rajput
  1 sibling, 0 replies; 24+ messages in thread
From: Jaswinder Singh Rajput @ 2010-05-11 21:45 UTC (permalink / raw)
  To: Chris Wilson; +Cc: Andrew Morton, dri-devel, Dave Airlie, linux-kernel

Hello Chris,

On Wed, May 12, 2010 at 1:35 AM, Jaswinder Singh Rajput
<jaswinderlinux@gmail.com> wrote:
> Hello Chris,
>
> On Wed, May 12, 2010 at 1:23 AM, Chris Wilson <chris@chris-wilson.co.uk> wrote:
>> On Wed, 12 May 2010 01:08:23 +0530, Jaswinder Singh Rajput <jaswinderlinux@gmail.com> wrote:
>>> Hello Chris and Andrew,
>>>
>>> I did further testing and noticed that this patch fixes the boot
>>> errors and warnings and I get the XWindows.
>>>
>>> But XWindows freezes after some time.
>>
>> The BUG you were hitting before is on the error collection path which
>> presumably is still being triggered during boot by a GPU error.
>
> No, I am not getting any bug with your patch.
>
> dmesg with your patch :
> http://userweb.kernel.org/~jaswinder/acer_netbook/dmesg_2634-rc7-chris.txt
>

I did more testing. And test pass 80% of time. I get the bugs with cold boot :

[   40.090295] [drm:i915_hangcheck_elapsed] *ERROR* Hangcheck timer
elapsed... GPU hung
[   40.090318] ------------[ cut here ]------------
[   40.090338] WARNING: at mm/highmem.c:453 debug_kmap_atomic+0xa9/0x11e()
[   40.090345] Hardware name: Aspire one
[   40.090351] Modules linked in: nf_conntrack_ftp ath9k ath9k_common
battery ath9k_hw [last unloaded: scsi_wait_scan]
[   40.090378] Pid: 0, comm: swapper Not tainted 2.6.34-rc7-netbook #8
[   40.090385] Call Trace:
[   40.090402]  [<c1030ecb>] warn_slowpath_common+0x65/0x7c
[   40.090415]  [<c108ce5d>] ? debug_kmap_atomic+0xa9/0x11e
[   40.090428]  [<c1030eef>] warn_slowpath_null+0xd/0x10
[   40.090440]  [<c108ce5d>] debug_kmap_atomic+0xa9/0x11e
[   40.090454]  [<c1020611>] kmap_atomic_prot_pfn+0x1d/0x5e
[   40.090465]  [<c1020675>] iomap_atomic_prot_pfn+0x23/0x26
[   40.090479]  [<c11f7d8a>] i915_error_object_create+0x110/0x17c
[   40.090492]  [<c11f8298>] i915_handle_error+0x4a2/0x9ba
[   40.090506]  [<c11f884f>] i915_hangcheck_elapsed+0x9f/0xdf
[   40.090518]  [<c103ab6e>] run_timer_softirq+0x1c9/0x269
[   40.090531]  [<c11f87b0>] ? i915_hangcheck_elapsed+0x0/0xdf
[   40.090543]  [<c1035b7b>] __do_softirq+0xc6/0x186
[   40.090553]  [<c1035c61>] do_softirq+0x26/0x2b
[   40.090564]  [<c1035dd2>] irq_exit+0x29/0x66
[   40.090576]  [<c101681f>] smp_apic_timer_interrupt+0x6e/0x7c
[   40.090591]  [<c141f996>] apic_timer_interrupt+0x2a/0x30
[   40.090605]  [<c104007b>] ? ftrace_raw_event_signal_generate+0x6d/0xd4
[   40.090618]  [<c11bed9d>] ? acpi_idle_enter_simple+0x13b/0x168
[   40.090633]  [<c12dd435>] cpuidle_idle_call+0x6b/0xda
[   40.090645]  [<c1001a3c>] cpu_idle+0x44/0x74
[   40.090657]  [<c141a1b1>] start_secondary+0x1b2/0x1b7
[   40.090666] ---[ end trace 5e47c395a6f397dc ]---
[   40.090862] ------------[ cut here ]------------

dmesg with this patch with cold boot :
http://userweb.kernel.org/~jaswinder/acer_netbook/dmesg_2634-rc7-chris-cold.txt

Thanks,
--
Jaswinder Singh.

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [PATCH] drm/i915: Record error batch buffers using iomem
  2010-05-11 20:05         ` Jaswinder Singh Rajput
  2010-05-11 21:45           ` Jaswinder Singh Rajput
@ 2010-05-11 21:45           ` Jaswinder Singh Rajput
  1 sibling, 0 replies; 24+ messages in thread
From: Jaswinder Singh Rajput @ 2010-05-11 21:45 UTC (permalink / raw)
  To: Chris Wilson; +Cc: Andrew Morton, linux-kernel, dri-devel

Hello Chris,

On Wed, May 12, 2010 at 1:35 AM, Jaswinder Singh Rajput
<jaswinderlinux@gmail.com> wrote:
> Hello Chris,
>
> On Wed, May 12, 2010 at 1:23 AM, Chris Wilson <chris@chris-wilson.co.uk> wrote:
>> On Wed, 12 May 2010 01:08:23 +0530, Jaswinder Singh Rajput <jaswinderlinux@gmail.com> wrote:
>>> Hello Chris and Andrew,
>>>
>>> I did further testing and noticed that this patch fixes the boot
>>> errors and warnings and I get the XWindows.
>>>
>>> But XWindows freezes after some time.
>>
>> The BUG you were hitting before is on the error collection path which
>> presumably is still being triggered during boot by a GPU error.
>
> No, I am not getting any bug with your patch.
>
> dmesg with your patch :
> http://userweb.kernel.org/~jaswinder/acer_netbook/dmesg_2634-rc7-chris.txt
>

I did more testing. And test pass 80% of time. I get the bugs with cold boot :

[   40.090295] [drm:i915_hangcheck_elapsed] *ERROR* Hangcheck timer
elapsed... GPU hung
[   40.090318] ------------[ cut here ]------------
[   40.090338] WARNING: at mm/highmem.c:453 debug_kmap_atomic+0xa9/0x11e()
[   40.090345] Hardware name: Aspire one
[   40.090351] Modules linked in: nf_conntrack_ftp ath9k ath9k_common
battery ath9k_hw [last unloaded: scsi_wait_scan]
[   40.090378] Pid: 0, comm: swapper Not tainted 2.6.34-rc7-netbook #8
[   40.090385] Call Trace:
[   40.090402]  [<c1030ecb>] warn_slowpath_common+0x65/0x7c
[   40.090415]  [<c108ce5d>] ? debug_kmap_atomic+0xa9/0x11e
[   40.090428]  [<c1030eef>] warn_slowpath_null+0xd/0x10
[   40.090440]  [<c108ce5d>] debug_kmap_atomic+0xa9/0x11e
[   40.090454]  [<c1020611>] kmap_atomic_prot_pfn+0x1d/0x5e
[   40.090465]  [<c1020675>] iomap_atomic_prot_pfn+0x23/0x26
[   40.090479]  [<c11f7d8a>] i915_error_object_create+0x110/0x17c
[   40.090492]  [<c11f8298>] i915_handle_error+0x4a2/0x9ba
[   40.090506]  [<c11f884f>] i915_hangcheck_elapsed+0x9f/0xdf
[   40.090518]  [<c103ab6e>] run_timer_softirq+0x1c9/0x269
[   40.090531]  [<c11f87b0>] ? i915_hangcheck_elapsed+0x0/0xdf
[   40.090543]  [<c1035b7b>] __do_softirq+0xc6/0x186
[   40.090553]  [<c1035c61>] do_softirq+0x26/0x2b
[   40.090564]  [<c1035dd2>] irq_exit+0x29/0x66
[   40.090576]  [<c101681f>] smp_apic_timer_interrupt+0x6e/0x7c
[   40.090591]  [<c141f996>] apic_timer_interrupt+0x2a/0x30
[   40.090605]  [<c104007b>] ? ftrace_raw_event_signal_generate+0x6d/0xd4
[   40.090618]  [<c11bed9d>] ? acpi_idle_enter_simple+0x13b/0x168
[   40.090633]  [<c12dd435>] cpuidle_idle_call+0x6b/0xda
[   40.090645]  [<c1001a3c>] cpu_idle+0x44/0x74
[   40.090657]  [<c141a1b1>] start_secondary+0x1b2/0x1b7
[   40.090666] ---[ end trace 5e47c395a6f397dc ]---
[   40.090862] ------------[ cut here ]------------

dmesg with this patch with cold boot :
http://userweb.kernel.org/~jaswinder/acer_netbook/dmesg_2634-rc7-chris-cold.txt

Thanks,
--
Jaswinder Singh.

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [PATCH] drm/i915: Record error batch buffers using iomem
  2010-05-11 19:53         ` Chris Wilson
@ 2010-05-12 13:15           ` Jaswinder Singh Rajput
  -1 siblings, 0 replies; 24+ messages in thread
From: Jaswinder Singh Rajput @ 2010-05-12 13:15 UTC (permalink / raw)
  To: Chris Wilson; +Cc: Andrew Morton, dri-devel, Dave Airlie, linux-kernel

Hello Chris,

On Wed, May 12, 2010 at 1:23 AM, Chris Wilson <chris@chris-wilson.co.uk> wrote:
> On Wed, 12 May 2010 01:08:23 +0530, Jaswinder Singh Rajput <jaswinderlinux@gmail.com> wrote:
>> Hello Chris and Andrew,
>>
>> I did further testing and noticed that this patch fixes the boot
>> errors and warnings and I get the XWindows.
>>
>> But XWindows freezes after some time.
>
> The BUG you were hitting before is on the error collection path which
> presumably is still being triggered during boot by a GPU error.
> Can you check to see if /sys/kernel/debug/dri/0/i915_error_state has
> recorded anything? And if not, wait until it freezes and then please file
> a bug report at bugs.freedesktop.org with the i915_error_state, Xorg.0.log
> and dmesg.
>

With this patch after XWindows freezes, I get :

[   70.433064] wlan0: no IPv6 routers present
[  227.490064] [drm:i915_hangcheck_elapsed] *ERROR* Hangcheck timer
elapsed... GPU hung
[  227.490098] ------------[ cut here ]------------
[  227.490124] WARNING: at mm/highmem.c:453 debug_kmap_atomic+0xa9/0x11e()
[  227.490135] Hardware name: Aspire one
[  227.490143] Modules linked in: nf_conntrack_ftp ath9k ath9k_common
ath9k_hw battery [last unloaded: scsi_wait_scan]
[  227.490183] Pid: 0, comm: swapper Not tainted 2.6.34-rc7-netbook #8
[  227.490193] Call Trace:
[  227.490214]  [<c1030ecb>] warn_slowpath_common+0x65/0x7c

freeze dmesg : http://userweb.kernel.org/~jaswinder/acer_netbook/dmesg_2634_chris_hang.txt

freeze Xorg.log : http://userweb.kernel.org/~jaswinder/acer_netbook/Xorg_log.txt

So it means this patches shifted the BUG and warning messages after
some time. So I can only work on XWindows for few minutes with this
patch.
Andrew patch is in linus git tree. Can you please update your patch
above Andrew patch. So that I can do further testing.

Thanks,
--
Jaswinder Singh.

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [PATCH] drm/i915: Record error batch buffers using iomem
@ 2010-05-12 13:15           ` Jaswinder Singh Rajput
  0 siblings, 0 replies; 24+ messages in thread
From: Jaswinder Singh Rajput @ 2010-05-12 13:15 UTC (permalink / raw)
  To: Chris Wilson; +Cc: Andrew Morton, linux-kernel, dri-devel

Hello Chris,

On Wed, May 12, 2010 at 1:23 AM, Chris Wilson <chris@chris-wilson.co.uk> wrote:
> On Wed, 12 May 2010 01:08:23 +0530, Jaswinder Singh Rajput <jaswinderlinux@gmail.com> wrote:
>> Hello Chris and Andrew,
>>
>> I did further testing and noticed that this patch fixes the boot
>> errors and warnings and I get the XWindows.
>>
>> But XWindows freezes after some time.
>
> The BUG you were hitting before is on the error collection path which
> presumably is still being triggered during boot by a GPU error.
> Can you check to see if /sys/kernel/debug/dri/0/i915_error_state has
> recorded anything? And if not, wait until it freezes and then please file
> a bug report at bugs.freedesktop.org with the i915_error_state, Xorg.0.log
> and dmesg.
>

With this patch after XWindows freezes, I get :

[   70.433064] wlan0: no IPv6 routers present
[  227.490064] [drm:i915_hangcheck_elapsed] *ERROR* Hangcheck timer
elapsed... GPU hung
[  227.490098] ------------[ cut here ]------------
[  227.490124] WARNING: at mm/highmem.c:453 debug_kmap_atomic+0xa9/0x11e()
[  227.490135] Hardware name: Aspire one
[  227.490143] Modules linked in: nf_conntrack_ftp ath9k ath9k_common
ath9k_hw battery [last unloaded: scsi_wait_scan]
[  227.490183] Pid: 0, comm: swapper Not tainted 2.6.34-rc7-netbook #8
[  227.490193] Call Trace:
[  227.490214]  [<c1030ecb>] warn_slowpath_common+0x65/0x7c

freeze dmesg : http://userweb.kernel.org/~jaswinder/acer_netbook/dmesg_2634_chris_hang.txt

freeze Xorg.log : http://userweb.kernel.org/~jaswinder/acer_netbook/Xorg_log.txt

So it means this patches shifted the BUG and warning messages after
some time. So I can only work on XWindows for few minutes with this
patch.
Andrew patch is in linus git tree. Can you please update your patch
above Andrew patch. So that I can do further testing.

Thanks,
--
Jaswinder Singh.

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [PATCH] drm/i915: Record error batch buffers using iomem
  2010-05-12 13:15           ` Jaswinder Singh Rajput
@ 2010-05-12 13:50             ` Chris Wilson
  -1 siblings, 0 replies; 24+ messages in thread
From: Chris Wilson @ 2010-05-12 13:50 UTC (permalink / raw)
  To: Jaswinder Singh Rajput
  Cc: Andrew Morton, dri-devel, Dave Airlie, linux-kernel

On Wed, 12 May 2010 18:45:55 +0530, Jaswinder Singh Rajput <jaswinderlinux@gmail.com> wrote:
> Hello Chris,
> 
> With this patch after XWindows freezes, I get :
[snip]
> freeze dmesg : http://userweb.kernel.org/~jaswinder/acer_netbook/dmesg_2634_chris_hang.txt
> 
> freeze Xorg.log : http://userweb.kernel.org/~jaswinder/acer_netbook/Xorg_log.txt

Jaswinder can you also upload the /sys/kernel/debug/dri/0/i915_error_state
following a freeze as well, please. If your /sys/kernel/debug is empty,
you will need to "mount -tdebugfs debug /sys/kernel/debug".

> So it means this patches shifted the BUG and warning messages after
> some time. So I can only work on XWindows for few minutes with this
> patch.
> Andrew patch is in linus git tree. Can you please update your patch
> above Andrew patch. So that I can do further testing.

What is in the tree is adequate for the time being. It will capture the
batch buffer into the error state. My follow-on patch only increases the
level of paranoia. Thanks for testing.

-- 
Chris Wilson, Intel Open Source Technology Centre

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [PATCH] drm/i915: Record error batch buffers using iomem
@ 2010-05-12 13:50             ` Chris Wilson
  0 siblings, 0 replies; 24+ messages in thread
From: Chris Wilson @ 2010-05-12 13:50 UTC (permalink / raw)
  To: Jaswinder Singh Rajput; +Cc: Andrew Morton, linux-kernel, dri-devel

On Wed, 12 May 2010 18:45:55 +0530, Jaswinder Singh Rajput <jaswinderlinux@gmail.com> wrote:
> Hello Chris,
> 
> With this patch after XWindows freezes, I get :
[snip]
> freeze dmesg : http://userweb.kernel.org/~jaswinder/acer_netbook/dmesg_2634_chris_hang.txt
> 
> freeze Xorg.log : http://userweb.kernel.org/~jaswinder/acer_netbook/Xorg_log.txt

Jaswinder can you also upload the /sys/kernel/debug/dri/0/i915_error_state
following a freeze as well, please. If your /sys/kernel/debug is empty,
you will need to "mount -tdebugfs debug /sys/kernel/debug".

> So it means this patches shifted the BUG and warning messages after
> some time. So I can only work on XWindows for few minutes with this
> patch.
> Andrew patch is in linus git tree. Can you please update your patch
> above Andrew patch. So that I can do further testing.

What is in the tree is adequate for the time being. It will capture the
batch buffer into the error state. My follow-on patch only increases the
level of paranoia. Thanks for testing.

-- 
Chris Wilson, Intel Open Source Technology Centre

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [PATCH] drm/i915: Record error batch buffers using iomem
  2010-05-12 13:50             ` Chris Wilson
  (?)
  (?)
@ 2010-05-12 14:31             ` Jaswinder Singh Rajput
  2010-05-13 21:01               ` Jaswinder Singh Rajput
  2010-05-13 21:01               ` Jaswinder Singh Rajput
  -1 siblings, 2 replies; 24+ messages in thread
From: Jaswinder Singh Rajput @ 2010-05-12 14:31 UTC (permalink / raw)
  To: Chris Wilson; +Cc: Andrew Morton, dri-devel, Dave Airlie, linux-kernel

Hello Chris,

On Wed, May 12, 2010 at 7:20 PM, Chris Wilson <chris@chris-wilson.co.uk> wrote:
> On Wed, 12 May 2010 18:45:55 +0530, Jaswinder Singh Rajput <jaswinderlinux@gmail.com> wrote:
>> Hello Chris,
>>
>> With this patch after XWindows freezes, I get :
> [snip]
>> freeze dmesg : http://userweb.kernel.org/~jaswinder/acer_netbook/dmesg_2634_chris_hang.txt
>>
>> freeze Xorg.log : http://userweb.kernel.org/~jaswinder/acer_netbook/Xorg_log.txt
>
> Jaswinder can you also upload the /sys/kernel/debug/dri/0/i915_error_state
> following a freeze as well, please. If your /sys/kernel/debug is empty,
> you will need to "mount -tdebugfs debug /sys/kernel/debug".
>

i915_error_state :
http://userweb.kernel.org/~jaswinder/acer_netbook/i915_error_state.txt

Thanks,
--
Jaswinder Singh.

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [PATCH] drm/i915: Record error batch buffers using iomem
  2010-05-12 13:50             ` Chris Wilson
  (?)
@ 2010-05-12 14:31             ` Jaswinder Singh Rajput
  -1 siblings, 0 replies; 24+ messages in thread
From: Jaswinder Singh Rajput @ 2010-05-12 14:31 UTC (permalink / raw)
  To: Chris Wilson; +Cc: Andrew Morton, linux-kernel, dri-devel

Hello Chris,

On Wed, May 12, 2010 at 7:20 PM, Chris Wilson <chris@chris-wilson.co.uk> wrote:
> On Wed, 12 May 2010 18:45:55 +0530, Jaswinder Singh Rajput <jaswinderlinux@gmail.com> wrote:
>> Hello Chris,
>>
>> With this patch after XWindows freezes, I get :
> [snip]
>> freeze dmesg : http://userweb.kernel.org/~jaswinder/acer_netbook/dmesg_2634_chris_hang.txt
>>
>> freeze Xorg.log : http://userweb.kernel.org/~jaswinder/acer_netbook/Xorg_log.txt
>
> Jaswinder can you also upload the /sys/kernel/debug/dri/0/i915_error_state
> following a freeze as well, please. If your /sys/kernel/debug is empty,
> you will need to "mount -tdebugfs debug /sys/kernel/debug".
>

i915_error_state :
http://userweb.kernel.org/~jaswinder/acer_netbook/i915_error_state.txt

Thanks,
--
Jaswinder Singh.

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [PATCH] drm/i915: Record error batch buffers using iomem
  2010-05-12 14:31             ` Jaswinder Singh Rajput
  2010-05-13 21:01               ` Jaswinder Singh Rajput
@ 2010-05-13 21:01               ` Jaswinder Singh Rajput
  1 sibling, 0 replies; 24+ messages in thread
From: Jaswinder Singh Rajput @ 2010-05-13 21:01 UTC (permalink / raw)
  To: Chris Wilson; +Cc: Andrew Morton, dri-devel, Dave Airlie, linux-kernel

Hello Chris,

On Wed, May 12, 2010 at 8:01 PM, Jaswinder Singh Rajput
<jaswinderlinux@gmail.com> wrote:
> Hello Chris,
>
> On Wed, May 12, 2010 at 7:20 PM, Chris Wilson <chris@chris-wilson.co.uk> wrote:
>> On Wed, 12 May 2010 18:45:55 +0530, Jaswinder Singh Rajput <jaswinderlinux@gmail.com> wrote:
>>> Hello Chris,
>>>
>>> With this patch after XWindows freezes, I get :
>> [snip]
>>> freeze dmesg : http://userweb.kernel.org/~jaswinder/acer_netbook/dmesg_2634_chris_hang.txt
>>>
>>> freeze Xorg.log : http://userweb.kernel.org/~jaswinder/acer_netbook/Xorg_log.txt
>>
>> Jaswinder can you also upload the /sys/kernel/debug/dri/0/i915_error_state
>> following a freeze as well, please. If your /sys/kernel/debug is empty,
>> you will need to "mount -tdebugfs debug /sys/kernel/debug".
>>
>
> i915_error_state :
> http://userweb.kernel.org/~jaswinder/acer_netbook/i915_error_state.txt
>

If you need more information, please let me know.

I am waiting for your feedback.

Thanks,
--
Jaswinder Singh.

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [PATCH] drm/i915: Record error batch buffers using iomem
  2010-05-12 14:31             ` Jaswinder Singh Rajput
@ 2010-05-13 21:01               ` Jaswinder Singh Rajput
  2010-05-13 21:01               ` Jaswinder Singh Rajput
  1 sibling, 0 replies; 24+ messages in thread
From: Jaswinder Singh Rajput @ 2010-05-13 21:01 UTC (permalink / raw)
  To: Chris Wilson; +Cc: Andrew Morton, linux-kernel, dri-devel

Hello Chris,

On Wed, May 12, 2010 at 8:01 PM, Jaswinder Singh Rajput
<jaswinderlinux@gmail.com> wrote:
> Hello Chris,
>
> On Wed, May 12, 2010 at 7:20 PM, Chris Wilson <chris@chris-wilson.co.uk> wrote:
>> On Wed, 12 May 2010 18:45:55 +0530, Jaswinder Singh Rajput <jaswinderlinux@gmail.com> wrote:
>>> Hello Chris,
>>>
>>> With this patch after XWindows freezes, I get :
>> [snip]
>>> freeze dmesg : http://userweb.kernel.org/~jaswinder/acer_netbook/dmesg_2634_chris_hang.txt
>>>
>>> freeze Xorg.log : http://userweb.kernel.org/~jaswinder/acer_netbook/Xorg_log.txt
>>
>> Jaswinder can you also upload the /sys/kernel/debug/dri/0/i915_error_state
>> following a freeze as well, please. If your /sys/kernel/debug is empty,
>> you will need to "mount -tdebugfs debug /sys/kernel/debug".
>>
>
> i915_error_state :
> http://userweb.kernel.org/~jaswinder/acer_netbook/i915_error_state.txt
>

If you need more information, please let me know.

I am waiting for your feedback.

Thanks,
--
Jaswinder Singh.

^ permalink raw reply	[flat|nested] 24+ messages in thread

end of thread, other threads:[~2010-05-13 21:01 UTC | newest]

Thread overview: 24+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <0100511104818.8382a7de.akpm@linux-foundation.org>
2010-05-11 18:22 ` [PATCH] drm/i915: Record error batch buffers using iomem Chris Wilson
2010-05-11 18:22   ` Chris Wilson
2010-05-11 15:37   ` Andrew Morton
2010-05-11 15:37   ` Andrew Morton
2010-05-11 18:49     ` Chris Wilson
2010-05-11 18:49     ` Chris Wilson
2010-05-11 19:22   ` Jaswinder Singh Rajput
2010-05-11 19:22     ` Jaswinder Singh Rajput
2010-05-11 19:38     ` Jaswinder Singh Rajput
2010-05-11 19:38     ` Jaswinder Singh Rajput
2010-05-11 19:53       ` Chris Wilson
2010-05-11 19:53         ` Chris Wilson
2010-05-11 20:05         ` Jaswinder Singh Rajput
2010-05-11 20:05         ` Jaswinder Singh Rajput
2010-05-11 21:45           ` Jaswinder Singh Rajput
2010-05-11 21:45           ` Jaswinder Singh Rajput
2010-05-12 13:15         ` Jaswinder Singh Rajput
2010-05-12 13:15           ` Jaswinder Singh Rajput
2010-05-12 13:50           ` Chris Wilson
2010-05-12 13:50             ` Chris Wilson
2010-05-12 14:31             ` Jaswinder Singh Rajput
2010-05-12 14:31             ` Jaswinder Singh Rajput
2010-05-13 21:01               ` Jaswinder Singh Rajput
2010-05-13 21:01               ` Jaswinder Singh Rajput

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.