Kernel Korner - Allocating Memory in the Kernel
With a little understanding, getting a hold of memory in the kernel is demystified and not too much more difficult to do than it is in user space. A few simple rules of thumb can go a long way:
Decide whether you can sleep (that is, whether the call to kmalloc() can block). If you are in an interrupt handler, in a bottom half, or if you hold a lock, you cannot. If you are in process context and do not hold a lock, you probably can.
If you can sleep, specify GFP_KERNEL.
If you cannot sleep, specify GFP_ATOMIC.
If you need DMA-capable memory (for example, for an ISA or broken PCI device), specify GFP_DMA.
Always check for and handle a NULL return value from kmalloc().
Do not leak memory; make sure you call kfree() somewhere.
Ensure that you do not race and call kfree() multiple times and that you never access a block of memory after you free it.
For more information, check out these files in your kernel source tree.
include/linux/gfp.h: home of the allocation flags.
include/linux/slab.h: definitions of kmalloc(), et al.
mm/page_alloc.c: page allocation functions.
mm/slab.c: implementation of kmalloc(), et al.
Robert Love (firstname.lastname@example.org) is a kernel hacker at MontaVista Software and a student at the University of Florida. He is the author of Linux Kernel Development. Robert enjoys fine wine and lives in Gainesville, Florida.
- Readers' Choice Awards 2013
- Linux Kernel News - November 2013
- Mars Needs Women
- Sublime Text: One Editor to Rule Them All?
- Raspberry Pi: the Perfect Home Server
- RSS Feeds
- December 2013 Issue of Linux Journal: Readers' Choice
- Tech Tip: Really Simple HTTP Server with Python
- IBM Will Minimize Impact of Future Disasters
- Advanced Hard Drive Caching Techniques
- The kernel doesn't really
4 hours 48 min ago
5 hours 19 min ago
5 hours 19 min ago
7 hours 24 min ago
- This should be very helpful
8 hours 38 min ago
- As much as I share your point
10 hours 58 min ago
- So girls had it better ?
14 hours 29 min ago
- Reply to comment | Linux Journal
14 hours 49 min ago
- why is GNOME 3 in the fifth position at 14.1 %?
20 hours 22 min ago
- Sublime Is Brilliant!
1 day 1 hour ago