On Mon, Feb 1, 2010 at 5:26 PM, Luca Barbieri <[email protected]> wrote:
> I see a problem with this.
>
> If you have uncached TT (e.g. AGP) you want to get uncached for
> TT->SYSTEM, but you want cached for VRAM->SYSTEM.
> If you set SYSTEM to uncached, then VRAM->SYSTEM will broken, and if
> you set SYSTEM to cached, TT->SYSTEM will be broken.
> If you set to uncached | cached, VRAM->SYSTEM will still be broken
> because it will choose uncached.
>
> You would need to make the proposed placement conditional on the
> current BO memory type, which is possible but somewhat defeats the
> purpose of having all the ttm_bo_mem_space logic in ttm.
>
> Perhaps this doesn't usually happen because you would do VRAM->TT
> instead of SYSTEM (is that really always the case? what if we don't
> have enough space in GART?), but it seems a design deficiency in TTM
> anyway.
> The current placement caching should not really be a factor *unless*
> we can actually do the move just by changing the caching attributes.
>
> What do you think?
>
> Of course we could also just drop ttm_bo_mem_space and let the driver
> do that itself (perhaps using hardcorded helpers for the AGP and PCIE
> case). It seems quite a radical solution though.
>

I assumed that VRAM<->SYSTEM always did go through TT (which is the
case for radeon and i think for nouveau too, haven't checked :)). Assuming
we have a system which can do VRAM<->SYSTEM directly and which is
AGP, what you can do is :
agp_caching_mask=UC
and each time you do ask for a bo move you & the caching flags with
agp_caching_mask, then you do SYSTEM.default_caching=CACHED
You endup :
VRAM->SYSTEM proposed_flags = SYSTEM.default_caching which
is picking cached:
TT->SYSTEM proposed_flags = SYSTEM.default_caching & agp_caching_mask
so you endup keeping uncached
VRAM->TT proposed_flags = TT.default_caching(=UC) & agp_caching_mask

Idea is to mask all move which involve TT (AGP) with the agp_caching_mask,
it's easy to do in radeon ttm layer code and i believe it's easy to do
in nouveau
too. On non AGP you set agp_caching_mask to UC|WC|CACHED.

Anyway i think here the issue is more in ttm_tt_set_placement_caching which
favor WC over UC and UC over cached, Thomas maybe you can enlight us
on this ? If we change it to choose in this order : CACHED,WC,UC i think
it would be easier (well it's not that hard anyway ;)) for the driver to tweak
it's caching flags.

Cheers,
Jerome

------------------------------------------------------------------------------
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/dri-devel

Reply via email to