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

Commit c6748e09 authored by Chris Wilson's avatar Chris Wilson
Browse files

drm/i915: Remove inactive LRU tracking from set_domain_ioctl



As the userspace mappings are torn down on every GPU write, we prefer to
track when the buffer is activated (via a fresh i915_gem_fault). This
makes the LRU conceptually simpler. With coherent mappings, the
remaining use-case for set_domain_ioctl is GPU synchronisation.

Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
parent d9e86c0e
Loading
Loading
Loading
Loading
+0 −17
Original line number Original line Diff line number Diff line
@@ -1018,7 +1018,6 @@ int
i915_gem_set_domain_ioctl(struct drm_device *dev, void *data,
i915_gem_set_domain_ioctl(struct drm_device *dev, void *data,
			  struct drm_file *file)
			  struct drm_file *file)
{
{
	struct drm_i915_private *dev_priv = dev->dev_private;
	struct drm_i915_gem_set_domain *args = data;
	struct drm_i915_gem_set_domain *args = data;
	struct drm_i915_gem_object *obj;
	struct drm_i915_gem_object *obj;
	uint32_t read_domains = args->read_domains;
	uint32_t read_domains = args->read_domains;
@@ -1051,21 +1050,9 @@ i915_gem_set_domain_ioctl(struct drm_device *dev, void *data,
		goto unlock;
		goto unlock;
	}
	}


	intel_mark_busy(dev, obj);

	if (read_domains & I915_GEM_DOMAIN_GTT) {
	if (read_domains & I915_GEM_DOMAIN_GTT) {
		ret = i915_gem_object_set_to_gtt_domain(obj, write_domain != 0);
		ret = i915_gem_object_set_to_gtt_domain(obj, write_domain != 0);


		/* Update the LRU on the fence for the CPU access that's
		 * about to occur.
		 */
		if (obj->fence_reg != I915_FENCE_REG_NONE) {
			struct drm_i915_fence_reg *reg =
				&dev_priv->fence_regs[obj->fence_reg];
			list_move_tail(&reg->lru_list,
				       &dev_priv->mm.fence_list);
		}

		/* Silently promote "you're not bound, there was nothing to do"
		/* Silently promote "you're not bound, there was nothing to do"
		 * to success, since the client was just asking us to
		 * to success, since the client was just asking us to
		 * make sure everything was done.
		 * make sure everything was done.
@@ -1076,10 +1063,6 @@ i915_gem_set_domain_ioctl(struct drm_device *dev, void *data,
		ret = i915_gem_object_set_to_cpu_domain(obj, write_domain != 0);
		ret = i915_gem_object_set_to_cpu_domain(obj, write_domain != 0);
	}
	}


	/* Maintain LRU order of "inactive" objects */
	if (ret == 0 && i915_gem_object_is_inactive(obj))
		list_move_tail(&obj->mm_list, &dev_priv->mm.inactive_list);

	drm_gem_object_unreference(&obj->base);
	drm_gem_object_unreference(&obj->base);
unlock:
unlock:
	mutex_unlock(&dev->struct_mutex);
	mutex_unlock(&dev->struct_mutex);