linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
From: Ralph Blach <rcblach@raleigh.ibm.com>
To: paulus@samba.org
Cc: linuxppc-dev@lists.linuxppc.org
Subject: Re: pci_dma_sync_single
Date: Tue, 16 Oct 2001 09:12:44 -0400	[thread overview]
Message-ID: <3BCC324C.9EE9C105@raleigh.ibm.com> (raw)
In-Reply-To: 15308.8725.416230.867981@cargo.ozlabs.ibm.com


Paul Mackerras wrote:
>
> I'm pretty sure this comment in pci_dma_sync_single in pci.h is wrong:
>
>         /* The bus_to_virt() can't be used here, in case dma_handle
>          * points to something that doesn't have the same cache attributes
>          * as the 1:1 mapped kernel memory.  If we used it, we could
>          * get a cache line alias with the wrong attributes.
>          * Since there isn't any Linux way to get the real VA from a PA,
>          * it is just easier to flush the whole cache.  The code to
>          * determine VA from PA would probably do the same :-).
>          * I don't know why these functions don't pass VA, since the
>          * cache operations use VA and the caller has this information.
>          *      -- Dan
>          */
>
> There are basically two ways to get a dma_handle: through
> pci_alloc_consistent, which might map some memory with caching disable
> (I'm talking about the non-cache-coherent processors here), or through
> mapping some memory with pci_map_single, pci_map_sg, or pci_map_page.
>
> Now in the first instance, which is what the comment seems to be
> referring to, we get the consistency by having the uncached mapping,
> and you don't need to, and in fact shouldn't, call pci_dma_sync_single.
>
> In the second instance the CPU's mapping of the page would be a
> cacheable mapping since the caller would have got the memory via
> kmalloc or get_free_page, and so the possibility of cache paradoxes
> doesn't arise there either.
>
> So in the absence of highmem it seems to me that pci_dma_sync_single
> could just do bus_to_virt quite safely.  With highmem, the (new)
> pci_map_page routine lets us do dma to highmem pages directly, and so
> bus_to_virt won't work there, but it would be relatively easy to kmap
> the page and flush that virtual address.
>
> However, I have just realized that the best way of all is probably to
> have a cache-flush routine which just turns off DR and flushes using
> physical addresses, which will be identical to the dma addresses
> (except for an offset on some platforms).

This would probably work, except on Book E platforms, where DR off
simpley gets you another translaton and NOT
a physical address.


>
> Thoughts?  Have I got the wrong end of the stick?
>
> Paul.
>

** Sent via the linuxppc-dev mail list. See http://lists.linuxppc.org/

  reply	other threads:[~2001-10-16 13:12 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2001-10-16 12:03 pci_dma_sync_single Paul Mackerras
2001-10-16 13:12 ` Ralph Blach [this message]
2001-10-16 14:08   ` pci_dma_sync_single Benjamin Herrenschmidt
2001-10-20  2:04     ` pci_dma_sync_single Dan Malek
2001-10-17  1:47   ` pci_dma_sync_single Paul Mackerras
2001-10-17 14:26     ` pci_dma_sync_single Tom Rini
2001-10-17 14:34       ` pci_dma_sync_single Ralph Blach
2001-10-20  2:13 ` pci_dma_sync_single Dan Malek

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=3BCC324C.9EE9C105@raleigh.ibm.com \
    --to=rcblach@raleigh.ibm.com \
    --cc=linuxppc-dev@lists.linuxppc.org \
    --cc=paulus@samba.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).