From: David Rientjes <rientjes@google.com>
To: Christoph Lameter <cl@linux-foundation.org>
Cc: Pekka Enberg <penberg@cs.helsinki.fi>, linux-mm@kvack.org
Subject: Re: [S+Q Cleanup 5/6] slub: Extract hooks for memory checkers from hotpaths
Date: Tue, 17 Aug 2010 17:28:57 -0700 (PDT) [thread overview]
Message-ID: <alpine.DEB.2.00.1008171726210.21514@chino.kir.corp.google.com> (raw)
In-Reply-To: <20100817211137.241962968@linux.com>
On Tue, 17 Aug 2010, Christoph Lameter wrote:
> Index: linux-2.6/mm/slub.c
> ===================================================================
> --- linux-2.6.orig/mm/slub.c 2010-08-13 10:33:05.000000000 -0500
> +++ linux-2.6/mm/slub.c 2010-08-13 10:33:09.000000000 -0500
> @@ -792,6 +792,37 @@ static void trace(struct kmem_cache *s,
> }
>
> /*
> + * Hooks for other subsystems that check memory allocations. In a typical
> + * production configuration these hooks all should produce no code at all.
> + */
> +static inline int slab_pre_alloc_hook(struct kmem_cache *s, gfp_t flags)
> +{
> + lockdep_trace_alloc(flags);
> + might_sleep_if(flags & __GFP_WAIT);
> +
> + return should_failslab(s->objsize, flags, s->flags);
> +}
> +
> +static inline void slab_post_alloc_hook(struct kmem_cache *s, gfp_t flags, void *object)
> +{
> + kmemcheck_slab_alloc(s, flags, object, s->objsize);
> + kmemleak_alloc_recursive(object, s->objsize, 1, s->flags, flags);
> +}
> +
> +static inline void slab_free_hook(struct kmem_cache *s, void *x)
> +{
> + kmemleak_free_recursive(x, s->flags);
> +}
> +
> +static inline void slab_free_hook_irq(struct kmem_cache *s, void *object)
> +{
> + kmemcheck_slab_free(s, object, s->objsize);
> + debug_check_no_locks_freed(object, s->objsize);
> + if (!(s->flags & SLAB_DEBUG_OBJECTS))
> + debug_check_no_obj_freed(object, s->objsize);
> +}
> +
> +/*
> * Tracking of fully allocated slabs for debugging purposes.
> */
> static void add_full(struct kmem_cache_node *n, struct page *page)
> @@ -1697,10 +1728,7 @@ static __always_inline void *slab_alloc(
>
> gfpflags &= gfp_allowed_mask;
>
> - lockdep_trace_alloc(gfpflags);
> - might_sleep_if(gfpflags & __GFP_WAIT);
> -
> - if (should_failslab(s->objsize, gfpflags, s->flags))
> + if (!slab_pre_alloc_hook(s, gfpflags))
That's inverted, it should be slab_pre_alloc_hook()?
> return NULL;
>
> local_irq_save(flags);
> @@ -1719,8 +1747,7 @@ static __always_inline void *slab_alloc(
> if (unlikely(gfpflags & __GFP_ZERO) && object)
> memset(object, 0, s->objsize);
>
> - kmemcheck_slab_alloc(s, gfpflags, object, s->objsize);
> - kmemleak_alloc_recursive(object, s->objsize, 1, s->flags, gfpflags);
> + slab_post_alloc_hook(s, gfpflags, object);
>
> return object;
> }
> @@ -1850,13 +1877,13 @@ static __always_inline void slab_free(st
> struct kmem_cache_cpu *c;
> unsigned long flags;
>
> - kmemleak_free_recursive(x, s->flags);
> + slab_free_hook(s, x);
> +
> local_irq_save(flags);
> c = __this_cpu_ptr(s->cpu_slab);
> - kmemcheck_slab_free(s, object, s->objsize);
> - debug_check_no_locks_freed(object, s->objsize);
> - if (!(s->flags & SLAB_DEBUG_OBJECTS))
> - debug_check_no_obj_freed(object, s->objsize);
> +
> + slab_free_hook_irq(s, x);
> +
> if (likely(page == c->page && c->node >= 0)) {
> set_freepointer(s, object, c->freelist);
> c->freelist = object;
>
>
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next prev parent reply other threads:[~2010-08-18 0:29 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-08-17 21:11 [S+Q Cleanup 0/6] SLUB: Cleanups Christoph Lameter
2010-08-17 21:11 ` [S+Q Cleanup 1/6] Slub: Force no inlining of debug functions Christoph Lameter
2010-08-17 23:13 ` David Rientjes
2010-08-17 21:11 ` [S+Q Cleanup 2/6] slub: remove dynamic dma slab allocation Christoph Lameter
2010-08-17 23:35 ` David Rientjes
2010-08-18 14:46 ` Christoph Lameter
2010-08-17 21:11 ` [S+Q Cleanup 3/6] slub: Remove static kmem_cache_cpu array for boot Christoph Lameter
2010-08-17 23:58 ` David Rientjes
2010-08-18 6:09 ` Tejun Heo
2010-08-18 14:54 ` Christoph Lameter
2010-08-17 21:11 ` [S+Q Cleanup 4/6] slub: Dynamically size kmalloc cache allocations Christoph Lameter
2010-08-17 21:11 ` [S+Q Cleanup 5/6] slub: Extract hooks for memory checkers from hotpaths Christoph Lameter
2010-08-18 0:28 ` David Rientjes [this message]
2010-08-18 14:58 ` Christoph Lameter
2010-08-17 21:11 ` [S+Q Cleanup 6/6] slub: Move gfpflag masking out of the hotpath Christoph Lameter
2010-08-18 0:35 ` David Rientjes
2010-08-18 15:46 ` Christoph Lameter
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=alpine.DEB.2.00.1008171726210.21514@chino.kir.corp.google.com \
--to=rientjes@google.com \
--cc=cl@linux-foundation.org \
--cc=linux-mm@kvack.org \
--cc=penberg@cs.helsinki.fi \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox