Commit 93544177 authored by Matthew Auld's avatar Matthew Auld
Browse files

drm/i915: remove writeback hook



Ditch the writeback hook and drop i915_gem_object_writeback(). We
already support the shrinker_release_pages hook which can just call
shmem_writeback directly.

Suggested-by: default avatarTvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
Signed-off-by: default avatarMatthew Auld <matthew.auld@intel.com>
Reviewed-by: default avatarTvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20211215110746.865-1-matthew.auld@intel.com
parent 57ded5fc
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -459,7 +459,6 @@ i915_gem_object_unpin_pages(struct drm_i915_gem_object *obj)

int __i915_gem_object_put_pages(struct drm_i915_gem_object *obj);
int i915_gem_object_truncate(struct drm_i915_gem_object *obj);
void i915_gem_object_writeback(struct drm_i915_gem_object *obj);

/**
 * i915_gem_object_pin_map - return a contiguous mapping of the entire object
+0 −1
Original line number Diff line number Diff line
@@ -57,7 +57,6 @@ struct drm_i915_gem_object_ops {
	void (*put_pages)(struct drm_i915_gem_object *obj,
			  struct sg_table *pages);
	int (*truncate)(struct drm_i915_gem_object *obj);
	void (*writeback)(struct drm_i915_gem_object *obj);
	int (*shrinker_release_pages)(struct drm_i915_gem_object *obj,
				      bool no_gpu_wait,
				      bool should_writeback);
+0 −10
Original line number Diff line number Diff line
@@ -168,16 +168,6 @@ int i915_gem_object_truncate(struct drm_i915_gem_object *obj)
	return 0;
}

/* Try to discard unwanted pages */
void i915_gem_object_writeback(struct drm_i915_gem_object *obj)
{
	assert_object_held_shared(obj);
	GEM_BUG_ON(i915_gem_object_has_pages(obj));

	if (obj->ops->writeback)
		obj->ops->writeback(obj);
}

static void __i915_gem_object_reset_page_iter(struct drm_i915_gem_object *obj)
{
	struct radix_tree_iter iter;
+18 −1
Original line number Diff line number Diff line
@@ -331,6 +331,23 @@ shmem_writeback(struct drm_i915_gem_object *obj)
	__shmem_writeback(obj->base.size, obj->base.filp->f_mapping);
}

static int shmem_shrinker_release_pages(struct drm_i915_gem_object *obj,
					bool no_gpu_wait,
					bool writeback)
{
	switch (obj->mm.madv) {
	case I915_MADV_DONTNEED:
		return i915_gem_object_truncate(obj);
	case __I915_MADV_PURGED:
		return 0;
	}

	if (writeback)
		shmem_writeback(obj);

	return 0;
}

void
__i915_gem_object_release_shmem(struct drm_i915_gem_object *obj,
				struct sg_table *pages,
@@ -503,7 +520,7 @@ const struct drm_i915_gem_object_ops i915_gem_shmem_ops = {
	.get_pages = shmem_get_pages,
	.put_pages = shmem_put_pages,
	.truncate = shmem_truncate,
	.writeback = shmem_writeback,
	.shrinker_release_pages = shmem_shrinker_release_pages,

	.pwrite = shmem_pwrite,
	.pread = shmem_pread,
+0 −12
Original line number Diff line number Diff line
@@ -61,18 +61,6 @@ static int try_to_writeback(struct drm_i915_gem_object *obj, unsigned int flags)
		return obj->ops->shrinker_release_pages(obj,
							!(flags & I915_SHRINK_ACTIVE),
							flags & I915_SHRINK_WRITEBACK);

	switch (obj->mm.madv) {
	case I915_MADV_DONTNEED:
		i915_gem_object_truncate(obj);
		return 0;
	case __I915_MADV_PURGED:
		return 0;
	}

	if (flags & I915_SHRINK_WRITEBACK)
		i915_gem_object_writeback(obj);

	return 0;
}