From: Geert Uytterhoeven
Sent: 13 May 2020 14:26 Hi David,
On Wed, May 13, 2020 at 2:37 PM David Laight David.Laight@aculab.com wrote:
From: Geert Uytterhoeven
On Wed, May 13, 2020 at 1:05 PM Geert Uytterhoeven geert@linux-m68k.org wrote:
On Wed, May 13, 2020 at 12:10 PM David Laight David.Laight@aculab.com wrote:
From: Geert Uytterhoeven
Sent: 13 May 2020 10:49
...
> I don't want to apply this to older kernels as it could cause extra > memory usage for no good reason. I have no idea why a non ARC system > would want it :(
I think the reference to ARC is a red herring. The real issue is that buffers used for DMA may not have the required alignment, which is not limited to ARC systems.
Note that I'm also not super happy with the extra memory usage. But devm_*() conveniences come with their penalties...
Interesting thought. Could the devm 'header' be put right at the end of the kmalloc() buffer?
Then the driver would be given aligned address.
Yes, if the header is extended to contain the real start address of the allocated block.
But that would break explicit freeing through devm_kfree(), as that is passed a pointer to the payload, not the header.
There is a function that gives the full size of memory that kmalloc() returns. That can be used to find the end and hence the header.
Do you know the name of the function?
ksize() - used by the skb allocating code.
I don't know how the all the allocators behave. Some might be adding a header anyway - which might actually have space it in that devm_alloc could use.
OTOH I've seen kernel memory allocators that (effectively) put the index of the pool into the page table. They need no red tape at all.
David
- Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK Registration No: 1397386 (Wales)