The slab allocator IS dead simple to use, basically:
- driver global variable:
kmem_cache_t *usb_mass_cachep;
- in the driver init function:
usb_mass_cachep = kmem_cache_create("usb_mass_cache",
sizeof(struct whatever),
0, SLAB_HWCACHE_ALIGN,
NULL, NULL);
(check for NULL usb_mass_slab)
- in the driver cleanup function:
if (usb_mass_cachep && kmem_cache_destroy(usb_mass_cachep))
printk(KERN_ERR "usb_mass_cache: not all structures freed\n");
- wherever you need an item from the slab cache:
whateverp = kmem_cache_alloc(usb_mass_cachep, GFP_KERNEL);
(check for NULL whateverp)
- when you are done with it:
kmem_cache_free(usb_mass_cachep, whateverp);
Notes:
- if you have a slab leak and you don't free all of the items (hence the slab
cache is not removed), you will probably get an oops when you reload the
driver. You can only have one slab cache per name ("usb_mass_cache" here).
- You may need different alignment (SLAB_HWCACHE_ALIGN), or not
- You may need different allocation policy (GFP_KERNEL), or not
Cheers, Andreas
-- Andreas Dilger \ "If a man ate a pound of pasta and a pound of antipasto, \ would they cancel out, leaving him still hungry?" http://www-mddsp.enel.ucalgary.ca/People/adilger/ -- Dogbert - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/