On Thu, Dec 05, 2002 at 11:31:10AM +0900, Miles Bader wrote:
> James Bottomley <James.Bottomley@steeleye.com> writes:
> > > How is the driver supposed to tell whether a given dma_addr_t value
> > > represents consistent memory or not? It seems like an
> > > (arch-specific) `dma_addr_is_consistent' function is necessary, but
> > > I couldn't see one in your patch.
> >
> > If you have a machine that has both consistent and inconsistent blocks, you
> > need to encode that in dma_addr_t (which is a platform definable type).
> >
> > The sync functions would just decode the type and either nop or perform the
> > sync.
>
> My thinking was that a driver might want to do things like --
>
> if (dma_addr_is_consistent (some_funky_addr)) {
> do it quickly;
> } else
> do_it_the_slow_way (some_funky_addr);
>
> in other words, something besides just calling the sync functions, in
> the case where the memory was consistent.
Yes, but using consistent memory is not necessarily the fast way - in
fact it probably won't be. Machines which don't do DMA cache snooping
will need to disable caching to get consistent memory, so using
consistent memory is very slow - on such a machine explicit syncs are
preferable wherever possible.
On a machine which is nicely consistent, the cache "flushes" should
become NOPs, so we'd expect the two sides of that if to do the same
thing.
-- David Gibson | For every complex problem there is a david@gibson.dropbear.id.au | solution which is simple, neat and | wrong. http://www.ozlabs.org/people/dgibson - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
This archive was generated by hypermail 2b29 : Sat Dec 07 2002 - 22:00:21 EST