> If you have a buffer which is not cache-line-aligned (which is
> possible with the general case of raw or direct I/O, although not in
> unmodified Linux at the moment), then, for DMA into memory, you must
> use temporary buffers for any portion of the buffer which occupies
> just part of a cache line, and copy the data from the temporary buffer
> to the real buffer after the DMA completes, to account for the
> possibility of a separate thread modifying data outside the buffer in
> the shared cache line, leading to a victim writeback (or a
> writethrough on the R3000). This could apply even to the R3000, depending
> on how the compiler generates code for a partial-word update, although
> it is unlikely.
I don't see why this is necessary?
You should only have to force a writeback of the first and last cache lines
before DMA prior to a non-cache-aligned DMA.