On Thu, Jan 28, 2010 at 7:26 PM, Luca Barbieri <l...@luca-barbieri.com> wrote:
> Currently TTM tries to preserve the previous caching even for moves
> between unrelated memory spaces.
>
> This results for instance in moves from VRAM to PCIE GART changing
> system memory to WC state needlessly.
>
> This patch changes TTM to only try to preserve caching if moving from
> system/TT to system/TT.
>
> In theory, we should also do that if moving between two device memory
> spaces that are backend by the same physical memory area.
> However, I'm not sure how to do that in the current TTM framework and
> I suspect no card/driver uses memory spaces in that way.

Thomas or Jerome (since I think placement changes were you), any
chance of ack or review?

Dave.

>
> Signed-off-by: Luca Barbieri <l...@luca-barbieri.com>
> ---
>  drivers/gpu/drm/ttm/ttm_bo.c |   18 ++++++++++++++----
>  1 files changed, 14 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c
> index 2920f9a..27ee1be 100644
> --- a/drivers/gpu/drm/ttm/ttm_bo.c
> +++ b/drivers/gpu/drm/ttm/ttm_bo.c
> @@ -876,6 +876,7 @@ int ttm_bo_mem_space(struct ttm_buffer_object *bo,
>
>        mem->mm_node = NULL;
>        for (i = 0; i < placement->num_placement; ++i) {
> +               int is_tt_move;
>                ret = ttm_mem_type_from_flags(placement->placement[i],
>                                                &mem_type);
>                if (ret)
> @@ -891,8 +892,12 @@ int ttm_bo_mem_space(struct ttm_buffer_object *bo,
>                if (!type_ok)
>                        continue;
>
> -               cur_flags = ttm_bo_select_caching(man, bo->mem.placement,
> -                                                 cur_flags);
> +               is_tt_move = !(man->flags & TTM_MEMTYPE_FLAG_FIXED) &&
> +                       !(bdev->man[bo->mem.mem_type].flags & 
> TTM_MEMTYPE_FLAG_FIXED);
> +
> +               /* Only try to keep the current flags if we are in the same 
> memory space */
> +               cur_flags = ttm_bo_select_caching(man, is_tt_move ? 
> bo->mem.placement : 0, cur_flags);
> +
>                /*
>                 * Use the access and other non-mapping-related flag bits from
>                 * the memory placement flags to the current flags
> @@ -927,6 +932,7 @@ int ttm_bo_mem_space(struct ttm_buffer_object *bo,
>                return -EINVAL;
>
>        for (i = 0; i < placement->num_busy_placement; ++i) {
> +               int is_tt_move;
>                ret = ttm_mem_type_from_flags(placement->busy_placement[i],
>                                                &mem_type);
>                if (ret)
> @@ -941,8 +947,12 @@ int ttm_bo_mem_space(struct ttm_buffer_object *bo,
>                                                &cur_flags))
>                        continue;
>
> -               cur_flags = ttm_bo_select_caching(man, bo->mem.placement,
> -                                                 cur_flags);
> +               is_tt_move = !(man->flags & TTM_MEMTYPE_FLAG_FIXED) &&
> +                       !(bdev->man[bo->mem.mem_type].flags & 
> TTM_MEMTYPE_FLAG_FIXED);
> +
> +               /* Only try to keep the current flags if we are in the same 
> memory space */
> +               cur_flags = ttm_bo_select_caching(man, is_tt_move ? 
> bo->mem.placement : 0, cur_flags);
> +
>                /*
>                 * Use the access and other non-mapping-related flag bits from
>                 * the memory placement flags to the current flags
> --
> 1.6.6.1.476.g01ddb
>
>
> ------------------------------------------------------------------------------
> The Planet: dedicated and managed hosting, cloud storage, colocation
> Stay online with enterprise data centers and the best network in the business
> Choose flexible plans and management services without long-term contracts
> Personal 24x7 support from experience hosting pros just a phone call away.
> http://p.sf.net/sfu/theplanet-com
> --
> _______________________________________________
> Dri-devel mailing list
> Dri-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/dri-devel
>

------------------------------------------------------------------------------
The Planet: dedicated and managed hosting, cloud storage, colocation
Stay online with enterprise data centers and the best network in the business
Choose flexible plans and management services without long-term contracts
Personal 24x7 support from experience hosting pros just a phone call away.
http://p.sf.net/sfu/theplanet-com
--
_______________________________________________
Dri-devel mailing list
Dri-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/dri-devel

Reply via email to