From: Benjamin Herrenschmidt <benh@xxxxxxxxxxxxxxxxxxx> Date: Tue, 20 Nov 2007 11:34:24 +1100 > Do you still think we should introduce this __dma_cacheline_aligned ? Do > you see other cases of drivers where it would be useful ? It tend to > agree with your earlier statement that drivers doing that are broken and > should be using a separate allocator for DMA'ble objects (in fact, on > non-cache coherent archs, kmalloc is just fine). I don't care either way. If we say that the DMA api works on "DMA cacheline boundaries" (and in reality it does) we do need to either: 1) Require that entire buffers are commited by call sites, and thus "embedding" DMA'd within non-DMA stuff isn't allowed 2) Add the __dma_cacheline_aligned tag. But note that with #2 it could get quite ugly because the alignment and size both have a minimum that needs to be enforced, not just the alignment alone. So either: struct foo { unsigned int other_unrelated_stuff; struct object dma_thing __dma_cacheline_aligned; unsigned int more_nondma_stuff __dma_cacheline_aligned; }; or: struct foo { unsigned int other_unrelated_stuff; union { struct object dma_thing __dma_cacheline_aligned; char __pad[(sizeof(object) + DMA_CACHELINE_SIZE & ~DMA_CACHELINE_SIZE)]; } u; unsigned int more_nondma_stuff __dma_cacheline_aligned; }; I hope you see what I'm trying to say. - To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html