linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
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>

  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