|
@@ -1131,6 +1131,7 @@ i915_gem_execbuffer_move_to_gpu(struct drm_i915_gem_request *req,
|
|
|
|
|
|
list_for_each_entry(vma, vmas, exec_list) {
|
|
|
struct drm_i915_gem_object *obj = vma->obj;
|
|
|
+ struct reservation_object *resv;
|
|
|
|
|
|
if (obj->flags & other_rings) {
|
|
|
ret = i915_gem_request_await_object
|
|
@@ -1139,6 +1140,16 @@ i915_gem_execbuffer_move_to_gpu(struct drm_i915_gem_request *req,
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
+ resv = i915_gem_object_get_dmabuf_resv(obj);
|
|
|
+ if (resv) {
|
|
|
+ ret = i915_sw_fence_await_reservation
|
|
|
+ (&req->submit, resv, &i915_fence_ops,
|
|
|
+ obj->base.pending_write_domain, 10*HZ,
|
|
|
+ GFP_KERNEL | __GFP_NOWARN);
|
|
|
+ if (ret < 0)
|
|
|
+ return ret;
|
|
|
+ }
|
|
|
+
|
|
|
if (obj->base.write_domain & I915_GEM_DOMAIN_CPU)
|
|
|
i915_gem_clflush_object(obj, false);
|
|
|
}
|