Hi
I find there is some drivers use kmalloc to allocate large Memorys during module_init, some can be changed to use vmalloc To save some low mem, I add log in kernel to track , And list them here:
https://git.kernel.org/cgit/linux/kernel/git/will/linux.git/tree/drivers/usb...
https://git.kernel.org/cgit/linux/kernel/git/will/linux.git/tree/sound/soc/s...
https://git.kernel.org/cgit/linux/kernel/git/will/linux.git/tree/net/netfilt... https://git.kernel.org/cgit/linux/kernel/git/will/linux.git/tree/net/netfilt... https://git.kernel.org/cgit/linux/kernel/git/will/linux.git/tree/net/netfilt... https://git.kernel.org/cgit/linux/kernel/git/will/linux.git/tree/net/netfilt...
https://git.kernel.org/cgit/linux/kernel/git/will/linux.git/tree/drivers/inp...
they allocate large memory from 10k~64K , this will use lots of low mem, instead if we use vmalloc for these drivers , it will be good for some devices like smart phone, we often encounter some errors like kmalloc failed because there is not enough low mem , especially when the device has physical memory less than 1GB .
could this module change the memory allocation into vmalloc ?
I was thinking that if we can introduce a helper function in kmalloc.h like this :
Kmalloc(size, flags) { If (size > PAGE_SIZE && flags&CAN_USE_VMALLOC_FLAG) return vmalloc(size); Else return real_kmalloc(size); }
Kfree(ptr) { If (is_vmalloc_addr(ptr)) Vfree(ptr); Else Kfree(ptr); }
But we need add some flags to ensure always use kmalloc for Some special use (dma etc..)
How do you think of it ?
Thanks