Don't wait for buffer idle before applying relocations.
authorThomas Hellstrom <thomas-at-tungstengraphics-dot-com>
Wed, 27 Feb 2008 18:46:28 +0000 (19:46 +0100)
committerThomas Hellstrom <thomas-at-tungstengraphics-dot-com>
Wed, 27 Feb 2008 18:46:28 +0000 (19:46 +0100)
shared-core/i915_dma.c

index b916441..2d26fcc 100644 (file)
@@ -860,6 +860,15 @@ int i915_apply_reloc(struct drm_file *file_priv, int num_buffers,
                drm_bo_kunmap(&relocatee->kmap);
                relocatee->data_page = NULL;
                relocatee->offset = new_cmd_offset;
+
+               /*
+                * Note on buffer idle:
+                * Since we're applying relocations, this part of the
+                * buffer is obviously not used by the GPU and we don't
+                * need to wait for buffer idle. This is an important
+                * consideration for user-space buffer pools.
+                */
+
                ret = drm_bo_kmap(relocatee->buf, new_cmd_offset >> PAGE_SHIFT,
                                  1, &relocatee->kmap);
                if (ret) {
@@ -1003,10 +1012,6 @@ static int i915_exec_reloc(struct drm_file *file_priv, drm_handle_t buf_handle,
        }
 
        mutex_lock (&relocatee.buf->mutex);
-       ret = drm_bo_wait (relocatee.buf, 0, 0, FALSE);
-       if (ret)
-               goto out_err1;
-
        while (reloc_user_ptr) {
                ret = i915_process_relocs(file_priv, buf_handle, &reloc_user_ptr, &relocatee, buffers, buf_count);
                if (ret) {