All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jerome Glisse <glisse@freedesktop.org>
To: Ben Skeggs <skeggsb@gmail.com>
Cc: Ben Skeggs <bskeggs@redhat.com>, dri-devel@lists.freedesktop.org
Subject: Re: [PATCH 1/2] drm/ttm: introduce utility function to free an allocated memory node
Date: Mon, 09 Aug 2010 15:24:18 -0400	[thread overview]
Message-ID: <4C6055E2.5050009@freedesktop.org> (raw)
In-Reply-To: <1281013783-10949-2-git-send-email-skeggsb@gmail.com>

On 08/05/2010 09:09 AM, Ben Skeggs wrote:
> From: Ben Skeggs <bskeggs@redhat.com>
> 
> Existing core code/drivers call drm_mm_put_block on ttm_mem_reg.mm_node
> directly.  Future patches will modify TTM behaviour in such a way that
> ttm_mem_reg.mm_node doesn't necessarily belong to drm_mm.
> 
> Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Reviewed-by: Jerome Glisse <jglisse@redhat.com>
> ---
>  drivers/gpu/drm/nouveau/nouveau_bo.c |   14 ++------------
>  drivers/gpu/drm/radeon/radeon_ttm.c  |   18 ++----------------
>  drivers/gpu/drm/ttm/ttm_bo.c         |   26 +++++++++++++++-----------
>  drivers/gpu/drm/ttm/ttm_bo_util.c    |    9 +--------
>  include/drm/ttm/ttm_bo_driver.h      |    4 ++++
>  5 files changed, 24 insertions(+), 47 deletions(-)
> 
> diff --git a/drivers/gpu/drm/nouveau/nouveau_bo.c b/drivers/gpu/drm/nouveau/nouveau_bo.c
> index 3ca8343..92290fa 100644
> --- a/drivers/gpu/drm/nouveau/nouveau_bo.c
> +++ b/drivers/gpu/drm/nouveau/nouveau_bo.c
> @@ -597,12 +597,7 @@ nouveau_bo_move_flipd(struct ttm_buffer_object *bo, bool evict, bool intr,
>  
>  	ret = ttm_bo_move_ttm(bo, evict, no_wait_reserve, no_wait_gpu, new_mem);
>  out:
> -	if (tmp_mem.mm_node) {
> -		spin_lock(&bo->bdev->glob->lru_lock);
> -		drm_mm_put_block(tmp_mem.mm_node);
> -		spin_unlock(&bo->bdev->glob->lru_lock);
> -	}
> -
> +	ttm_bo_mem_put(bo, &tmp_mem);
>  	return ret;
>  }
>  
> @@ -635,12 +630,7 @@ nouveau_bo_move_flips(struct ttm_buffer_object *bo, bool evict, bool intr,
>  		goto out;
>  
>  out:
> -	if (tmp_mem.mm_node) {
> -		spin_lock(&bo->bdev->glob->lru_lock);
> -		drm_mm_put_block(tmp_mem.mm_node);
> -		spin_unlock(&bo->bdev->glob->lru_lock);
> -	}
> -
> +	ttm_bo_mem_put(bo, &tmp_mem);
>  	return ret;
>  }
>  
> diff --git a/drivers/gpu/drm/radeon/radeon_ttm.c b/drivers/gpu/drm/radeon/radeon_ttm.c
> index 84c53e4..cc19aba 100644
> --- a/drivers/gpu/drm/radeon/radeon_ttm.c
> +++ b/drivers/gpu/drm/radeon/radeon_ttm.c
> @@ -326,14 +326,7 @@ static int radeon_move_vram_ram(struct ttm_buffer_object *bo,
>  	}
>  	r = ttm_bo_move_ttm(bo, true, no_wait_reserve, no_wait_gpu, new_mem);
>  out_cleanup:
> -	if (tmp_mem.mm_node) {
> -		struct ttm_bo_global *glob = rdev->mman.bdev.glob;
> -
> -		spin_lock(&glob->lru_lock);
> -		drm_mm_put_block(tmp_mem.mm_node);
> -		spin_unlock(&glob->lru_lock);
> -		return r;
> -	}
> +	ttm_bo_mem_put(bo, &tmp_mem);
>  	return r;
>  }
>  
> @@ -372,14 +365,7 @@ static int radeon_move_ram_vram(struct ttm_buffer_object *bo,
>  		goto out_cleanup;
>  	}
>  out_cleanup:
> -	if (tmp_mem.mm_node) {
> -		struct ttm_bo_global *glob = rdev->mman.bdev.glob;
> -
> -		spin_lock(&glob->lru_lock);
> -		drm_mm_put_block(tmp_mem.mm_node);
> -		spin_unlock(&glob->lru_lock);
> -		return r;
> -	}
> +	ttm_bo_mem_put(bo, &tmp_mem);
>  	return r;
>  }
>  
> diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c
> index cb4cf7e..80d37b4 100644
> --- a/drivers/gpu/drm/ttm/ttm_bo.c
> +++ b/drivers/gpu/drm/ttm/ttm_bo.c
> @@ -475,11 +475,8 @@ static int ttm_bo_cleanup_refs(struct ttm_buffer_object *bo, bool remove_all)
>  			list_del_init(&bo->ddestroy);
>  			++put_count;
>  		}
> -		if (bo->mem.mm_node) {
> -			drm_mm_put_block(bo->mem.mm_node);
> -			bo->mem.mm_node = NULL;
> -		}
>  		spin_unlock(&glob->lru_lock);
> +		ttm_bo_mem_put(bo, &bo->mem);
>  
>  		atomic_set(&bo->reserved, 0);
>  
> @@ -621,7 +618,6 @@ static int ttm_bo_evict(struct ttm_buffer_object *bo, bool interruptible,
>  			bool no_wait_reserve, bool no_wait_gpu)
>  {
>  	struct ttm_bo_device *bdev = bo->bdev;
> -	struct ttm_bo_global *glob = bo->glob;
>  	struct ttm_mem_reg evict_mem;
>  	struct ttm_placement placement;
>  	int ret = 0;
> @@ -667,12 +663,7 @@ static int ttm_bo_evict(struct ttm_buffer_object *bo, bool interruptible,
>  	if (ret) {
>  		if (ret != -ERESTARTSYS)
>  			printk(KERN_ERR TTM_PFX "Buffer eviction failed\n");
> -		spin_lock(&glob->lru_lock);
> -		if (evict_mem.mm_node) {
> -			drm_mm_put_block(evict_mem.mm_node);
> -			evict_mem.mm_node = NULL;
> -		}
> -		spin_unlock(&glob->lru_lock);
> +		ttm_bo_mem_put(bo, &evict_mem);
>  		goto out;
>  	}
>  	bo->evicted = true;
> @@ -769,6 +760,19 @@ static int ttm_bo_man_get_node(struct ttm_buffer_object *bo,
>  	return 0;
>  }
>  
> +void ttm_bo_mem_put(struct ttm_buffer_object *bo, struct ttm_mem_reg *mem)
> +{
> +	struct ttm_bo_global *glob = bo->glob;
> +
> +	if (mem->mm_node) {
> +		spin_lock(&glob->lru_lock);
> +		drm_mm_put_block(mem->mm_node);
> +		spin_unlock(&glob->lru_lock);
> +		mem->mm_node = NULL;
> +	}
> +}
> +EXPORT_SYMBOL(ttm_bo_mem_put);
> +
>  /**
>   * Repeatedly evict memory from the LRU for @mem_type until we create enough
>   * space, or we've evicted everything and there isn't enough space.
> diff --git a/drivers/gpu/drm/ttm/ttm_bo_util.c b/drivers/gpu/drm/ttm/ttm_bo_util.c
> index 7cffb3e..0ebfe0d 100644
> --- a/drivers/gpu/drm/ttm/ttm_bo_util.c
> +++ b/drivers/gpu/drm/ttm/ttm_bo_util.c
> @@ -39,14 +39,7 @@
>  
>  void ttm_bo_free_old_node(struct ttm_buffer_object *bo)
>  {
> -	struct ttm_mem_reg *old_mem = &bo->mem;
> -
> -	if (old_mem->mm_node) {
> -		spin_lock(&bo->glob->lru_lock);
> -		drm_mm_put_block(old_mem->mm_node);
> -		spin_unlock(&bo->glob->lru_lock);
> -	}
> -	old_mem->mm_node = NULL;
> +	ttm_bo_mem_put(bo, &bo->mem);
>  }
>  
>  int ttm_bo_move_ttm(struct ttm_buffer_object *bo,
> diff --git a/include/drm/ttm/ttm_bo_driver.h b/include/drm/ttm/ttm_bo_driver.h
> index b875042..6c694d8 100644
> --- a/include/drm/ttm/ttm_bo_driver.h
> +++ b/include/drm/ttm/ttm_bo_driver.h
> @@ -649,6 +649,10 @@ extern int ttm_bo_mem_space(struct ttm_buffer_object *bo,
>  				struct ttm_mem_reg *mem,
>  				bool interruptible,
>  				bool no_wait_reserve, bool no_wait_gpu);
> +
> +extern void ttm_bo_mem_put(struct ttm_buffer_object *bo,
> +			   struct ttm_mem_reg *mem);
> +
>  /**
>   * ttm_bo_wait_for_cpu
>   *

  reply	other threads:[~2010-08-09 19:24 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-08-05 13:09 [PATCH 0/2] RFC: allow driver to plugin alternative to drm_mm Ben Skeggs
2010-08-05 13:09 ` [PATCH 1/2] drm/ttm: introduce utility function to free an allocated memory node Ben Skeggs
2010-08-09 19:24   ` Jerome Glisse [this message]
2010-08-05 13:09 ` [PATCH 2/2] drm/ttm: restructure to allow driver to plug in alternate memory manager Ben Skeggs
2010-08-09 19:24   ` Jerome Glisse
2010-08-18  2:48   ` [PATCHv2] " Ben Skeggs
2010-08-09 22:17 ` [PATCH 0/2] RFC: allow driver to plugin alternative to drm_mm Thomas Hellstrom

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=4C6055E2.5050009@freedesktop.org \
    --to=glisse@freedesktop.org \
    --cc=bskeggs@redhat.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=skeggsb@gmail.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.