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

Commit 36cf1742 authored by Chris Wilson's avatar Chris Wilson
Browse files

drm/i915/execbuffer: Correctly clear the current object list upon EFAULT



Before releasing the lock in order to copy the relocation list from user
pages, we need to drop all the object references as another thread may
usurp and execute another batchbuffer before we reacquire the lock.
However, the code was buggy and failed to clear the list...

Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Cc: stable@kernel.org
parent 08c18323
Loading
Loading
Loading
Loading
+1 −3
Original line number Diff line number Diff line
@@ -622,7 +622,7 @@ i915_gem_execbuffer_relocate_slow(struct drm_device *dev,
	int i, total, ret;

	/* We may process another execbuffer during the unlock... */
	while (list_empty(objects)) {
	while (!list_empty(objects)) {
		obj = list_first_entry(objects,
				       struct drm_i915_gem_object,
				       exec_list);
@@ -665,7 +665,6 @@ i915_gem_execbuffer_relocate_slow(struct drm_device *dev,
	}

	/* reacquire the objects */
	INIT_LIST_HEAD(objects);
	eb_reset(eb);
	for (i = 0; i < count; i++) {
		struct drm_i915_gem_object *obj;
@@ -1353,4 +1352,3 @@ i915_gem_execbuffer2(struct drm_device *dev, void *data,
	drm_free_large(exec2_list);
	return ret;
}