Re: PCI DMA to small buffers on cache-incoherent arch

Roland Dreier
2002-06-11T04:04:36Z

>>>>> "David" == David S Miller <davem@redhat.com> writes:

David> Wait a second, forget all of this cache alignment crap. If
David> we can avoid drivers seeing it, we should by all means
David> necessary.

David> We should just tell people to use PCI pools and be done
David> with it. That way all the complexity about buffer
David> alignment and all this other crapola lives strictly inside
David> of the PCI pool code.

That's fine but there are drivers (USB, etc) doing

struct something {
int field1;
char dma_buffer[SMALLER_THAN_CACHE_LINE];
int field2;
};

struct something *dev = kmalloc(sizeof *dev, GFP_KERNEL);

Do they have to change to

struct something {
int field1;
char *dma_buffer;
int field2;
};

struct something *dev = kmalloc(sizeof *dev, GFP_KERNEL);
dev->dma_buffer = kmalloc(SMALLER_THAN_CACHE_LINE, GFP_KERNEL);

(This is always safe because as you said kmalloc can never return a
slab that's not safe for DMA) I don't see how PCI pools help here.

Best,
Roland