Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b670d815 authored by Eric Anholt's avatar Eric Anholt Committed by Dave Airlie
Browse files

drm/i915: If interrupted while setting object domains, still emit the flush.



Otherwise, we would leave the objects in an inconsistent state, such as
write_domain == 0 but on the flushing list.

Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
parent ce44b0ea
Loading
Loading
Loading
Loading
+13 −1
Original line number Diff line number Diff line
@@ -1880,9 +1880,21 @@ i915_gem_execbuffer(struct drm_device *dev, void *data,
		ret = i915_gem_object_set_domain(obj,
						 obj->pending_read_domains,
						 obj->pending_write_domain);
		if (ret)
		if (ret) {
			/* As we've partially updated domains on our buffers,
			 * we have to emit the flush we've accumulated
			 * before exiting, or we'll have broken the
			 * active/flushing/inactive invariants.
			 *
			 * We'll potentially have some things marked as
			 * being in write domains that they actually aren't,
			 * but that should be merely a minor performance loss.
			 */
			flush_domains = i915_gem_dev_set_domain(dev);
			(void)i915_add_request(dev, flush_domains);
			goto err;
		}
	}

	i915_verify_inactive(dev, __FILE__, __LINE__);