Evict cached_mapped relocatee before applying reloc.
authorThomas Hellstrom <thomas-at-tungstengraphics-dot-com>
Mon, 17 Mar 2008 10:37:10 +0000 (11:37 +0100)
committerThomas Hellstrom <thomas-at-tungstengraphics-dot-com>
Mon, 17 Mar 2008 10:38:46 +0000 (11:38 +0100)
Fix that got left out after the intel-post-reloc merge.

linux-core/i915_execbuf.c

index ff83d79..ae4a612 100644 (file)
@@ -138,6 +138,8 @@ int i915_apply_reloc(struct drm_file *file_priv, int num_buffers,
        new_cmd_offset = reloc[0];
        if (!relocatee->data_page ||
            !drm_bo_same_page(relocatee->offset, new_cmd_offset)) {
+               struct drm_bo_mem_reg *mem = &relocatee->buf->mem;
+
                drm_bo_kunmap(&relocatee->kmap);
                relocatee->data_page = NULL;
                relocatee->offset = new_cmd_offset;
@@ -149,6 +151,10 @@ int i915_apply_reloc(struct drm_file *file_priv, int num_buffers,
                        relocatee->idle = I915_RELOC_IDLE;
                }
 
+               if (unlikely((mem->mem_type != DRM_BO_MEM_LOCAL) &&
+                            (mem->flags & DRM_BO_FLAG_CACHED_MAPPED)))
+                       drm_bo_evict_cached(relocatee->buf);
+
                ret = drm_bo_kmap(relocatee->buf, new_cmd_offset >> PAGE_SHIFT,
                                  1, &relocatee->kmap);
                if (ret) {