All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
To: Matthew Auld <matthew.auld@intel.com>, intel-gfx@lists.freedesktop.org
Cc: dri-devel@lists.freedesktop.org
Subject: Re: [PATCH] drm/i915: remove writeback hook
Date: Wed, 15 Dec 2021 08:35:06 +0000	[thread overview]
Message-ID: <18951e7a-d0e3-eec7-29aa-5ba0d58e8e53@linux.intel.com> (raw)
In-Reply-To: <20211214180754.4113036-1-matthew.auld@intel.com>


On 14/12/2021 18:07, Matthew Auld wrote:
> 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.

Looks like a good cleanup to me.

Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>

A couple of bike shedding comments/question only below.

> Suggested-by: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
> Signed-off-by: Matthew Auld <matthew.auld@intel.com>
> ---
>   drivers/gpu/drm/i915/gem/i915_gem_object.h    |  1 -
>   .../gpu/drm/i915/gem/i915_gem_object_types.h  |  1 -
>   drivers/gpu/drm/i915/gem/i915_gem_pages.c     | 10 ----------
>   drivers/gpu/drm/i915/gem/i915_gem_shmem.c     | 19 ++++++++++++++++++-
>   drivers/gpu/drm/i915/gem/i915_gem_shrinker.c  | 12 ------------
>   5 files changed, 18 insertions(+), 25 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object.h b/drivers/gpu/drm/i915/gem/i915_gem_object.h
> index 66f20b803b01..aaf9183e601b 100644
> --- a/drivers/gpu/drm/i915/gem/i915_gem_object.h
> +++ b/drivers/gpu/drm/i915/gem/i915_gem_object.h
> @@ -455,7 +455,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
> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object_types.h b/drivers/gpu/drm/i915/gem/i915_gem_object_types.h
> index f9f7e44099fe..00c844caeabd 100644
> --- a/drivers/gpu/drm/i915/gem/i915_gem_object_types.h
> +++ b/drivers/gpu/drm/i915/gem/i915_gem_object_types.h
> @@ -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);

Perhaps a simple shrink for the vfunc name would suffice and match 
better with the neighbouring names?

> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_pages.c b/drivers/gpu/drm/i915/gem/i915_gem_pages.c
> index 49c6e55c68ce..52e975f57956 100644
> --- a/drivers/gpu/drm/i915/gem/i915_gem_pages.c
> +++ b/drivers/gpu/drm/i915/gem/i915_gem_pages.c
> @@ -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;
> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_shmem.c b/drivers/gpu/drm/i915/gem/i915_gem_shmem.c
> index cc9fe258fba7..7fdf4fa10b0e 100644
> --- a/drivers/gpu/drm/i915/gem/i915_gem_shmem.c
> +++ b/drivers/gpu/drm/i915/gem/i915_gem_shmem.c
> @@ -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,
> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_shrinker.c b/drivers/gpu/drm/i915/gem/i915_gem_shrinker.c
> index 157a9765f483..fd54e05521f6 100644
> --- a/drivers/gpu/drm/i915/gem/i915_gem_shrinker.c
> +++ b/drivers/gpu/drm/i915/gem/i915_gem_shrinker.c
> @@ -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);

Maybe flags would be better than two booleans? (Usually more than one is 
one two many when readability is concerned.) Although they couldn't be 
from I915_SHRINK_ namespace since that "belongs" to the shrinker, and 
granted, there wouldn't be ideal component separation since caller still 
has to have knowledge of shrinking mechanics to decide which ones is 
safe to pass in. So don't know, just thinking out loud.

Regards,

Tvrtko

> -
> -	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;
>   }
>   
> 

WARNING: multiple messages have this Message-ID (diff)
From: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
To: Matthew Auld <matthew.auld@intel.com>, intel-gfx@lists.freedesktop.org
Cc: dri-devel@lists.freedesktop.org
Subject: Re: [Intel-gfx] [PATCH] drm/i915: remove writeback hook
Date: Wed, 15 Dec 2021 08:35:06 +0000	[thread overview]
Message-ID: <18951e7a-d0e3-eec7-29aa-5ba0d58e8e53@linux.intel.com> (raw)
In-Reply-To: <20211214180754.4113036-1-matthew.auld@intel.com>


On 14/12/2021 18:07, Matthew Auld wrote:
> 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.

Looks like a good cleanup to me.

Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>

A couple of bike shedding comments/question only below.

> Suggested-by: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
> Signed-off-by: Matthew Auld <matthew.auld@intel.com>
> ---
>   drivers/gpu/drm/i915/gem/i915_gem_object.h    |  1 -
>   .../gpu/drm/i915/gem/i915_gem_object_types.h  |  1 -
>   drivers/gpu/drm/i915/gem/i915_gem_pages.c     | 10 ----------
>   drivers/gpu/drm/i915/gem/i915_gem_shmem.c     | 19 ++++++++++++++++++-
>   drivers/gpu/drm/i915/gem/i915_gem_shrinker.c  | 12 ------------
>   5 files changed, 18 insertions(+), 25 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object.h b/drivers/gpu/drm/i915/gem/i915_gem_object.h
> index 66f20b803b01..aaf9183e601b 100644
> --- a/drivers/gpu/drm/i915/gem/i915_gem_object.h
> +++ b/drivers/gpu/drm/i915/gem/i915_gem_object.h
> @@ -455,7 +455,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
> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object_types.h b/drivers/gpu/drm/i915/gem/i915_gem_object_types.h
> index f9f7e44099fe..00c844caeabd 100644
> --- a/drivers/gpu/drm/i915/gem/i915_gem_object_types.h
> +++ b/drivers/gpu/drm/i915/gem/i915_gem_object_types.h
> @@ -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);

Perhaps a simple shrink for the vfunc name would suffice and match 
better with the neighbouring names?

> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_pages.c b/drivers/gpu/drm/i915/gem/i915_gem_pages.c
> index 49c6e55c68ce..52e975f57956 100644
> --- a/drivers/gpu/drm/i915/gem/i915_gem_pages.c
> +++ b/drivers/gpu/drm/i915/gem/i915_gem_pages.c
> @@ -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;
> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_shmem.c b/drivers/gpu/drm/i915/gem/i915_gem_shmem.c
> index cc9fe258fba7..7fdf4fa10b0e 100644
> --- a/drivers/gpu/drm/i915/gem/i915_gem_shmem.c
> +++ b/drivers/gpu/drm/i915/gem/i915_gem_shmem.c
> @@ -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,
> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_shrinker.c b/drivers/gpu/drm/i915/gem/i915_gem_shrinker.c
> index 157a9765f483..fd54e05521f6 100644
> --- a/drivers/gpu/drm/i915/gem/i915_gem_shrinker.c
> +++ b/drivers/gpu/drm/i915/gem/i915_gem_shrinker.c
> @@ -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);

Maybe flags would be better than two booleans? (Usually more than one is 
one two many when readability is concerned.) Although they couldn't be 
from I915_SHRINK_ namespace since that "belongs" to the shrinker, and 
granted, there wouldn't be ideal component separation since caller still 
has to have knowledge of shrinking mechanics to decide which ones is 
safe to pass in. So don't know, just thinking out loud.

Regards,

Tvrtko

> -
> -	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;
>   }
>   
> 

  parent reply	other threads:[~2021-12-15  8:35 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-12-14 18:07 [PATCH] drm/i915: remove writeback hook Matthew Auld
2021-12-14 18:07 ` [Intel-gfx] " Matthew Auld
2021-12-14 18:48 ` [Intel-gfx] ✗ Fi.CI.SPARSE: warning for " Patchwork
2021-12-14 19:12 ` [Intel-gfx] ✓ Fi.CI.BAT: success " Patchwork
2021-12-15  4:41 ` [Intel-gfx] ✓ Fi.CI.IGT: " Patchwork
2021-12-15  8:35 ` Tvrtko Ursulin [this message]
2021-12-15  8:35   ` [Intel-gfx] [PATCH] " Tvrtko Ursulin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=18951e7a-d0e3-eec7-29aa-5ba0d58e8e53@linux.intel.com \
    --to=tvrtko.ursulin@linux.intel.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=matthew.auld@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.