Valgrind annotations for the slab allocator: Malloc-like and free-like for cache_alloc and free. Telling Valgrind a region is free-like clears all the valid bits, so slabs with constructors need different treatment; tell Valgrind about slab objects when first constructed and free them when the slab is destroyed.
Signed-off-by: Steve VanDeBogart <[EMAIL PROTECTED]> --- Index: linux-2.6.27-rc5/mm/slab.c =================================================================== --- linux-2.6.27-rc5.orig/mm/slab.c 2008-08-29 14:24:25.000000000 -0700 +++ linux-2.6.27-rc5/mm/slab.c 2008-08-29 14:24:42.000000000 -0700 @@ -111,6 +111,7 @@ #include <linux/rtmutex.h> #include <linux/reciprocal_div.h> #include <linux/debugobjects.h> +#include <linux/memcheck.h> #include <asm/cacheflush.h> #include <asm/tlbflush.h> @@ -1906,6 +1907,8 @@ int i; for (i = 0; i < cachep->num; i++) { void *objp = index_to_obj(cachep, slabp, i); + if (cachep->ctor) + VALGRIND_FREELIKE_BLOCK(objp, 0); if (cachep->flags & SLAB_POISON) { #ifdef CONFIG_DEBUG_PAGEALLOC @@ -1932,6 +1935,15 @@ #else static void slab_destroy_debugcheck(struct kmem_cache *cachep, struct slab *slabp) { +#ifdef CONFIG_VALGRIND_SUPPORT + int i; + if (cachep->ctor) { + for (i = 0; i < cachep->num; i++) { + void *objp = index_to_obj(cachep, slabp, i); + VALGRIND_FREELIKE_BLOCK(objp, 0); + } + } +#endif } #endif @@ -2635,6 +2647,9 @@ for (i = 0; i < cachep->num; i++) { void *objp = index_to_obj(cachep, slabp, i); + if (cachep->ctor) + VALGRIND_MALLOCLIKE_BLOCK(objp, cachep->buffer_size, + 0, 0); #if DEBUG /* need to poison the objs? */ if (cachep->flags & SLAB_POISON) @@ -3466,6 +3481,8 @@ objp = cache_alloc_debugcheck_after(cachep, flags, objp, caller); prefetchw(objp); + if (!cachep->ctor) + VALGRIND_MALLOCLIKE_BLOCK(objp, cachep->buffer_size, 0, 0); if (unlikely((flags & __GFP_ZERO) && objp)) memset(objp, 0, obj_size(cachep)); @@ -3578,6 +3595,9 @@ { struct array_cache *ac = cpu_cache_get(cachep); + if (!cachep->ctor) + VALGRIND_FREELIKE_BLOCK(objp, 0); + check_irq_off(); objp = cache_free_debugcheck(cachep, objp, __builtin_return_address(0)); ------------------------------------------------------------------------- This SF.Net email is sponsored by the Moblin Your Move Developer's challenge Build the coolest Linux based applications with Moblin SDK & win great prizes Grand prize is a trip for two to an Open Source event anywhere in the world http://moblin-contest.org/redirect.php?banner_id=100&url=/ _______________________________________________ User-mode-linux-devel mailing list User-mode-linux-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel