[Top] [All Lists]

Re: PCI patch of the day

To: Ralf Baechle <>
Subject: Re: PCI patch of the day
From: William Jhun <>
Date: Wed, 7 Aug 2002 09:38:28 -0700
Cc: Carsten Langgaard <>, "Maciej W. Rozycki" <>,
In-reply-to: <>; from on Wed, Aug 07, 2002 at 12:09:38PM +0200
References: <> <>
User-agent: Mutt/1.2.5i

Will the *_dma_cache_wback() routines ever be implemented? I sent out a
set of patches a while ago that defaults them to calling _wback_inv()
instead of calling panic(). Additionally I sent out some PCI DMA
coherency patches that would, for pci_map_*():

- Invalidate if DMAing from the device
- Writeback if DMAing to the device
- Writeback/Invalidate if bidirectional

pci_dma_sync_*() was changed to simply invalidate if DMAing from the
device or bidirectional. Conceivably, the pci_unmap_*() should
invalidate as well, since the following could happen:

- pci_dma_sync_*()
- driver reads out of buffer
- DMA happens again
- pci_unmap_*()
- buffer cachelines better be invalidated!

Not to mention that the whole PCI DMA interface is inherently broken.
I've cogitated on this and sent patches to those responsible, but was
told to buzz off. The above is a good example of this broken-ness:
you'll have an extra invalidate for no reason if you never end up using
pci_dma_sync_*() but just simply map, DMA and unmap. Otherwise, it'll be
broken for the pci_dma_sync_*() case. And I've already went on before
about how streaming mappings are broken for PCI_DMA_TODEVICE when
re-using one buffer.

I've already spent a lot of time trying to sort this out and get the
patches right, but since I received almost zero response I dropped it.
Apparently it's still broken enough to need further attention.


On Wed, Aug 07, 2002 at 12:09:38PM +0200, Ralf Baechle wrote:
> Sigh, yes.  The whole flushing thing was done improperly and the patches
> to fix that which I was integrating last night were not right either.  The
> big question for me is why nobody was complaining or is suddently everybody
> only using coherent machines ...

<Prev in Thread] Current Thread [Next in Thread>