Commit 80f0b679 authored by Maarten Lankhorst's avatar Maarten Lankhorst Committed by Joonas Lahtinen
Browse files

drm/i915: Add an implementation for i915_gem_ww_ctx locking, v2.



i915_gem_ww_ctx is used to lock all gem bo's for pinning and memory
eviction. We don't use it yet, but lets start adding the definition
first.

To use it, we have to pass a non-NULL ww to gem_object_lock, and don't
unlock directly. It is done in i915_gem_ww_ctx_fini.

Changes since v1:
- Change ww_ctx and obj order in locking functions (Jonas Lahtinen)

Signed-off-by: default avatarMaarten Lankhorst <maarten.lankhorst@linux.intel.com>
Reviewed-by: default avatarThomas Hellström <thomas.hellstrom@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200819140904.1708856-6-maarten.lankhorst@linux.intel.com


Signed-off-by: default avatarJoonas Lahtinen <joonas.lahtinen@linux.intel.com>
parent 8ae275c2
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -2311,7 +2311,7 @@ intel_pin_and_fence_fb_obj(struct drm_framebuffer *fb,
void intel_unpin_fb_vma(struct i915_vma *vma, unsigned long flags)
{
	i915_gem_object_lock(vma->obj);
	i915_gem_object_lock(vma->obj, NULL);
	if (flags & PLANE_HAS_FENCE)
		i915_vma_unpin_fence(vma);
	i915_gem_object_unpin_from_display_plane(vma);
@@ -17194,7 +17194,7 @@ static int intel_framebuffer_init(struct intel_framebuffer *intel_fb,
	if (!intel_fb->frontbuffer)
		return -ENOMEM;
	i915_gem_object_lock(obj);
	i915_gem_object_lock(obj, NULL);
	tiling = i915_gem_object_get_tiling(obj);
	stride = i915_gem_object_get_stride(obj);
	i915_gem_object_unlock(obj);
+1 −1
Original line number Diff line number Diff line
@@ -288,7 +288,7 @@ int i915_gem_schedule_fill_pages_blt(struct drm_i915_gem_object *obj,
	dma_fence_init(&work->dma, &clear_pages_work_ops, &fence_lock, 0, 0);
	i915_sw_fence_init(&work->wait, clear_pages_work_notify);

	i915_gem_object_lock(obj);
	i915_gem_object_lock(obj, NULL);
	err = i915_sw_fence_await_reservation(&work->wait,
					      obj->base.resv, NULL, true, 0,
					      I915_FENCE_GFP);
+2 −2
Original line number Diff line number Diff line
@@ -128,7 +128,7 @@ static int i915_gem_begin_cpu_access(struct dma_buf *dma_buf, enum dma_data_dire
	if (err)
		return err;

	err = i915_gem_object_lock_interruptible(obj);
	err = i915_gem_object_lock_interruptible(obj, NULL);
	if (err)
		goto out;

@@ -149,7 +149,7 @@ static int i915_gem_end_cpu_access(struct dma_buf *dma_buf, enum dma_data_direct
	if (err)
		return err;

	err = i915_gem_object_lock_interruptible(obj);
	err = i915_gem_object_lock_interruptible(obj, NULL);
	if (err)
		goto out;

+5 −5
Original line number Diff line number Diff line
@@ -32,7 +32,7 @@ void i915_gem_object_flush_if_display(struct drm_i915_gem_object *obj)
	if (!i915_gem_object_is_framebuffer(obj))
		return;

	i915_gem_object_lock(obj);
	i915_gem_object_lock(obj, NULL);
	__i915_gem_object_flush_for_display(obj);
	i915_gem_object_unlock(obj);
}
@@ -197,7 +197,7 @@ int i915_gem_object_set_cache_level(struct drm_i915_gem_object *obj,
	if (ret)
		return ret;

	ret = i915_gem_object_lock_interruptible(obj);
	ret = i915_gem_object_lock_interruptible(obj, NULL);
	if (ret)
		return ret;

@@ -536,7 +536,7 @@ i915_gem_set_domain_ioctl(struct drm_device *dev, void *data,
	if (err)
		goto out;

	err = i915_gem_object_lock_interruptible(obj);
	err = i915_gem_object_lock_interruptible(obj, NULL);
	if (err)
		goto out_unpin;

@@ -576,7 +576,7 @@ int i915_gem_object_prepare_read(struct drm_i915_gem_object *obj,
	if (!i915_gem_object_has_struct_page(obj))
		return -ENODEV;

	ret = i915_gem_object_lock_interruptible(obj);
	ret = i915_gem_object_lock_interruptible(obj, NULL);
	if (ret)
		return ret;

@@ -630,7 +630,7 @@ int i915_gem_object_prepare_write(struct drm_i915_gem_object *obj,
	if (!i915_gem_object_has_struct_page(obj))
		return -ENODEV;

	ret = i915_gem_object_lock_interruptible(obj);
	ret = i915_gem_object_lock_interruptible(obj, NULL);
	if (ret)
		return ret;

+1 −1
Original line number Diff line number Diff line
@@ -1076,7 +1076,7 @@ static void *reloc_iomap(struct drm_i915_gem_object *obj,
		if (use_cpu_reloc(cache, obj))
			return NULL;

		i915_gem_object_lock(obj);
		i915_gem_object_lock(obj, NULL);
		err = i915_gem_object_set_to_gtt_domain(obj, true);
		i915_gem_object_unlock(obj);
		if (err)
Loading