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