[Intel-gfx] [PATCH 19/28] drm/i915: Support readback of stolen objects upon error
Chris Wilson
chris at chris-wilson.co.uk
Tue Apr 24 16:47:48 CEST 2012
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
---
drivers/gpu/drm/i915/i915_irq.c | 13 ++++++++++++-
1 file changed, 12 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
index 24e1dd2..033f9be 100644
--- a/drivers/gpu/drm/i915/i915_irq.c
+++ b/drivers/gpu/drm/i915/i915_irq.c
@@ -827,7 +827,10 @@ i915_error_object_create(struct drm_i915_private *dev_priv,
int page, page_count;
u32 reloc_offset;
- if (src == NULL || src->pages == NULL)
+ if (src == NULL)
+ return NULL;
+
+ if (src->pages == NULL && !src->stolen)
return NULL;
page_count = src->base.size / PAGE_SIZE;
@@ -859,6 +862,14 @@ i915_error_object_create(struct drm_i915_private *dev_priv,
reloc_offset);
memcpy_fromio(d, s, PAGE_SIZE);
io_mapping_unmap_atomic(s);
+ } else if (src->stolen) {
+ unsigned long offset;
+
+ offset = dev_priv->mm.stolen_base;
+ offset += src->stolen->start;
+ offset += page << PAGE_SHIFT;
+
+ memcpy_fromio(d, (void *)offset, PAGE_SIZE);
} else {
void *s;
--
1.7.10
More information about the Intel-gfx
mailing list