All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ingo Molnar <mingo@elte.hu>
To: Nick Piggin <npiggin@suse.de>
Cc: Pekka Enberg <penberg@cs.helsinki.fi>,
	Linux Memory Management List <linux-mm@kvack.org>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	Lin Ming <ming.m.lin@intel.com>,
	"Zhang, Yanmin" <yanmin_zhang@linux.intel.com>,
	Christoph Lameter <clameter@engr.sgi.com>
Subject: Re: [patch] SLQB slab allocator
Date: Wed, 21 Jan 2009 18:40:10 +0100	[thread overview]
Message-ID: <20090121174010.GA2998@elte.hu> (raw)
In-Reply-To: <20090121165600.GA16695@wotan.suse.de>


* Nick Piggin <npiggin@suse.de> wrote:

> On Wed, Jan 21, 2009 at 03:59:18PM +0100, Ingo Molnar wrote:
> > 
> > Mind if i nitpick a bit about minor style issues? Since this is going to 
> > be the next Linux SLAB allocator we might as well do it perfectly :-)
> 
> Well here is an incremental patch which should get most of the issues 
> you pointed out, most of the sane ones that checkpatch pointed out, and 
> a few of my own ;)

here's an incremental one ontop of your incremental patch, enhancing some 
more issues. I now find the code very readable! :-)

( in case you are wondering about the placement of bit_spinlock.h - that 
  file needs fixing, just move it to the top of the file and see the build 
  break. But that's a separate patch.)

	Ingo

------------------->
Subject: slbq: cleanup
From: Ingo Molnar <mingo@elte.hu>
Date: Wed Jan 21 18:10:20 CET 2009

mm/slqb.o:

   text	   data	    bss	    dec	    hex	filename
  17655	  54159	 200456	 272270	  4278e	slqb.o.before
  17653	  54159	 200456	 272268	  4278c	slqb.o.after

Signed-off-by: Ingo Molnar <mingo@elte.hu>
---
 mm/slqb.c |  588 ++++++++++++++++++++++++++++++++------------------------------
 1 file changed, 308 insertions(+), 280 deletions(-)

Index: linux/mm/slqb.c
===================================================================
--- linux.orig/mm/slqb.c
+++ linux/mm/slqb.c
@@ -7,19 +7,20 @@
  * Using ideas and code from mm/slab.c, mm/slob.c, and mm/slub.c.
  */
 
-#include <linux/mm.h>
-#include <linux/module.h>
-#include <linux/bit_spinlock.h>
 #include <linux/interrupt.h>
-#include <linux/bitops.h>
-#include <linux/slab.h>
-#include <linux/seq_file.h>
-#include <linux/cpu.h>
-#include <linux/cpuset.h>
 #include <linux/mempolicy.h>
-#include <linux/ctype.h>
 #include <linux/kallsyms.h>
+#include <linux/seq_file.h>
+#include <linux/bitops.h>
+#include <linux/cpuset.h>
 #include <linux/memory.h>
+#include <linux/module.h>
+#include <linux/ctype.h>
+#include <linux/slab.h>
+#include <linux/cpu.h>
+#include <linux/mm.h>
+
+#include <linux/bit_spinlock.h>
 
 /*
  * TODO
@@ -40,14 +41,14 @@
 struct slqb_page {
 	union {
 		struct {
-			unsigned long	flags;		/* mandatory */
-			atomic_t	_count;		/* mandatory */
-			unsigned int	inuse;		/* Nr of objects */
+			unsigned long	flags;		/* mandatory	   */
+			atomic_t	_count;		/* mandatory	   */
+			unsigned int	inuse;		/* Nr of objects   */
 			struct kmem_cache_list *list;	/* Pointer to list */
-			void		 **freelist;	/* LIFO freelist */
+			void		 **freelist;	/* LIFO freelist   */
 			union {
-				struct list_head lru;	/* misc. list */
-				struct rcu_head rcu_head; /* for rcu freeing */
+				struct list_head lru;	/* misc. list	   */
+				struct rcu_head	rcu_head; /* for rcu freeing */
 			};
 		};
 		struct page page;
@@ -120,16 +121,16 @@ static inline int slab_freebatch(struct 
  * - There is no remote free queue. Nodes don't free objects, CPUs do.
  */
 
-static inline void slqb_stat_inc(struct kmem_cache_list *list,
-				enum stat_item si)
+static inline void
+slqb_stat_inc(struct kmem_cache_list *list, enum stat_item si)
 {
 #ifdef CONFIG_SLQB_STATS
 	list->stats[si]++;
 #endif
 }
 
-static inline void slqb_stat_add(struct kmem_cache_list *list,
-				enum stat_item si, unsigned long nr)
+static inline void
+slqb_stat_add(struct kmem_cache_list *list, enum stat_item si, unsigned long nr)
 {
 #ifdef CONFIG_SLQB_STATS
 	list->stats[si] += nr;
@@ -196,12 +197,12 @@ static inline void __free_slqb_pages(str
 #ifdef CONFIG_SLQB_DEBUG
 static inline int slab_debug(struct kmem_cache *s)
 {
-	return (s->flags &
+	return s->flags &
 			(SLAB_DEBUG_FREE |
 			 SLAB_RED_ZONE |
 			 SLAB_POISON |
 			 SLAB_STORE_USER |
-			 SLAB_TRACE));
+			 SLAB_TRACE);
 }
 static inline int slab_poison(struct kmem_cache *s)
 {
@@ -574,34 +575,34 @@ static int check_bytes_and_report(struct
  * Object layout:
  *
  * object address
- * 	Bytes of the object to be managed.
- * 	If the freepointer may overlay the object then the free
- * 	pointer is the first word of the object.
+ *	Bytes of the object to be managed.
+ *	If the freepointer may overlay the object then the free
+ *	pointer is the first word of the object.
  *
- * 	Poisoning uses 0x6b (POISON_FREE) and the last byte is
- * 	0xa5 (POISON_END)
+ *	Poisoning uses 0x6b (POISON_FREE) and the last byte is
+ *	0xa5 (POISON_END)
  *
  * object + s->objsize
- * 	Padding to reach word boundary. This is also used for Redzoning.
- * 	Padding is extended by another word if Redzoning is enabled and
- * 	objsize == inuse.
+ *	Padding to reach word boundary. This is also used for Redzoning.
+ *	Padding is extended by another word if Redzoning is enabled and
+ *	objsize == inuse.
  *
- * 	We fill with 0xbb (RED_INACTIVE) for inactive objects and with
- * 	0xcc (RED_ACTIVE) for objects in use.
+ *	We fill with 0xbb (RED_INACTIVE) for inactive objects and with
+ *	0xcc (RED_ACTIVE) for objects in use.
  *
  * object + s->inuse
- * 	Meta data starts here.
+ *	Meta data starts here.
  *
- * 	A. Free pointer (if we cannot overwrite object on free)
- * 	B. Tracking data for SLAB_STORE_USER
- * 	C. Padding to reach required alignment boundary or at mininum
- * 		one word if debuggin is on to be able to detect writes
- * 		before the word boundary.
+ *	A. Free pointer (if we cannot overwrite object on free)
+ *	B. Tracking data for SLAB_STORE_USER
+ *	C. Padding to reach required alignment boundary or at mininum
+ *		one word if debuggin is on to be able to detect writes
+ *		before the word boundary.
  *
  *	Padding is done using 0x5a (POISON_INUSE)
  *
  * object + s->size
- * 	Nothing is used beyond s->size.
+ *	Nothing is used beyond s->size.
  */
 
 static int check_pad_bytes(struct kmem_cache *s, struct slqb_page *page, u8 *p)
@@ -717,25 +718,26 @@ static int check_slab(struct kmem_cache 
 	return 1;
 }
 
-static void trace(struct kmem_cache *s, struct slqb_page *page,
-			void *object, int alloc)
+static void
+trace(struct kmem_cache *s, struct slqb_page *page, void *object, int alloc)
 {
-	if (s->flags & SLAB_TRACE) {
-		printk(KERN_INFO "TRACE %s %s 0x%p inuse=%d fp=0x%p\n",
-			s->name,
-			alloc ? "alloc" : "free",
-			object, page->inuse,
-			page->freelist);
+	if (likely(!(s->flags & SLAB_TRACE)))
+		return;
 
-		if (!alloc)
-			print_section("Object", (void *)object, s->objsize);
+	printk(KERN_INFO "TRACE %s %s 0x%p inuse=%d fp=0x%p\n",
+		s->name,
+		alloc ? "alloc" : "free",
+		object, page->inuse,
+		page->freelist);
 
-		dump_stack();
-	}
+	if (!alloc)
+		print_section("Object", (void *)object, s->objsize);
+
+	dump_stack();
 }
 
-static void setup_object_debug(struct kmem_cache *s, struct slqb_page *page,
-				void *object)
+static void
+setup_object_debug(struct kmem_cache *s, struct slqb_page *page, void *object)
 {
 	if (!slab_debug(s))
 		return;
@@ -747,11 +749,10 @@ static void setup_object_debug(struct km
 	init_tracking(s, object);
 }
 
-static int alloc_debug_processing(struct kmem_cache *s,
-					void *object, void *addr)
+static int
+alloc_debug_processing(struct kmem_cache *s, void *object, void *addr)
 {
-	struct slqb_page *page;
-	page = virt_to_head_slqb_page(object);
+	struct slqb_page *page = virt_to_head_slqb_page(object);
 
 	if (!check_slab(s, page))
 		goto bad;
@@ -767,6 +768,7 @@ static int alloc_debug_processing(struct
 	/* Success perform special debug activities for allocs */
 	if (s->flags & SLAB_STORE_USER)
 		set_track(s, object, TRACK_ALLOC, addr);
+
 	trace(s, page, object, 1);
 	init_object(s, object, 1);
 	return 1;
@@ -775,11 +777,9 @@ bad:
 	return 0;
 }
 
-static int free_debug_processing(struct kmem_cache *s,
-					void *object, void *addr)
+static int free_debug_processing(struct kmem_cache *s, void *object, void *addr)
 {
-	struct slqb_page *page;
-	page = virt_to_head_slqb_page(object);
+	struct slqb_page *page = virt_to_head_slqb_page(object);
 
 	if (!check_slab(s, page))
 		goto fail;
@@ -870,29 +870,34 @@ static unsigned long kmem_cache_flags(un
 				void (*ctor)(void *))
 {
 	/*
-	 * Enable debugging if selected on the kernel commandline.
+	 * Enable debugging if selected on the kernel commandline:
 	 */
-	if (slqb_debug && (!slqb_debug_slabs ||
-	    strncmp(slqb_debug_slabs, name,
-		strlen(slqb_debug_slabs)) == 0))
-			flags |= slqb_debug;
+
+	if (!slqb_debug)
+		return flags;
+
+	if (slqb_debug_slabs)
+		return flags | slqb_debug;
+
+	if (!strncmp(slqb_debug_slabs, name, strlen(slqb_debug_slabs)))
+		return flags | slqb_debug;
 
 	return flags;
 }
 #else
-static inline void setup_object_debug(struct kmem_cache *s,
-			struct slqb_page *page, void *object)
+static inline void
+setup_object_debug(struct kmem_cache *s, struct slqb_page *page, void *object)
 {
 }
 
-static inline int alloc_debug_processing(struct kmem_cache *s,
-			void *object, void *addr)
+static inline int
+alloc_debug_processing(struct kmem_cache *s, void *object, void *addr)
 {
 	return 0;
 }
 
-static inline int free_debug_processing(struct kmem_cache *s,
-			void *object, void *addr)
+static inline int
+free_debug_processing(struct kmem_cache *s, void *object, void *addr)
 {
 	return 0;
 }
@@ -903,7 +908,7 @@ static inline int slab_pad_check(struct 
 }
 
 static inline int check_object(struct kmem_cache *s, struct slqb_page *page,
-			void *object, int active)
+			       void *object, int active)
 {
 	return 1;
 }
@@ -924,11 +929,11 @@ static const int slqb_debug = 0;
 /*
  * allocate a new slab (return its corresponding struct slqb_page)
  */
-static struct slqb_page *allocate_slab(struct kmem_cache *s,
-					gfp_t flags, int node)
+static struct slqb_page *
+allocate_slab(struct kmem_cache *s, gfp_t flags, int node)
 {
-	struct slqb_page *page;
 	int pages = 1 << s->order;
+	struct slqb_page *page;
 
 	flags |= s->allocflags;
 
@@ -947,8 +952,8 @@ static struct slqb_page *allocate_slab(s
 /*
  * Called once for each object on a new slab page
  */
-static void setup_object(struct kmem_cache *s,
-				struct slqb_page *page, void *object)
+static void
+setup_object(struct kmem_cache *s, struct slqb_page *page, void *object)
 {
 	setup_object_debug(s, page, object);
 	if (unlikely(s->ctor))
@@ -958,8 +963,8 @@ static void setup_object(struct kmem_cac
 /*
  * Allocate a new slab, set up its object list.
  */
-static struct slqb_page *new_slab_page(struct kmem_cache *s,
-				gfp_t flags, int node, unsigned int colour)
+static struct slqb_page *
+new_slab_page(struct kmem_cache *s, gfp_t flags, int node, unsigned int colour)
 {
 	struct slqb_page *page;
 	void *start;
@@ -1030,6 +1035,7 @@ static void rcu_free_slab(struct rcu_hea
 static void free_slab(struct kmem_cache *s, struct slqb_page *page)
 {
 	VM_BUG_ON(page->inuse);
+
 	if (unlikely(s->flags & SLAB_DESTROY_BY_RCU))
 		call_rcu(&page->rcu_head, rcu_free_slab);
 	else
@@ -1060,12 +1066,14 @@ static int free_object_to_page(struct km
 		l->nr_slabs--;
 		free_slab(s, page);
 		slqb_stat_inc(l, FLUSH_SLAB_FREE);
+
 		return 1;
 
 	} else if (page->inuse + 1 == s->objects) {
 		l->nr_partial++;
 		list_add(&page->lru, &l->partial);
 		slqb_stat_inc(l, FLUSH_SLAB_PARTIAL);
+
 		return 0;
 	}
 	return 0;
@@ -1146,8 +1154,8 @@ static void flush_free_list_all(struct k
  * Caller must be the owner CPU in the case of per-CPU list, or hold the node's
  * list_lock in the case of per-node list.
  */
-static void claim_remote_free_list(struct kmem_cache *s,
-					struct kmem_cache_list *l)
+static void
+claim_remote_free_list(struct kmem_cache *s, struct kmem_cache_list *l)
 {
 	void **head, **tail;
 	int nr;
@@ -1192,8 +1200,8 @@ static void claim_remote_free_list(struc
  * Caller must be the owner CPU in the case of per-CPU list, or hold the node's
  * list_lock in the case of per-node list.
  */
-static __always_inline void *__cache_list_get_object(struct kmem_cache *s,
-						struct kmem_cache_list *l)
+static __always_inline void *
+__cache_list_get_object(struct kmem_cache *s, struct kmem_cache_list *l)
 {
 	void *object;
 
@@ -1243,8 +1251,8 @@ static __always_inline void *__cache_lis
  * Caller must be the owner CPU in the case of per-CPU list, or hold the node's
  * list_lock in the case of per-node list.
  */
-static noinline void *__cache_list_get_page(struct kmem_cache *s,
-				struct kmem_cache_list *l)
+static noinline void *
+__cache_list_get_page(struct kmem_cache *s, struct kmem_cache_list *l)
 {
 	struct slqb_page *page;
 	void *object;
@@ -1282,12 +1290,12 @@ static noinline void *__cache_list_get_p
  *
  * Must be called with interrupts disabled.
  */
-static noinline void *__slab_alloc_page(struct kmem_cache *s,
-				gfp_t gfpflags, int node)
+static noinline void *
+__slab_alloc_page(struct kmem_cache *s, gfp_t gfpflags, int node)
 {
-	struct slqb_page *page;
 	struct kmem_cache_list *l;
 	struct kmem_cache_cpu *c;
+	struct slqb_page *page;
 	unsigned int colour;
 	void *object;
 
@@ -1347,15 +1355,19 @@ static noinline void *__slab_alloc_page(
 }
 
 #ifdef CONFIG_NUMA
-static noinline int alternate_nid(struct kmem_cache *s,
-				gfp_t gfpflags, int node)
+static noinline int
+alternate_nid(struct kmem_cache *s, gfp_t gfpflags, int node)
 {
 	if (in_interrupt() || (gfpflags & __GFP_THISNODE))
 		return node;
-	if (cpuset_do_slab_mem_spread() && (s->flags & SLAB_MEM_SPREAD))
+
+	if (cpuset_do_slab_mem_spread() && (s->flags & SLAB_MEM_SPREAD)) {
 		return cpuset_mem_spread_node();
-	else if (current->mempolicy)
-		return slab_node(current->mempolicy);
+	} else {
+		if (current->mempolicy)
+			return slab_node(current->mempolicy);
+	}
+
 	return node;
 }
 
@@ -1365,8 +1377,8 @@ static noinline int alternate_nid(struct
  *
  * Must be called with interrupts disabled.
  */
-static noinline void *__remote_slab_alloc(struct kmem_cache *s,
-				gfp_t gfpflags, int node)
+static noinline void *
+__remote_slab_alloc(struct kmem_cache *s, gfp_t gfpflags, int node)
 {
 	struct kmem_cache_node *n;
 	struct kmem_cache_list *l;
@@ -1375,6 +1387,7 @@ static noinline void *__remote_slab_allo
 	n = s->node[node];
 	if (unlikely(!n)) /* node has no memory */
 		return NULL;
+
 	l = &n->list;
 
 	spin_lock(&n->list_lock);
@@ -1389,7 +1402,9 @@ static noinline void *__remote_slab_allo
 	}
 	if (likely(object))
 		slqb_stat_inc(l, ALLOC);
+
 	spin_unlock(&n->list_lock);
+
 	return object;
 }
 #endif
@@ -1399,12 +1414,12 @@ static noinline void *__remote_slab_allo
  *
  * Must be called with interrupts disabled.
  */
-static __always_inline void *__slab_alloc(struct kmem_cache *s,
-				gfp_t gfpflags, int node)
+static __always_inline void *
+__slab_alloc(struct kmem_cache *s, gfp_t gfpflags, int node)
 {
-	void *object;
-	struct kmem_cache_cpu *c;
 	struct kmem_cache_list *l;
+	struct kmem_cache_cpu *c;
+	void *object;
 
 #ifdef CONFIG_NUMA
 	if (unlikely(node != -1) && unlikely(node != numa_node_id()))
@@ -1422,6 +1437,7 @@ static __always_inline void *__slab_allo
 	}
 	if (likely(object))
 		slqb_stat_inc(l, ALLOC);
+
 	return object;
 }
 
@@ -1429,11 +1445,11 @@ static __always_inline void *__slab_allo
  * Perform some interrupts-on processing around the main allocation path
  * (debug checking and memset()ing).
  */
-static __always_inline void *slab_alloc(struct kmem_cache *s,
-				gfp_t gfpflags, int node, void *addr)
+static __always_inline void *
+slab_alloc(struct kmem_cache *s, gfp_t gfpflags, int node, void *addr)
 {
-	void *object;
 	unsigned long flags;
+	void *object;
 
 again:
 	local_irq_save(flags);
@@ -1451,10 +1467,11 @@ again:
 	return object;
 }
 
-static __always_inline void *__kmem_cache_alloc(struct kmem_cache *s,
-				gfp_t gfpflags, void *caller)
+static __always_inline void *
+__kmem_cache_alloc(struct kmem_cache *s, gfp_t gfpflags, void *caller)
 {
 	int node = -1;
+
 #ifdef CONFIG_NUMA
 	if (unlikely(current->flags & (PF_SPREAD_SLAB | PF_MEMPOLICY)))
 		node = alternate_nid(s, gfpflags, node);
@@ -1487,8 +1504,8 @@ EXPORT_SYMBOL(kmem_cache_alloc_node);
  *
  * Must be called with interrupts disabled.
  */
-static void flush_remote_free_cache(struct kmem_cache *s,
-				struct kmem_cache_cpu *c)
+static void
+flush_remote_free_cache(struct kmem_cache *s, struct kmem_cache_cpu *c)
 {
 	struct kmlist *src;
 	struct kmem_cache_list *dst;
@@ -1575,12 +1592,12 @@ static noinline void slab_free_to_remote
  *
  * Must be called with interrupts disabled.
  */
-static __always_inline void __slab_free(struct kmem_cache *s,
-				struct slqb_page *page, void *object)
+static __always_inline void
+__slab_free(struct kmem_cache *s, struct slqb_page *page, void *object)
 {
-	struct kmem_cache_cpu *c;
-	struct kmem_cache_list *l;
 	int thiscpu = smp_processor_id();
+	struct kmem_cache_list *l;
+	struct kmem_cache_cpu *c;
 
 	c = get_cpu_slab(s, thiscpu);
 	l = &c->list;
@@ -1619,8 +1636,8 @@ static __always_inline void __slab_free(
  * Perform some interrupts-on processing around the main freeing path
  * (debug checking).
  */
-static __always_inline void slab_free(struct kmem_cache *s,
-				struct slqb_page *page, void *object)
+static __always_inline void
+slab_free(struct kmem_cache *s, struct slqb_page *page, void *object)
 {
 	unsigned long flags;
 
@@ -1683,7 +1700,7 @@ static int slab_order(int size, int max_
 	return order;
 }
 
-static int calculate_order(int size)
+static int calc_order(int size)
 {
 	int order;
 
@@ -1710,8 +1727,8 @@ static int calculate_order(int size)
 /*
  * Figure out what the alignment of the objects will be.
  */
-static unsigned long calculate_alignment(unsigned long flags,
-				unsigned long align, unsigned long size)
+static unsigned long
+calc_alignment(unsigned long flags, unsigned long align, unsigned long size)
 {
 	/*
 	 * If the user wants hardware cache aligned objects then follow that
@@ -1737,18 +1754,18 @@ static unsigned long calculate_alignment
 static void init_kmem_cache_list(struct kmem_cache *s,
 				struct kmem_cache_list *l)
 {
-	l->cache		= s;
-	l->freelist.nr		= 0;
-	l->freelist.head	= NULL;
-	l->freelist.tail	= NULL;
-	l->nr_partial		= 0;
-	l->nr_slabs		= 0;
+	l->cache		 = s;
+	l->freelist.nr		 = 0;
+	l->freelist.head	 = NULL;
+	l->freelist.tail	 = NULL;
+	l->nr_partial		 = 0;
+	l->nr_slabs		 = 0;
 	INIT_LIST_HEAD(&l->partial);
 
 #ifdef CONFIG_SMP
-	l->remote_free_check	= 0;
+	l->remote_free_check	 = 0;
 	spin_lock_init(&l->remote_free.lock);
-	l->remote_free.list.nr	= 0;
+	l->remote_free.list.nr	 = 0;
 	l->remote_free.list.head = NULL;
 	l->remote_free.list.tail = NULL;
 #endif
@@ -1758,8 +1775,7 @@ static void init_kmem_cache_list(struct 
 #endif
 }
 
-static void init_kmem_cache_cpu(struct kmem_cache *s,
-				struct kmem_cache_cpu *c)
+static void init_kmem_cache_cpu(struct kmem_cache *s, struct kmem_cache_cpu *c)
 {
 	init_kmem_cache_list(s, &c->list);
 
@@ -1773,8 +1789,8 @@ static void init_kmem_cache_cpu(struct k
 }
 
 #ifdef CONFIG_NUMA
-static void init_kmem_cache_node(struct kmem_cache *s,
-				struct kmem_cache_node *n)
+static void
+init_kmem_cache_node(struct kmem_cache *s, struct kmem_cache_node *n)
 {
 	spin_lock_init(&n->list_lock);
 	init_kmem_cache_list(s, &n->list);
@@ -1804,8 +1820,8 @@ static struct kmem_cache_node kmem_node_
 #endif
 
 #ifdef CONFIG_SMP
-static struct kmem_cache_cpu *alloc_kmem_cache_cpu(struct kmem_cache *s,
-				int cpu)
+static struct kmem_cache_cpu *
+alloc_kmem_cache_cpu(struct kmem_cache *s, int cpu)
 {
 	struct kmem_cache_cpu *c;
 
@@ -1910,7 +1926,7 @@ static int alloc_kmem_cache_nodes(struct
 #endif
 
 /*
- * calculate_sizes() determines the order and the distribution of data within
+ * calc_sizes() determines the order and the distribution of data within
  * a slab object.
  */
 static int calculate_sizes(struct kmem_cache *s)
@@ -1991,7 +2007,7 @@ static int calculate_sizes(struct kmem_c
 	 * user specified and the dynamic determination of cache line size
 	 * on bootup.
 	 */
-	align = calculate_alignment(flags, align, s->objsize);
+	align = calc_alignment(flags, align, s->objsize);
 
 	/*
 	 * SLQB stores one object immediately after another beginning from
@@ -2000,7 +2016,7 @@ static int calculate_sizes(struct kmem_c
 	 */
 	size = ALIGN(size, align);
 	s->size = size;
-	s->order = calculate_order(size);
+	s->order = calc_order(size);
 
 	if (s->order < 0)
 		return 0;
@@ -2210,38 +2226,38 @@ static struct kmem_cache *open_kmalloc_c
  * fls.
  */
 static s8 size_index[24] __cacheline_aligned = {
-	3,	/* 8 */
-	4,	/* 16 */
-	5,	/* 24 */
-	5,	/* 32 */
-	6,	/* 40 */
-	6,	/* 48 */
-	6,	/* 56 */
-	6,	/* 64 */
+	 3,	/* 8 */
+	 4,	/* 16 */
+	 5,	/* 24 */
+	 5,	/* 32 */
+	 6,	/* 40 */
+	 6,	/* 48 */
+	 6,	/* 56 */
+	 6,	/* 64 */
 #if L1_CACHE_BYTES < 64
-	1,	/* 72 */
-	1,	/* 80 */
-	1,	/* 88 */
-	1,	/* 96 */
+	 1,	/* 72 */
+	 1,	/* 80 */
+	 1,	/* 88 */
+	 1,	/* 96 */
 #else
-	7,
-	7,
-	7,
-	7,
-#endif
-	7,	/* 104 */
-	7,	/* 112 */
-	7,	/* 120 */
-	7,	/* 128 */
+	 7,
+	 7,
+	 7,
+	 7,
+#endif
+	 7,	/* 104 */
+	 7,	/* 112 */
+	 7,	/* 120 */
+	 7,	/* 128 */
 #if L1_CACHE_BYTES < 128
-	2,	/* 136 */
-	2,	/* 144 */
-	2,	/* 152 */
-	2,	/* 160 */
-	2,	/* 168 */
-	2,	/* 176 */
-	2,	/* 184 */
-	2	/* 192 */
+	 2,	/* 136 */
+	 2,	/* 144 */
+	 2,	/* 152 */
+	 2,	/* 160 */
+	 2,	/* 168 */
+	 2,	/* 176 */
+	 2,	/* 184 */
+	 2	/* 192 */
 #else
 	-1,
 	-1,
@@ -2278,9 +2294,8 @@ static struct kmem_cache *get_slab(size_
 
 void *__kmalloc(size_t size, gfp_t flags)
 {
-	struct kmem_cache *s;
+	struct kmem_cache *s = get_slab(size, flags);
 
-	s = get_slab(size, flags);
 	if (unlikely(ZERO_OR_NULL_PTR(s)))
 		return s;
 
@@ -2291,9 +2306,8 @@ EXPORT_SYMBOL(__kmalloc);
 #ifdef CONFIG_NUMA
 void *__kmalloc_node(size_t size, gfp_t flags, int node)
 {
-	struct kmem_cache *s;
+	struct kmem_cache *s = get_slab(size, flags);
 
-	s = get_slab(size, flags);
 	if (unlikely(ZERO_OR_NULL_PTR(s)))
 		return s;
 
@@ -2340,8 +2354,8 @@ EXPORT_SYMBOL(ksize);
 
 void kfree(const void *object)
 {
-	struct kmem_cache *s;
 	struct slqb_page *page;
+	struct kmem_cache *s;
 
 	if (unlikely(ZERO_OR_NULL_PTR(object)))
 		return;
@@ -2371,21 +2385,21 @@ static void kmem_cache_trim_percpu(void 
 
 int kmem_cache_shrink(struct kmem_cache *s)
 {
-#ifdef CONFIG_NUMA
-	int node;
-#endif
-
 	on_each_cpu(kmem_cache_trim_percpu, s, 1);
 
 #ifdef CONFIG_NUMA
-	for_each_node_state(node, N_NORMAL_MEMORY) {
-		struct kmem_cache_node *n = s->node[node];
-		struct kmem_cache_list *l = &n->list;
+	{
+		int node;
 
-		spin_lock_irq(&n->list_lock);
-		claim_remote_free_list(s, l);
-		flush_free_list(s, l);
-		spin_unlock_irq(&n->list_lock);
+		for_each_node_state(node, N_NORMAL_MEMORY) {
+			struct kmem_cache_node *n = s->node[node];
+			struct kmem_cache_list *l = &n->list;
+
+			spin_lock_irq(&n->list_lock);
+			claim_remote_free_list(s, l);
+			flush_free_list(s, l);
+			spin_unlock_irq(&n->list_lock);
+		}
 	}
 #endif
 
@@ -2397,8 +2411,8 @@ EXPORT_SYMBOL(kmem_cache_shrink);
 static void kmem_cache_reap_percpu(void *arg)
 {
 	int cpu = smp_processor_id();
-	struct kmem_cache *s;
 	long phase = (long)arg;
+	struct kmem_cache *s;
 
 	list_for_each_entry(s, &slab_caches, list) {
 		struct kmem_cache_cpu *c = get_cpu_slab(s, cpu);
@@ -2442,8 +2456,7 @@ static void kmem_cache_reap(void)
 
 static void cache_trim_worker(struct work_struct *w)
 {
-	struct delayed_work *work =
-		container_of(w, struct delayed_work, work);
+	struct delayed_work *work;
 	struct kmem_cache *s;
 	int node;
 
@@ -2469,6 +2482,7 @@ static void cache_trim_worker(struct wor
 
 	up_read(&slqb_lock);
 out:
+	work = container_of(w, struct delayed_work, work);
 	schedule_delayed_work(work, round_jiffies_relative(3*HZ));
 }
 
@@ -2587,8 +2601,8 @@ static int slab_memory_callback(struct n
 
 void __init kmem_cache_init(void)
 {
-	int i;
 	unsigned int flags = SLAB_HWCACHE_ALIGN|SLAB_PANIC;
+	int i;
 
 	/*
 	 * All the ifdefs are rather ugly here, but it's just the setup code,
@@ -2719,8 +2733,9 @@ void __init kmem_cache_init(void)
 /*
  * Some basic slab creation sanity checks
  */
-static int kmem_cache_create_ok(const char *name, size_t size,
-		size_t align, unsigned long flags)
+static int
+kmem_cache_create_ok(const char *name, size_t size,
+		     size_t align, unsigned long flags)
 {
 	struct kmem_cache *tmp;
 
@@ -2773,8 +2788,9 @@ static int kmem_cache_create_ok(const ch
 	return 1;
 }
 
-struct kmem_cache *kmem_cache_create(const char *name, size_t size,
-		size_t align, unsigned long flags, void (*ctor)(void *))
+struct kmem_cache *
+kmem_cache_create(const char *name, size_t size,
+		  size_t align, unsigned long flags, void (*ctor)(void *))
 {
 	struct kmem_cache *s;
 
@@ -2804,7 +2820,7 @@ EXPORT_SYMBOL(kmem_cache_create);
  * necessary.
  */
 static int __cpuinit slab_cpuup_callback(struct notifier_block *nfb,
-				unsigned long action, void *hcpu)
+					 unsigned long action, void *hcpu)
 {
 	long cpu = (long)hcpu;
 	struct kmem_cache *s;
@@ -2855,7 +2871,7 @@ static int __cpuinit slab_cpuup_callback
 }
 
 static struct notifier_block __cpuinitdata slab_notifier = {
-	.notifier_call = slab_cpuup_callback
+	.notifier_call	= slab_cpuup_callback
 };
 
 #endif
@@ -2878,11 +2894,10 @@ void *__kmalloc_track_caller(size_t size
 }
 
 void *__kmalloc_node_track_caller(size_t size, gfp_t flags, int node,
-				unsigned long caller)
+				  unsigned long caller)
 {
-	struct kmem_cache *s;
+	struct kmem_cache *s = get_slab(size, flags);
 
-	s = get_slab(size, flags);
 	if (unlikely(ZERO_OR_NULL_PTR(s)))
 		return s;
 
@@ -2892,12 +2907,17 @@ void *__kmalloc_node_track_caller(size_t
 
 #if defined(CONFIG_SLQB_SYSFS) || defined(CONFIG_SLABINFO)
 struct stats_gather {
-	struct kmem_cache *s;
-	spinlock_t lock;
-	unsigned long nr_slabs;
-	unsigned long nr_partial;
-	unsigned long nr_inuse;
-	unsigned long nr_objects;
+	/*
+	 * Serialize on_each_cpu() instances updating the summary
+	 * stats structure:
+	 */
+	spinlock_t		lock;
+
+	struct kmem_cache	*s;
+	unsigned long		nr_slabs;
+	unsigned long		nr_partial;
+	unsigned long		nr_inuse;
+	unsigned long		nr_objects;
 
 #ifdef CONFIG_SLQB_STATS
 	unsigned long stats[NR_SLQB_STAT_ITEMS];
@@ -2915,25 +2935,25 @@ static void __gather_stats(void *arg)
 	struct kmem_cache_cpu *c = get_cpu_slab(s, cpu);
 	struct kmem_cache_list *l = &c->list;
 	struct slqb_page *page;
-#ifdef CONFIG_SLQB_STATS
-	int i;
-#endif
 
 	nr_slabs = l->nr_slabs;
 	nr_partial = l->nr_partial;
 	nr_inuse = (nr_slabs - nr_partial) * s->objects;
 
-	list_for_each_entry(page, &l->partial, lru) {
+	list_for_each_entry(page, &l->partial, lru)
 		nr_inuse += page->inuse;
-	}
 
 	spin_lock(&gather->lock);
 	gather->nr_slabs += nr_slabs;
 	gather->nr_partial += nr_partial;
 	gather->nr_inuse += nr_inuse;
 #ifdef CONFIG_SLQB_STATS
-	for (i = 0; i < NR_SLQB_STAT_ITEMS; i++)
-		gather->stats[i] += l->stats[i];
+	{
+		int i;
+
+		for (i = 0; i < NR_SLQB_STAT_ITEMS; i++)
+			gather->stats[i] += l->stats[i];
+	}
 #endif
 	spin_unlock(&gather->lock);
 }
@@ -2956,14 +2976,15 @@ static void gather_stats(struct kmem_cac
 		struct kmem_cache_list *l = &n->list;
 		struct slqb_page *page;
 		unsigned long flags;
-#ifdef CONFIG_SLQB_STATS
-		int i;
-#endif
 
 		spin_lock_irqsave(&n->list_lock, flags);
 #ifdef CONFIG_SLQB_STATS
-		for (i = 0; i < NR_SLQB_STAT_ITEMS; i++)
-			stats->stats[i] += l->stats[i];
+		{
+			int i;
+
+			for (i = 0; i < NR_SLQB_STAT_ITEMS; i++)
+				stats->stats[i] += l->stats[i];
+		}
 #endif
 		stats->nr_slabs += l->nr_slabs;
 		stats->nr_partial += l->nr_partial;
@@ -3039,14 +3060,15 @@ static int s_show(struct seq_file *m, vo
 	seq_printf(m, " : slabdata %6lu %6lu %6lu", stats.nr_slabs,
 			stats.nr_slabs, 0UL);
 	seq_putc(m, '\n');
+
 	return 0;
 }
 
 static const struct seq_operations slabinfo_op = {
-	.start = s_start,
-	.next = s_next,
-	.stop = s_stop,
-	.show = s_show,
+	.start		= s_start,
+	.next		= s_next,
+	.stop		= s_stop,
+	.show		= s_show,
 };
 
 static int slabinfo_open(struct inode *inode, struct file *file)
@@ -3205,8 +3227,8 @@ static ssize_t store_user_show(struct km
 }
 SLAB_ATTR_RO(store_user);
 
-static ssize_t hiwater_store(struct kmem_cache *s,
-				const char *buf, size_t length)
+static ssize_t
+hiwater_store(struct kmem_cache *s, const char *buf, size_t length)
 {
 	long hiwater;
 	int err;
@@ -3229,8 +3251,8 @@ static ssize_t hiwater_show(struct kmem_
 }
 SLAB_ATTR(hiwater);
 
-static ssize_t freebatch_store(struct kmem_cache *s,
-				const char *buf, size_t length)
+static ssize_t
+freebatch_store(struct kmem_cache *s, const char *buf, size_t length)
 {
 	long freebatch;
 	int err;
@@ -3258,91 +3280,95 @@ static int show_stat(struct kmem_cache *
 {
 	struct stats_gather stats;
 	int len;
-#ifdef CONFIG_SMP
-	int cpu;
-#endif
 
 	gather_stats(s, &stats);
 
 	len = sprintf(buf, "%lu", stats.stats[si]);
 
 #ifdef CONFIG_SMP
-	for_each_online_cpu(cpu) {
-		struct kmem_cache_cpu *c = get_cpu_slab(s, cpu);
-		struct kmem_cache_list *l = &c->list;
+	{
+		int cpu;
 
-		if (len < PAGE_SIZE - 20)
-			len += sprintf(buf+len, " C%d=%lu", cpu, l->stats[si]);
+		for_each_online_cpu(cpu) {
+			struct kmem_cache_cpu *c = get_cpu_slab(s, cpu);
+			struct kmem_cache_list *l = &c->list;
+
+			if (len < PAGE_SIZE - 20) {
+				len += sprintf(buf+len,
+						" C%d=%lu", cpu, l->stats[si]);
+			}
+		}
 	}
 #endif
 	return len + sprintf(buf + len, "\n");
 }
 
-#define STAT_ATTR(si, text) 					\
+#define STAT_ATTR(si, text)					\
 static ssize_t text##_show(struct kmem_cache *s, char *buf)	\
 {								\
 	return show_stat(s, buf, si);				\
 }								\
 SLAB_ATTR_RO(text);						\
 
-STAT_ATTR(ALLOC, alloc);
-STAT_ATTR(ALLOC_SLAB_FILL, alloc_slab_fill);
-STAT_ATTR(ALLOC_SLAB_NEW, alloc_slab_new);
-STAT_ATTR(FREE, free);
-STAT_ATTR(FREE_REMOTE, free_remote);
-STAT_ATTR(FLUSH_FREE_LIST, flush_free_list);
-STAT_ATTR(FLUSH_FREE_LIST_OBJECTS, flush_free_list_objects);
-STAT_ATTR(FLUSH_FREE_LIST_REMOTE, flush_free_list_remote);
-STAT_ATTR(FLUSH_SLAB_PARTIAL, flush_slab_partial);
-STAT_ATTR(FLUSH_SLAB_FREE, flush_slab_free);
-STAT_ATTR(FLUSH_RFREE_LIST, flush_rfree_list);
-STAT_ATTR(FLUSH_RFREE_LIST_OBJECTS, flush_rfree_list_objects);
-STAT_ATTR(CLAIM_REMOTE_LIST, claim_remote_list);
-STAT_ATTR(CLAIM_REMOTE_LIST_OBJECTS, claim_remote_list_objects);
+STAT_ATTR(ALLOC,			alloc);
+STAT_ATTR(ALLOC_SLAB_FILL,		alloc_slab_fill);
+STAT_ATTR(ALLOC_SLAB_NEW,		alloc_slab_new);
+STAT_ATTR(FREE,				free);
+STAT_ATTR(FREE_REMOTE,			free_remote);
+STAT_ATTR(FLUSH_FREE_LIST,		flush_free_list);
+STAT_ATTR(FLUSH_FREE_LIST_OBJECTS,	flush_free_list_objects);
+STAT_ATTR(FLUSH_FREE_LIST_REMOTE,	flush_free_list_remote);
+STAT_ATTR(FLUSH_SLAB_PARTIAL,		flush_slab_partial);
+STAT_ATTR(FLUSH_SLAB_FREE,		flush_slab_free);
+STAT_ATTR(FLUSH_RFREE_LIST,		flush_rfree_list);
+STAT_ATTR(FLUSH_RFREE_LIST_OBJECTS,	flush_rfree_list_objects);
+STAT_ATTR(CLAIM_REMOTE_LIST,		claim_remote_list);
+STAT_ATTR(CLAIM_REMOTE_LIST_OBJECTS,	claim_remote_list_objects);
 #endif
 
 static struct attribute *slab_attrs[] = {
-	&slab_size_attr.attr,
-	&object_size_attr.attr,
-	&objs_per_slab_attr.attr,
-	&order_attr.attr,
-	&objects_attr.attr,
-	&total_objects_attr.attr,
-	&slabs_attr.attr,
-	&ctor_attr.attr,
-	&align_attr.attr,
-	&hwcache_align_attr.attr,
-	&reclaim_account_attr.attr,
-	&destroy_by_rcu_attr.attr,
-	&red_zone_attr.attr,
-	&poison_attr.attr,
-	&store_user_attr.attr,
-	&hiwater_attr.attr,
-	&freebatch_attr.attr,
+
+	&                 slab_size_attr.attr,
+	&               object_size_attr.attr,
+	&             objs_per_slab_attr.attr,
+	&                     order_attr.attr,
+	&                   objects_attr.attr,
+	&             total_objects_attr.attr,
+	&                     slabs_attr.attr,
+	&                      ctor_attr.attr,
+	&                     align_attr.attr,
+	&             hwcache_align_attr.attr,
+	&           reclaim_account_attr.attr,
+	&            destroy_by_rcu_attr.attr,
+	&                  red_zone_attr.attr,
+	&                    poison_attr.attr,
+	&                store_user_attr.attr,
+	&                   hiwater_attr.attr,
+	&                 freebatch_attr.attr,
 #ifdef CONFIG_ZONE_DMA
-	&cache_dma_attr.attr,
+	&                 cache_dma_attr.attr,
 #endif
 #ifdef CONFIG_SLQB_STATS
-	&alloc_attr.attr,
-	&alloc_slab_fill_attr.attr,
-	&alloc_slab_new_attr.attr,
-	&free_attr.attr,
-	&free_remote_attr.attr,
-	&flush_free_list_attr.attr,
-	&flush_free_list_objects_attr.attr,
-	&flush_free_list_remote_attr.attr,
-	&flush_slab_partial_attr.attr,
-	&flush_slab_free_attr.attr,
-	&flush_rfree_list_attr.attr,
-	&flush_rfree_list_objects_attr.attr,
-	&claim_remote_list_attr.attr,
-	&claim_remote_list_objects_attr.attr,
+	&                     alloc_attr.attr,
+	&           alloc_slab_fill_attr.attr,
+	&            alloc_slab_new_attr.attr,
+	&                      free_attr.attr,
+	&               free_remote_attr.attr,
+	&           flush_free_list_attr.attr,
+	&   flush_free_list_objects_attr.attr,
+	&    flush_free_list_remote_attr.attr,
+	&        flush_slab_partial_attr.attr,
+	&           flush_slab_free_attr.attr,
+	&          flush_rfree_list_attr.attr,
+	&  flush_rfree_list_objects_attr.attr,
+	&         claim_remote_list_attr.attr,
+	& claim_remote_list_objects_attr.attr,
 #endif
 	NULL
 };
 
 static struct attribute_group slab_attr_group = {
-	.attrs = slab_attrs,
+	.attrs		= slab_attrs,
 };
 
 static ssize_t slab_attr_show(struct kobject *kobj,
@@ -3389,13 +3415,13 @@ static void kmem_cache_release(struct ko
 }
 
 static struct sysfs_ops slab_sysfs_ops = {
-	.show = slab_attr_show,
-	.store = slab_attr_store,
+	.show		= slab_attr_show,
+	.store		= slab_attr_store,
 };
 
 static struct kobj_type slab_ktype = {
-	.sysfs_ops = &slab_sysfs_ops,
-	.release = kmem_cache_release
+	.sysfs_ops	= &slab_sysfs_ops,
+	.release	= kmem_cache_release
 };
 
 static int uevent_filter(struct kset *kset, struct kobject *kobj)
@@ -3413,7 +3439,7 @@ static struct kset_uevent_ops slab_ueven
 
 static struct kset *slab_kset;
 
-static int sysfs_available __read_mostly = 0;
+static int sysfs_available __read_mostly;
 
 static int sysfs_slab_add(struct kmem_cache *s)
 {
@@ -3462,9 +3488,11 @@ static int __init slab_sysfs_init(void)
 
 	list_for_each_entry(s, &slab_caches, list) {
 		err = sysfs_slab_add(s);
-		if (err)
-			printk(KERN_ERR "SLQB: Unable to add boot slab %s"
-						" to sysfs\n", s->name);
+		if (!err)
+			continue;
+
+		printk(KERN_ERR
+			"SLQB: Unable to add boot slab %s to sysfs\n", s->name);
 	}
 
 	up_write(&slqb_lock);

WARNING: multiple messages have this Message-ID (diff)
From: Ingo Molnar <mingo@elte.hu>
To: Nick Piggin <npiggin@suse.de>
Cc: Pekka Enberg <penberg@cs.helsinki.fi>,
	Linux Memory Management List <linux-mm@kvack.org>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	Lin Ming <ming.m.lin@intel.com>,
	"Zhang, Yanmin" <yanmin_zhang@linux.intel.com>,
	Christoph Lameter <clameter@engr.sgi.com>
Subject: Re: [patch] SLQB slab allocator
Date: Wed, 21 Jan 2009 18:40:10 +0100	[thread overview]
Message-ID: <20090121174010.GA2998@elte.hu> (raw)
In-Reply-To: <20090121165600.GA16695@wotan.suse.de>


* Nick Piggin <npiggin@suse.de> wrote:

> On Wed, Jan 21, 2009 at 03:59:18PM +0100, Ingo Molnar wrote:
> > 
> > Mind if i nitpick a bit about minor style issues? Since this is going to 
> > be the next Linux SLAB allocator we might as well do it perfectly :-)
> 
> Well here is an incremental patch which should get most of the issues 
> you pointed out, most of the sane ones that checkpatch pointed out, and 
> a few of my own ;)

here's an incremental one ontop of your incremental patch, enhancing some 
more issues. I now find the code very readable! :-)

( in case you are wondering about the placement of bit_spinlock.h - that 
  file needs fixing, just move it to the top of the file and see the build 
  break. But that's a separate patch.)

	Ingo

------------------->
Subject: slbq: cleanup
From: Ingo Molnar <mingo@elte.hu>
Date: Wed Jan 21 18:10:20 CET 2009

mm/slqb.o:

   text	   data	    bss	    dec	    hex	filename
  17655	  54159	 200456	 272270	  4278e	slqb.o.before
  17653	  54159	 200456	 272268	  4278c	slqb.o.after

Signed-off-by: Ingo Molnar <mingo@elte.hu>
---
 mm/slqb.c |  588 ++++++++++++++++++++++++++++++++------------------------------
 1 file changed, 308 insertions(+), 280 deletions(-)

Index: linux/mm/slqb.c
===================================================================
--- linux.orig/mm/slqb.c
+++ linux/mm/slqb.c
@@ -7,19 +7,20 @@
  * Using ideas and code from mm/slab.c, mm/slob.c, and mm/slub.c.
  */
 
-#include <linux/mm.h>
-#include <linux/module.h>
-#include <linux/bit_spinlock.h>
 #include <linux/interrupt.h>
-#include <linux/bitops.h>
-#include <linux/slab.h>
-#include <linux/seq_file.h>
-#include <linux/cpu.h>
-#include <linux/cpuset.h>
 #include <linux/mempolicy.h>
-#include <linux/ctype.h>
 #include <linux/kallsyms.h>
+#include <linux/seq_file.h>
+#include <linux/bitops.h>
+#include <linux/cpuset.h>
 #include <linux/memory.h>
+#include <linux/module.h>
+#include <linux/ctype.h>
+#include <linux/slab.h>
+#include <linux/cpu.h>
+#include <linux/mm.h>
+
+#include <linux/bit_spinlock.h>
 
 /*
  * TODO
@@ -40,14 +41,14 @@
 struct slqb_page {
 	union {
 		struct {
-			unsigned long	flags;		/* mandatory */
-			atomic_t	_count;		/* mandatory */
-			unsigned int	inuse;		/* Nr of objects */
+			unsigned long	flags;		/* mandatory	   */
+			atomic_t	_count;		/* mandatory	   */
+			unsigned int	inuse;		/* Nr of objects   */
 			struct kmem_cache_list *list;	/* Pointer to list */
-			void		 **freelist;	/* LIFO freelist */
+			void		 **freelist;	/* LIFO freelist   */
 			union {
-				struct list_head lru;	/* misc. list */
-				struct rcu_head rcu_head; /* for rcu freeing */
+				struct list_head lru;	/* misc. list	   */
+				struct rcu_head	rcu_head; /* for rcu freeing */
 			};
 		};
 		struct page page;
@@ -120,16 +121,16 @@ static inline int slab_freebatch(struct 
  * - There is no remote free queue. Nodes don't free objects, CPUs do.
  */
 
-static inline void slqb_stat_inc(struct kmem_cache_list *list,
-				enum stat_item si)
+static inline void
+slqb_stat_inc(struct kmem_cache_list *list, enum stat_item si)
 {
 #ifdef CONFIG_SLQB_STATS
 	list->stats[si]++;
 #endif
 }
 
-static inline void slqb_stat_add(struct kmem_cache_list *list,
-				enum stat_item si, unsigned long nr)
+static inline void
+slqb_stat_add(struct kmem_cache_list *list, enum stat_item si, unsigned long nr)
 {
 #ifdef CONFIG_SLQB_STATS
 	list->stats[si] += nr;
@@ -196,12 +197,12 @@ static inline void __free_slqb_pages(str
 #ifdef CONFIG_SLQB_DEBUG
 static inline int slab_debug(struct kmem_cache *s)
 {
-	return (s->flags &
+	return s->flags &
 			(SLAB_DEBUG_FREE |
 			 SLAB_RED_ZONE |
 			 SLAB_POISON |
 			 SLAB_STORE_USER |
-			 SLAB_TRACE));
+			 SLAB_TRACE);
 }
 static inline int slab_poison(struct kmem_cache *s)
 {
@@ -574,34 +575,34 @@ static int check_bytes_and_report(struct
  * Object layout:
  *
  * object address
- * 	Bytes of the object to be managed.
- * 	If the freepointer may overlay the object then the free
- * 	pointer is the first word of the object.
+ *	Bytes of the object to be managed.
+ *	If the freepointer may overlay the object then the free
+ *	pointer is the first word of the object.
  *
- * 	Poisoning uses 0x6b (POISON_FREE) and the last byte is
- * 	0xa5 (POISON_END)
+ *	Poisoning uses 0x6b (POISON_FREE) and the last byte is
+ *	0xa5 (POISON_END)
  *
  * object + s->objsize
- * 	Padding to reach word boundary. This is also used for Redzoning.
- * 	Padding is extended by another word if Redzoning is enabled and
- * 	objsize == inuse.
+ *	Padding to reach word boundary. This is also used for Redzoning.
+ *	Padding is extended by another word if Redzoning is enabled and
+ *	objsize == inuse.
  *
- * 	We fill with 0xbb (RED_INACTIVE) for inactive objects and with
- * 	0xcc (RED_ACTIVE) for objects in use.
+ *	We fill with 0xbb (RED_INACTIVE) for inactive objects and with
+ *	0xcc (RED_ACTIVE) for objects in use.
  *
  * object + s->inuse
- * 	Meta data starts here.
+ *	Meta data starts here.
  *
- * 	A. Free pointer (if we cannot overwrite object on free)
- * 	B. Tracking data for SLAB_STORE_USER
- * 	C. Padding to reach required alignment boundary or at mininum
- * 		one word if debuggin is on to be able to detect writes
- * 		before the word boundary.
+ *	A. Free pointer (if we cannot overwrite object on free)
+ *	B. Tracking data for SLAB_STORE_USER
+ *	C. Padding to reach required alignment boundary or at mininum
+ *		one word if debuggin is on to be able to detect writes
+ *		before the word boundary.
  *
  *	Padding is done using 0x5a (POISON_INUSE)
  *
  * object + s->size
- * 	Nothing is used beyond s->size.
+ *	Nothing is used beyond s->size.
  */
 
 static int check_pad_bytes(struct kmem_cache *s, struct slqb_page *page, u8 *p)
@@ -717,25 +718,26 @@ static int check_slab(struct kmem_cache 
 	return 1;
 }
 
-static void trace(struct kmem_cache *s, struct slqb_page *page,
-			void *object, int alloc)
+static void
+trace(struct kmem_cache *s, struct slqb_page *page, void *object, int alloc)
 {
-	if (s->flags & SLAB_TRACE) {
-		printk(KERN_INFO "TRACE %s %s 0x%p inuse=%d fp=0x%p\n",
-			s->name,
-			alloc ? "alloc" : "free",
-			object, page->inuse,
-			page->freelist);
+	if (likely(!(s->flags & SLAB_TRACE)))
+		return;
 
-		if (!alloc)
-			print_section("Object", (void *)object, s->objsize);
+	printk(KERN_INFO "TRACE %s %s 0x%p inuse=%d fp=0x%p\n",
+		s->name,
+		alloc ? "alloc" : "free",
+		object, page->inuse,
+		page->freelist);
 
-		dump_stack();
-	}
+	if (!alloc)
+		print_section("Object", (void *)object, s->objsize);
+
+	dump_stack();
 }
 
-static void setup_object_debug(struct kmem_cache *s, struct slqb_page *page,
-				void *object)
+static void
+setup_object_debug(struct kmem_cache *s, struct slqb_page *page, void *object)
 {
 	if (!slab_debug(s))
 		return;
@@ -747,11 +749,10 @@ static void setup_object_debug(struct km
 	init_tracking(s, object);
 }
 
-static int alloc_debug_processing(struct kmem_cache *s,
-					void *object, void *addr)
+static int
+alloc_debug_processing(struct kmem_cache *s, void *object, void *addr)
 {
-	struct slqb_page *page;
-	page = virt_to_head_slqb_page(object);
+	struct slqb_page *page = virt_to_head_slqb_page(object);
 
 	if (!check_slab(s, page))
 		goto bad;
@@ -767,6 +768,7 @@ static int alloc_debug_processing(struct
 	/* Success perform special debug activities for allocs */
 	if (s->flags & SLAB_STORE_USER)
 		set_track(s, object, TRACK_ALLOC, addr);
+
 	trace(s, page, object, 1);
 	init_object(s, object, 1);
 	return 1;
@@ -775,11 +777,9 @@ bad:
 	return 0;
 }
 
-static int free_debug_processing(struct kmem_cache *s,
-					void *object, void *addr)
+static int free_debug_processing(struct kmem_cache *s, void *object, void *addr)
 {
-	struct slqb_page *page;
-	page = virt_to_head_slqb_page(object);
+	struct slqb_page *page = virt_to_head_slqb_page(object);
 
 	if (!check_slab(s, page))
 		goto fail;
@@ -870,29 +870,34 @@ static unsigned long kmem_cache_flags(un
 				void (*ctor)(void *))
 {
 	/*
-	 * Enable debugging if selected on the kernel commandline.
+	 * Enable debugging if selected on the kernel commandline:
 	 */
-	if (slqb_debug && (!slqb_debug_slabs ||
-	    strncmp(slqb_debug_slabs, name,
-		strlen(slqb_debug_slabs)) == 0))
-			flags |= slqb_debug;
+
+	if (!slqb_debug)
+		return flags;
+
+	if (slqb_debug_slabs)
+		return flags | slqb_debug;
+
+	if (!strncmp(slqb_debug_slabs, name, strlen(slqb_debug_slabs)))
+		return flags | slqb_debug;
 
 	return flags;
 }
 #else
-static inline void setup_object_debug(struct kmem_cache *s,
-			struct slqb_page *page, void *object)
+static inline void
+setup_object_debug(struct kmem_cache *s, struct slqb_page *page, void *object)
 {
 }
 
-static inline int alloc_debug_processing(struct kmem_cache *s,
-			void *object, void *addr)
+static inline int
+alloc_debug_processing(struct kmem_cache *s, void *object, void *addr)
 {
 	return 0;
 }
 
-static inline int free_debug_processing(struct kmem_cache *s,
-			void *object, void *addr)
+static inline int
+free_debug_processing(struct kmem_cache *s, void *object, void *addr)
 {
 	return 0;
 }
@@ -903,7 +908,7 @@ static inline int slab_pad_check(struct 
 }
 
 static inline int check_object(struct kmem_cache *s, struct slqb_page *page,
-			void *object, int active)
+			       void *object, int active)
 {
 	return 1;
 }
@@ -924,11 +929,11 @@ static const int slqb_debug = 0;
 /*
  * allocate a new slab (return its corresponding struct slqb_page)
  */
-static struct slqb_page *allocate_slab(struct kmem_cache *s,
-					gfp_t flags, int node)
+static struct slqb_page *
+allocate_slab(struct kmem_cache *s, gfp_t flags, int node)
 {
-	struct slqb_page *page;
 	int pages = 1 << s->order;
+	struct slqb_page *page;
 
 	flags |= s->allocflags;
 
@@ -947,8 +952,8 @@ static struct slqb_page *allocate_slab(s
 /*
  * Called once for each object on a new slab page
  */
-static void setup_object(struct kmem_cache *s,
-				struct slqb_page *page, void *object)
+static void
+setup_object(struct kmem_cache *s, struct slqb_page *page, void *object)
 {
 	setup_object_debug(s, page, object);
 	if (unlikely(s->ctor))
@@ -958,8 +963,8 @@ static void setup_object(struct kmem_cac
 /*
  * Allocate a new slab, set up its object list.
  */
-static struct slqb_page *new_slab_page(struct kmem_cache *s,
-				gfp_t flags, int node, unsigned int colour)
+static struct slqb_page *
+new_slab_page(struct kmem_cache *s, gfp_t flags, int node, unsigned int colour)
 {
 	struct slqb_page *page;
 	void *start;
@@ -1030,6 +1035,7 @@ static void rcu_free_slab(struct rcu_hea
 static void free_slab(struct kmem_cache *s, struct slqb_page *page)
 {
 	VM_BUG_ON(page->inuse);
+
 	if (unlikely(s->flags & SLAB_DESTROY_BY_RCU))
 		call_rcu(&page->rcu_head, rcu_free_slab);
 	else
@@ -1060,12 +1066,14 @@ static int free_object_to_page(struct km
 		l->nr_slabs--;
 		free_slab(s, page);
 		slqb_stat_inc(l, FLUSH_SLAB_FREE);
+
 		return 1;
 
 	} else if (page->inuse + 1 == s->objects) {
 		l->nr_partial++;
 		list_add(&page->lru, &l->partial);
 		slqb_stat_inc(l, FLUSH_SLAB_PARTIAL);
+
 		return 0;
 	}
 	return 0;
@@ -1146,8 +1154,8 @@ static void flush_free_list_all(struct k
  * Caller must be the owner CPU in the case of per-CPU list, or hold the node's
  * list_lock in the case of per-node list.
  */
-static void claim_remote_free_list(struct kmem_cache *s,
-					struct kmem_cache_list *l)
+static void
+claim_remote_free_list(struct kmem_cache *s, struct kmem_cache_list *l)
 {
 	void **head, **tail;
 	int nr;
@@ -1192,8 +1200,8 @@ static void claim_remote_free_list(struc
  * Caller must be the owner CPU in the case of per-CPU list, or hold the node's
  * list_lock in the case of per-node list.
  */
-static __always_inline void *__cache_list_get_object(struct kmem_cache *s,
-						struct kmem_cache_list *l)
+static __always_inline void *
+__cache_list_get_object(struct kmem_cache *s, struct kmem_cache_list *l)
 {
 	void *object;
 
@@ -1243,8 +1251,8 @@ static __always_inline void *__cache_lis
  * Caller must be the owner CPU in the case of per-CPU list, or hold the node's
  * list_lock in the case of per-node list.
  */
-static noinline void *__cache_list_get_page(struct kmem_cache *s,
-				struct kmem_cache_list *l)
+static noinline void *
+__cache_list_get_page(struct kmem_cache *s, struct kmem_cache_list *l)
 {
 	struct slqb_page *page;
 	void *object;
@@ -1282,12 +1290,12 @@ static noinline void *__cache_list_get_p
  *
  * Must be called with interrupts disabled.
  */
-static noinline void *__slab_alloc_page(struct kmem_cache *s,
-				gfp_t gfpflags, int node)
+static noinline void *
+__slab_alloc_page(struct kmem_cache *s, gfp_t gfpflags, int node)
 {
-	struct slqb_page *page;
 	struct kmem_cache_list *l;
 	struct kmem_cache_cpu *c;
+	struct slqb_page *page;
 	unsigned int colour;
 	void *object;
 
@@ -1347,15 +1355,19 @@ static noinline void *__slab_alloc_page(
 }
 
 #ifdef CONFIG_NUMA
-static noinline int alternate_nid(struct kmem_cache *s,
-				gfp_t gfpflags, int node)
+static noinline int
+alternate_nid(struct kmem_cache *s, gfp_t gfpflags, int node)
 {
 	if (in_interrupt() || (gfpflags & __GFP_THISNODE))
 		return node;
-	if (cpuset_do_slab_mem_spread() && (s->flags & SLAB_MEM_SPREAD))
+
+	if (cpuset_do_slab_mem_spread() && (s->flags & SLAB_MEM_SPREAD)) {
 		return cpuset_mem_spread_node();
-	else if (current->mempolicy)
-		return slab_node(current->mempolicy);
+	} else {
+		if (current->mempolicy)
+			return slab_node(current->mempolicy);
+	}
+
 	return node;
 }
 
@@ -1365,8 +1377,8 @@ static noinline int alternate_nid(struct
  *
  * Must be called with interrupts disabled.
  */
-static noinline void *__remote_slab_alloc(struct kmem_cache *s,
-				gfp_t gfpflags, int node)
+static noinline void *
+__remote_slab_alloc(struct kmem_cache *s, gfp_t gfpflags, int node)
 {
 	struct kmem_cache_node *n;
 	struct kmem_cache_list *l;
@@ -1375,6 +1387,7 @@ static noinline void *__remote_slab_allo
 	n = s->node[node];
 	if (unlikely(!n)) /* node has no memory */
 		return NULL;
+
 	l = &n->list;
 
 	spin_lock(&n->list_lock);
@@ -1389,7 +1402,9 @@ static noinline void *__remote_slab_allo
 	}
 	if (likely(object))
 		slqb_stat_inc(l, ALLOC);
+
 	spin_unlock(&n->list_lock);
+
 	return object;
 }
 #endif
@@ -1399,12 +1414,12 @@ static noinline void *__remote_slab_allo
  *
  * Must be called with interrupts disabled.
  */
-static __always_inline void *__slab_alloc(struct kmem_cache *s,
-				gfp_t gfpflags, int node)
+static __always_inline void *
+__slab_alloc(struct kmem_cache *s, gfp_t gfpflags, int node)
 {
-	void *object;
-	struct kmem_cache_cpu *c;
 	struct kmem_cache_list *l;
+	struct kmem_cache_cpu *c;
+	void *object;
 
 #ifdef CONFIG_NUMA
 	if (unlikely(node != -1) && unlikely(node != numa_node_id()))
@@ -1422,6 +1437,7 @@ static __always_inline void *__slab_allo
 	}
 	if (likely(object))
 		slqb_stat_inc(l, ALLOC);
+
 	return object;
 }
 
@@ -1429,11 +1445,11 @@ static __always_inline void *__slab_allo
  * Perform some interrupts-on processing around the main allocation path
  * (debug checking and memset()ing).
  */
-static __always_inline void *slab_alloc(struct kmem_cache *s,
-				gfp_t gfpflags, int node, void *addr)
+static __always_inline void *
+slab_alloc(struct kmem_cache *s, gfp_t gfpflags, int node, void *addr)
 {
-	void *object;
 	unsigned long flags;
+	void *object;
 
 again:
 	local_irq_save(flags);
@@ -1451,10 +1467,11 @@ again:
 	return object;
 }
 
-static __always_inline void *__kmem_cache_alloc(struct kmem_cache *s,
-				gfp_t gfpflags, void *caller)
+static __always_inline void *
+__kmem_cache_alloc(struct kmem_cache *s, gfp_t gfpflags, void *caller)
 {
 	int node = -1;
+
 #ifdef CONFIG_NUMA
 	if (unlikely(current->flags & (PF_SPREAD_SLAB | PF_MEMPOLICY)))
 		node = alternate_nid(s, gfpflags, node);
@@ -1487,8 +1504,8 @@ EXPORT_SYMBOL(kmem_cache_alloc_node);
  *
  * Must be called with interrupts disabled.
  */
-static void flush_remote_free_cache(struct kmem_cache *s,
-				struct kmem_cache_cpu *c)
+static void
+flush_remote_free_cache(struct kmem_cache *s, struct kmem_cache_cpu *c)
 {
 	struct kmlist *src;
 	struct kmem_cache_list *dst;
@@ -1575,12 +1592,12 @@ static noinline void slab_free_to_remote
  *
  * Must be called with interrupts disabled.
  */
-static __always_inline void __slab_free(struct kmem_cache *s,
-				struct slqb_page *page, void *object)
+static __always_inline void
+__slab_free(struct kmem_cache *s, struct slqb_page *page, void *object)
 {
-	struct kmem_cache_cpu *c;
-	struct kmem_cache_list *l;
 	int thiscpu = smp_processor_id();
+	struct kmem_cache_list *l;
+	struct kmem_cache_cpu *c;
 
 	c = get_cpu_slab(s, thiscpu);
 	l = &c->list;
@@ -1619,8 +1636,8 @@ static __always_inline void __slab_free(
  * Perform some interrupts-on processing around the main freeing path
  * (debug checking).
  */
-static __always_inline void slab_free(struct kmem_cache *s,
-				struct slqb_page *page, void *object)
+static __always_inline void
+slab_free(struct kmem_cache *s, struct slqb_page *page, void *object)
 {
 	unsigned long flags;
 
@@ -1683,7 +1700,7 @@ static int slab_order(int size, int max_
 	return order;
 }
 
-static int calculate_order(int size)
+static int calc_order(int size)
 {
 	int order;
 
@@ -1710,8 +1727,8 @@ static int calculate_order(int size)
 /*
  * Figure out what the alignment of the objects will be.
  */
-static unsigned long calculate_alignment(unsigned long flags,
-				unsigned long align, unsigned long size)
+static unsigned long
+calc_alignment(unsigned long flags, unsigned long align, unsigned long size)
 {
 	/*
 	 * If the user wants hardware cache aligned objects then follow that
@@ -1737,18 +1754,18 @@ static unsigned long calculate_alignment
 static void init_kmem_cache_list(struct kmem_cache *s,
 				struct kmem_cache_list *l)
 {
-	l->cache		= s;
-	l->freelist.nr		= 0;
-	l->freelist.head	= NULL;
-	l->freelist.tail	= NULL;
-	l->nr_partial		= 0;
-	l->nr_slabs		= 0;
+	l->cache		 = s;
+	l->freelist.nr		 = 0;
+	l->freelist.head	 = NULL;
+	l->freelist.tail	 = NULL;
+	l->nr_partial		 = 0;
+	l->nr_slabs		 = 0;
 	INIT_LIST_HEAD(&l->partial);
 
 #ifdef CONFIG_SMP
-	l->remote_free_check	= 0;
+	l->remote_free_check	 = 0;
 	spin_lock_init(&l->remote_free.lock);
-	l->remote_free.list.nr	= 0;
+	l->remote_free.list.nr	 = 0;
 	l->remote_free.list.head = NULL;
 	l->remote_free.list.tail = NULL;
 #endif
@@ -1758,8 +1775,7 @@ static void init_kmem_cache_list(struct 
 #endif
 }
 
-static void init_kmem_cache_cpu(struct kmem_cache *s,
-				struct kmem_cache_cpu *c)
+static void init_kmem_cache_cpu(struct kmem_cache *s, struct kmem_cache_cpu *c)
 {
 	init_kmem_cache_list(s, &c->list);
 
@@ -1773,8 +1789,8 @@ static void init_kmem_cache_cpu(struct k
 }
 
 #ifdef CONFIG_NUMA
-static void init_kmem_cache_node(struct kmem_cache *s,
-				struct kmem_cache_node *n)
+static void
+init_kmem_cache_node(struct kmem_cache *s, struct kmem_cache_node *n)
 {
 	spin_lock_init(&n->list_lock);
 	init_kmem_cache_list(s, &n->list);
@@ -1804,8 +1820,8 @@ static struct kmem_cache_node kmem_node_
 #endif
 
 #ifdef CONFIG_SMP
-static struct kmem_cache_cpu *alloc_kmem_cache_cpu(struct kmem_cache *s,
-				int cpu)
+static struct kmem_cache_cpu *
+alloc_kmem_cache_cpu(struct kmem_cache *s, int cpu)
 {
 	struct kmem_cache_cpu *c;
 
@@ -1910,7 +1926,7 @@ static int alloc_kmem_cache_nodes(struct
 #endif
 
 /*
- * calculate_sizes() determines the order and the distribution of data within
+ * calc_sizes() determines the order and the distribution of data within
  * a slab object.
  */
 static int calculate_sizes(struct kmem_cache *s)
@@ -1991,7 +2007,7 @@ static int calculate_sizes(struct kmem_c
 	 * user specified and the dynamic determination of cache line size
 	 * on bootup.
 	 */
-	align = calculate_alignment(flags, align, s->objsize);
+	align = calc_alignment(flags, align, s->objsize);
 
 	/*
 	 * SLQB stores one object immediately after another beginning from
@@ -2000,7 +2016,7 @@ static int calculate_sizes(struct kmem_c
 	 */
 	size = ALIGN(size, align);
 	s->size = size;
-	s->order = calculate_order(size);
+	s->order = calc_order(size);
 
 	if (s->order < 0)
 		return 0;
@@ -2210,38 +2226,38 @@ static struct kmem_cache *open_kmalloc_c
  * fls.
  */
 static s8 size_index[24] __cacheline_aligned = {
-	3,	/* 8 */
-	4,	/* 16 */
-	5,	/* 24 */
-	5,	/* 32 */
-	6,	/* 40 */
-	6,	/* 48 */
-	6,	/* 56 */
-	6,	/* 64 */
+	 3,	/* 8 */
+	 4,	/* 16 */
+	 5,	/* 24 */
+	 5,	/* 32 */
+	 6,	/* 40 */
+	 6,	/* 48 */
+	 6,	/* 56 */
+	 6,	/* 64 */
 #if L1_CACHE_BYTES < 64
-	1,	/* 72 */
-	1,	/* 80 */
-	1,	/* 88 */
-	1,	/* 96 */
+	 1,	/* 72 */
+	 1,	/* 80 */
+	 1,	/* 88 */
+	 1,	/* 96 */
 #else
-	7,
-	7,
-	7,
-	7,
-#endif
-	7,	/* 104 */
-	7,	/* 112 */
-	7,	/* 120 */
-	7,	/* 128 */
+	 7,
+	 7,
+	 7,
+	 7,
+#endif
+	 7,	/* 104 */
+	 7,	/* 112 */
+	 7,	/* 120 */
+	 7,	/* 128 */
 #if L1_CACHE_BYTES < 128
-	2,	/* 136 */
-	2,	/* 144 */
-	2,	/* 152 */
-	2,	/* 160 */
-	2,	/* 168 */
-	2,	/* 176 */
-	2,	/* 184 */
-	2	/* 192 */
+	 2,	/* 136 */
+	 2,	/* 144 */
+	 2,	/* 152 */
+	 2,	/* 160 */
+	 2,	/* 168 */
+	 2,	/* 176 */
+	 2,	/* 184 */
+	 2	/* 192 */
 #else
 	-1,
 	-1,
@@ -2278,9 +2294,8 @@ static struct kmem_cache *get_slab(size_
 
 void *__kmalloc(size_t size, gfp_t flags)
 {
-	struct kmem_cache *s;
+	struct kmem_cache *s = get_slab(size, flags);
 
-	s = get_slab(size, flags);
 	if (unlikely(ZERO_OR_NULL_PTR(s)))
 		return s;
 
@@ -2291,9 +2306,8 @@ EXPORT_SYMBOL(__kmalloc);
 #ifdef CONFIG_NUMA
 void *__kmalloc_node(size_t size, gfp_t flags, int node)
 {
-	struct kmem_cache *s;
+	struct kmem_cache *s = get_slab(size, flags);
 
-	s = get_slab(size, flags);
 	if (unlikely(ZERO_OR_NULL_PTR(s)))
 		return s;
 
@@ -2340,8 +2354,8 @@ EXPORT_SYMBOL(ksize);
 
 void kfree(const void *object)
 {
-	struct kmem_cache *s;
 	struct slqb_page *page;
+	struct kmem_cache *s;
 
 	if (unlikely(ZERO_OR_NULL_PTR(object)))
 		return;
@@ -2371,21 +2385,21 @@ static void kmem_cache_trim_percpu(void 
 
 int kmem_cache_shrink(struct kmem_cache *s)
 {
-#ifdef CONFIG_NUMA
-	int node;
-#endif
-
 	on_each_cpu(kmem_cache_trim_percpu, s, 1);
 
 #ifdef CONFIG_NUMA
-	for_each_node_state(node, N_NORMAL_MEMORY) {
-		struct kmem_cache_node *n = s->node[node];
-		struct kmem_cache_list *l = &n->list;
+	{
+		int node;
 
-		spin_lock_irq(&n->list_lock);
-		claim_remote_free_list(s, l);
-		flush_free_list(s, l);
-		spin_unlock_irq(&n->list_lock);
+		for_each_node_state(node, N_NORMAL_MEMORY) {
+			struct kmem_cache_node *n = s->node[node];
+			struct kmem_cache_list *l = &n->list;
+
+			spin_lock_irq(&n->list_lock);
+			claim_remote_free_list(s, l);
+			flush_free_list(s, l);
+			spin_unlock_irq(&n->list_lock);
+		}
 	}
 #endif
 
@@ -2397,8 +2411,8 @@ EXPORT_SYMBOL(kmem_cache_shrink);
 static void kmem_cache_reap_percpu(void *arg)
 {
 	int cpu = smp_processor_id();
-	struct kmem_cache *s;
 	long phase = (long)arg;
+	struct kmem_cache *s;
 
 	list_for_each_entry(s, &slab_caches, list) {
 		struct kmem_cache_cpu *c = get_cpu_slab(s, cpu);
@@ -2442,8 +2456,7 @@ static void kmem_cache_reap(void)
 
 static void cache_trim_worker(struct work_struct *w)
 {
-	struct delayed_work *work =
-		container_of(w, struct delayed_work, work);
+	struct delayed_work *work;
 	struct kmem_cache *s;
 	int node;
 
@@ -2469,6 +2482,7 @@ static void cache_trim_worker(struct wor
 
 	up_read(&slqb_lock);
 out:
+	work = container_of(w, struct delayed_work, work);
 	schedule_delayed_work(work, round_jiffies_relative(3*HZ));
 }
 
@@ -2587,8 +2601,8 @@ static int slab_memory_callback(struct n
 
 void __init kmem_cache_init(void)
 {
-	int i;
 	unsigned int flags = SLAB_HWCACHE_ALIGN|SLAB_PANIC;
+	int i;
 
 	/*
 	 * All the ifdefs are rather ugly here, but it's just the setup code,
@@ -2719,8 +2733,9 @@ void __init kmem_cache_init(void)
 /*
  * Some basic slab creation sanity checks
  */
-static int kmem_cache_create_ok(const char *name, size_t size,
-		size_t align, unsigned long flags)
+static int
+kmem_cache_create_ok(const char *name, size_t size,
+		     size_t align, unsigned long flags)
 {
 	struct kmem_cache *tmp;
 
@@ -2773,8 +2788,9 @@ static int kmem_cache_create_ok(const ch
 	return 1;
 }
 
-struct kmem_cache *kmem_cache_create(const char *name, size_t size,
-		size_t align, unsigned long flags, void (*ctor)(void *))
+struct kmem_cache *
+kmem_cache_create(const char *name, size_t size,
+		  size_t align, unsigned long flags, void (*ctor)(void *))
 {
 	struct kmem_cache *s;
 
@@ -2804,7 +2820,7 @@ EXPORT_SYMBOL(kmem_cache_create);
  * necessary.
  */
 static int __cpuinit slab_cpuup_callback(struct notifier_block *nfb,
-				unsigned long action, void *hcpu)
+					 unsigned long action, void *hcpu)
 {
 	long cpu = (long)hcpu;
 	struct kmem_cache *s;
@@ -2855,7 +2871,7 @@ static int __cpuinit slab_cpuup_callback
 }
 
 static struct notifier_block __cpuinitdata slab_notifier = {
-	.notifier_call = slab_cpuup_callback
+	.notifier_call	= slab_cpuup_callback
 };
 
 #endif
@@ -2878,11 +2894,10 @@ void *__kmalloc_track_caller(size_t size
 }
 
 void *__kmalloc_node_track_caller(size_t size, gfp_t flags, int node,
-				unsigned long caller)
+				  unsigned long caller)
 {
-	struct kmem_cache *s;
+	struct kmem_cache *s = get_slab(size, flags);
 
-	s = get_slab(size, flags);
 	if (unlikely(ZERO_OR_NULL_PTR(s)))
 		return s;
 
@@ -2892,12 +2907,17 @@ void *__kmalloc_node_track_caller(size_t
 
 #if defined(CONFIG_SLQB_SYSFS) || defined(CONFIG_SLABINFO)
 struct stats_gather {
-	struct kmem_cache *s;
-	spinlock_t lock;
-	unsigned long nr_slabs;
-	unsigned long nr_partial;
-	unsigned long nr_inuse;
-	unsigned long nr_objects;
+	/*
+	 * Serialize on_each_cpu() instances updating the summary
+	 * stats structure:
+	 */
+	spinlock_t		lock;
+
+	struct kmem_cache	*s;
+	unsigned long		nr_slabs;
+	unsigned long		nr_partial;
+	unsigned long		nr_inuse;
+	unsigned long		nr_objects;
 
 #ifdef CONFIG_SLQB_STATS
 	unsigned long stats[NR_SLQB_STAT_ITEMS];
@@ -2915,25 +2935,25 @@ static void __gather_stats(void *arg)
 	struct kmem_cache_cpu *c = get_cpu_slab(s, cpu);
 	struct kmem_cache_list *l = &c->list;
 	struct slqb_page *page;
-#ifdef CONFIG_SLQB_STATS
-	int i;
-#endif
 
 	nr_slabs = l->nr_slabs;
 	nr_partial = l->nr_partial;
 	nr_inuse = (nr_slabs - nr_partial) * s->objects;
 
-	list_for_each_entry(page, &l->partial, lru) {
+	list_for_each_entry(page, &l->partial, lru)
 		nr_inuse += page->inuse;
-	}
 
 	spin_lock(&gather->lock);
 	gather->nr_slabs += nr_slabs;
 	gather->nr_partial += nr_partial;
 	gather->nr_inuse += nr_inuse;
 #ifdef CONFIG_SLQB_STATS
-	for (i = 0; i < NR_SLQB_STAT_ITEMS; i++)
-		gather->stats[i] += l->stats[i];
+	{
+		int i;
+
+		for (i = 0; i < NR_SLQB_STAT_ITEMS; i++)
+			gather->stats[i] += l->stats[i];
+	}
 #endif
 	spin_unlock(&gather->lock);
 }
@@ -2956,14 +2976,15 @@ static void gather_stats(struct kmem_cac
 		struct kmem_cache_list *l = &n->list;
 		struct slqb_page *page;
 		unsigned long flags;
-#ifdef CONFIG_SLQB_STATS
-		int i;
-#endif
 
 		spin_lock_irqsave(&n->list_lock, flags);
 #ifdef CONFIG_SLQB_STATS
-		for (i = 0; i < NR_SLQB_STAT_ITEMS; i++)
-			stats->stats[i] += l->stats[i];
+		{
+			int i;
+
+			for (i = 0; i < NR_SLQB_STAT_ITEMS; i++)
+				stats->stats[i] += l->stats[i];
+		}
 #endif
 		stats->nr_slabs += l->nr_slabs;
 		stats->nr_partial += l->nr_partial;
@@ -3039,14 +3060,15 @@ static int s_show(struct seq_file *m, vo
 	seq_printf(m, " : slabdata %6lu %6lu %6lu", stats.nr_slabs,
 			stats.nr_slabs, 0UL);
 	seq_putc(m, '\n');
+
 	return 0;
 }
 
 static const struct seq_operations slabinfo_op = {
-	.start = s_start,
-	.next = s_next,
-	.stop = s_stop,
-	.show = s_show,
+	.start		= s_start,
+	.next		= s_next,
+	.stop		= s_stop,
+	.show		= s_show,
 };
 
 static int slabinfo_open(struct inode *inode, struct file *file)
@@ -3205,8 +3227,8 @@ static ssize_t store_user_show(struct km
 }
 SLAB_ATTR_RO(store_user);
 
-static ssize_t hiwater_store(struct kmem_cache *s,
-				const char *buf, size_t length)
+static ssize_t
+hiwater_store(struct kmem_cache *s, const char *buf, size_t length)
 {
 	long hiwater;
 	int err;
@@ -3229,8 +3251,8 @@ static ssize_t hiwater_show(struct kmem_
 }
 SLAB_ATTR(hiwater);
 
-static ssize_t freebatch_store(struct kmem_cache *s,
-				const char *buf, size_t length)
+static ssize_t
+freebatch_store(struct kmem_cache *s, const char *buf, size_t length)
 {
 	long freebatch;
 	int err;
@@ -3258,91 +3280,95 @@ static int show_stat(struct kmem_cache *
 {
 	struct stats_gather stats;
 	int len;
-#ifdef CONFIG_SMP
-	int cpu;
-#endif
 
 	gather_stats(s, &stats);
 
 	len = sprintf(buf, "%lu", stats.stats[si]);
 
 #ifdef CONFIG_SMP
-	for_each_online_cpu(cpu) {
-		struct kmem_cache_cpu *c = get_cpu_slab(s, cpu);
-		struct kmem_cache_list *l = &c->list;
+	{
+		int cpu;
 
-		if (len < PAGE_SIZE - 20)
-			len += sprintf(buf+len, " C%d=%lu", cpu, l->stats[si]);
+		for_each_online_cpu(cpu) {
+			struct kmem_cache_cpu *c = get_cpu_slab(s, cpu);
+			struct kmem_cache_list *l = &c->list;
+
+			if (len < PAGE_SIZE - 20) {
+				len += sprintf(buf+len,
+						" C%d=%lu", cpu, l->stats[si]);
+			}
+		}
 	}
 #endif
 	return len + sprintf(buf + len, "\n");
 }
 
-#define STAT_ATTR(si, text) 					\
+#define STAT_ATTR(si, text)					\
 static ssize_t text##_show(struct kmem_cache *s, char *buf)	\
 {								\
 	return show_stat(s, buf, si);				\
 }								\
 SLAB_ATTR_RO(text);						\
 
-STAT_ATTR(ALLOC, alloc);
-STAT_ATTR(ALLOC_SLAB_FILL, alloc_slab_fill);
-STAT_ATTR(ALLOC_SLAB_NEW, alloc_slab_new);
-STAT_ATTR(FREE, free);
-STAT_ATTR(FREE_REMOTE, free_remote);
-STAT_ATTR(FLUSH_FREE_LIST, flush_free_list);
-STAT_ATTR(FLUSH_FREE_LIST_OBJECTS, flush_free_list_objects);
-STAT_ATTR(FLUSH_FREE_LIST_REMOTE, flush_free_list_remote);
-STAT_ATTR(FLUSH_SLAB_PARTIAL, flush_slab_partial);
-STAT_ATTR(FLUSH_SLAB_FREE, flush_slab_free);
-STAT_ATTR(FLUSH_RFREE_LIST, flush_rfree_list);
-STAT_ATTR(FLUSH_RFREE_LIST_OBJECTS, flush_rfree_list_objects);
-STAT_ATTR(CLAIM_REMOTE_LIST, claim_remote_list);
-STAT_ATTR(CLAIM_REMOTE_LIST_OBJECTS, claim_remote_list_objects);
+STAT_ATTR(ALLOC,			alloc);
+STAT_ATTR(ALLOC_SLAB_FILL,		alloc_slab_fill);
+STAT_ATTR(ALLOC_SLAB_NEW,		alloc_slab_new);
+STAT_ATTR(FREE,				free);
+STAT_ATTR(FREE_REMOTE,			free_remote);
+STAT_ATTR(FLUSH_FREE_LIST,		flush_free_list);
+STAT_ATTR(FLUSH_FREE_LIST_OBJECTS,	flush_free_list_objects);
+STAT_ATTR(FLUSH_FREE_LIST_REMOTE,	flush_free_list_remote);
+STAT_ATTR(FLUSH_SLAB_PARTIAL,		flush_slab_partial);
+STAT_ATTR(FLUSH_SLAB_FREE,		flush_slab_free);
+STAT_ATTR(FLUSH_RFREE_LIST,		flush_rfree_list);
+STAT_ATTR(FLUSH_RFREE_LIST_OBJECTS,	flush_rfree_list_objects);
+STAT_ATTR(CLAIM_REMOTE_LIST,		claim_remote_list);
+STAT_ATTR(CLAIM_REMOTE_LIST_OBJECTS,	claim_remote_list_objects);
 #endif
 
 static struct attribute *slab_attrs[] = {
-	&slab_size_attr.attr,
-	&object_size_attr.attr,
-	&objs_per_slab_attr.attr,
-	&order_attr.attr,
-	&objects_attr.attr,
-	&total_objects_attr.attr,
-	&slabs_attr.attr,
-	&ctor_attr.attr,
-	&align_attr.attr,
-	&hwcache_align_attr.attr,
-	&reclaim_account_attr.attr,
-	&destroy_by_rcu_attr.attr,
-	&red_zone_attr.attr,
-	&poison_attr.attr,
-	&store_user_attr.attr,
-	&hiwater_attr.attr,
-	&freebatch_attr.attr,
+
+	&                 slab_size_attr.attr,
+	&               object_size_attr.attr,
+	&             objs_per_slab_attr.attr,
+	&                     order_attr.attr,
+	&                   objects_attr.attr,
+	&             total_objects_attr.attr,
+	&                     slabs_attr.attr,
+	&                      ctor_attr.attr,
+	&                     align_attr.attr,
+	&             hwcache_align_attr.attr,
+	&           reclaim_account_attr.attr,
+	&            destroy_by_rcu_attr.attr,
+	&                  red_zone_attr.attr,
+	&                    poison_attr.attr,
+	&                store_user_attr.attr,
+	&                   hiwater_attr.attr,
+	&                 freebatch_attr.attr,
 #ifdef CONFIG_ZONE_DMA
-	&cache_dma_attr.attr,
+	&                 cache_dma_attr.attr,
 #endif
 #ifdef CONFIG_SLQB_STATS
-	&alloc_attr.attr,
-	&alloc_slab_fill_attr.attr,
-	&alloc_slab_new_attr.attr,
-	&free_attr.attr,
-	&free_remote_attr.attr,
-	&flush_free_list_attr.attr,
-	&flush_free_list_objects_attr.attr,
-	&flush_free_list_remote_attr.attr,
-	&flush_slab_partial_attr.attr,
-	&flush_slab_free_attr.attr,
-	&flush_rfree_list_attr.attr,
-	&flush_rfree_list_objects_attr.attr,
-	&claim_remote_list_attr.attr,
-	&claim_remote_list_objects_attr.attr,
+	&                     alloc_attr.attr,
+	&           alloc_slab_fill_attr.attr,
+	&            alloc_slab_new_attr.attr,
+	&                      free_attr.attr,
+	&               free_remote_attr.attr,
+	&           flush_free_list_attr.attr,
+	&   flush_free_list_objects_attr.attr,
+	&    flush_free_list_remote_attr.attr,
+	&        flush_slab_partial_attr.attr,
+	&           flush_slab_free_attr.attr,
+	&          flush_rfree_list_attr.attr,
+	&  flush_rfree_list_objects_attr.attr,
+	&         claim_remote_list_attr.attr,
+	& claim_remote_list_objects_attr.attr,
 #endif
 	NULL
 };
 
 static struct attribute_group slab_attr_group = {
-	.attrs = slab_attrs,
+	.attrs		= slab_attrs,
 };
 
 static ssize_t slab_attr_show(struct kobject *kobj,
@@ -3389,13 +3415,13 @@ static void kmem_cache_release(struct ko
 }
 
 static struct sysfs_ops slab_sysfs_ops = {
-	.show = slab_attr_show,
-	.store = slab_attr_store,
+	.show		= slab_attr_show,
+	.store		= slab_attr_store,
 };
 
 static struct kobj_type slab_ktype = {
-	.sysfs_ops = &slab_sysfs_ops,
-	.release = kmem_cache_release
+	.sysfs_ops	= &slab_sysfs_ops,
+	.release	= kmem_cache_release
 };
 
 static int uevent_filter(struct kset *kset, struct kobject *kobj)
@@ -3413,7 +3439,7 @@ static struct kset_uevent_ops slab_ueven
 
 static struct kset *slab_kset;
 
-static int sysfs_available __read_mostly = 0;
+static int sysfs_available __read_mostly;
 
 static int sysfs_slab_add(struct kmem_cache *s)
 {
@@ -3462,9 +3488,11 @@ static int __init slab_sysfs_init(void)
 
 	list_for_each_entry(s, &slab_caches, list) {
 		err = sysfs_slab_add(s);
-		if (err)
-			printk(KERN_ERR "SLQB: Unable to add boot slab %s"
-						" to sysfs\n", s->name);
+		if (!err)
+			continue;
+
+		printk(KERN_ERR
+			"SLQB: Unable to add boot slab %s to sysfs\n", s->name);
 	}
 
 	up_write(&slqb_lock);

--
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:[~2009-01-21 17:40 UTC|newest]

Thread overview: 197+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-01-21 14:30 [patch] SLQB slab allocator Nick Piggin
2009-01-21 14:30 ` Nick Piggin
2009-01-21 14:59 ` Ingo Molnar
2009-01-21 14:59   ` Ingo Molnar
2009-01-21 15:17   ` Nick Piggin
2009-01-21 15:17     ` Nick Piggin
2009-01-21 16:56   ` Nick Piggin
2009-01-21 16:56     ` Nick Piggin
2009-01-21 17:40     ` Ingo Molnar [this message]
2009-01-21 17:40       ` Ingo Molnar
2009-01-23  3:31       ` Nick Piggin
2009-01-23  3:31         ` Nick Piggin
2009-01-23  6:14       ` Nick Piggin
2009-01-23  6:14         ` Nick Piggin
2009-01-23 12:56         ` Ingo Molnar
2009-01-23 12:56           ` Ingo Molnar
2009-01-21 17:59 ` Joe Perches
2009-01-21 17:59   ` Joe Perches
2009-01-23  3:35   ` Nick Piggin
2009-01-23  3:35     ` Nick Piggin
2009-01-23  4:00     ` Joe Perches
2009-01-23  4:00       ` Joe Perches
2009-01-21 18:10 ` Hugh Dickins
2009-01-21 18:10   ` Hugh Dickins
2009-01-22 10:01   ` Pekka Enberg
2009-01-22 10:01     ` Pekka Enberg
2009-01-22 12:47     ` Hugh Dickins
2009-01-22 12:47       ` Hugh Dickins
2009-01-23 14:23       ` Hugh Dickins
2009-01-23 14:23         ` Hugh Dickins
2009-01-23 14:30         ` Pekka Enberg
2009-01-23 14:30           ` Pekka Enberg
2009-02-02  3:38         ` Zhang, Yanmin
2009-02-02  3:38           ` Zhang, Yanmin
2009-02-02  9:00           ` Pekka Enberg
2009-02-02  9:00             ` Pekka Enberg
2009-02-02 15:00             ` Christoph Lameter
2009-02-02 15:00               ` Christoph Lameter
2009-02-03  1:34               ` Zhang, Yanmin
2009-02-03  1:34                 ` Zhang, Yanmin
2009-02-03  7:29             ` Zhang, Yanmin
2009-02-03  7:29               ` Zhang, Yanmin
2009-02-03 12:18               ` Hugh Dickins
2009-02-03 12:18                 ` Hugh Dickins
2009-02-04  2:21                 ` Zhang, Yanmin
2009-02-04  2:21                   ` Zhang, Yanmin
2009-02-05 19:04                   ` Hugh Dickins
2009-02-05 19:04                     ` Hugh Dickins
2009-02-06  0:47                     ` Zhang, Yanmin
2009-02-06  0:47                       ` Zhang, Yanmin
2009-02-06  8:57                     ` Pekka Enberg
2009-02-06  8:57                       ` Pekka Enberg
2009-02-06 12:33                       ` Hugh Dickins
2009-02-06 12:33                         ` Hugh Dickins
2009-02-10  8:56                         ` Zhang, Yanmin
2009-02-10  8:56                           ` Zhang, Yanmin
2009-02-02 11:50           ` Hugh Dickins
2009-01-23  3:55   ` Nick Piggin
2009-01-23  3:55     ` Nick Piggin
2009-01-23 13:57     ` Hugh Dickins
2009-01-23 13:57       ` Hugh Dickins
2009-01-22  8:45 ` Zhang, Yanmin
2009-01-22  8:45   ` Zhang, Yanmin
2009-01-23  3:57   ` Nick Piggin
2009-01-23  3:57     ` Nick Piggin
2009-01-23  9:00   ` Nick Piggin
2009-01-23  9:00     ` Nick Piggin
2009-01-23 13:34     ` Hugh Dickins
2009-01-23 13:34       ` Hugh Dickins
2009-01-23 13:44       ` Nick Piggin
2009-01-23 13:44         ` Nick Piggin
2009-01-23  9:55 ` Andi Kleen
2009-01-23  9:55   ` Andi Kleen
2009-01-23 10:13   ` Pekka Enberg
2009-01-23 10:13     ` Pekka Enberg
2009-01-23 11:25   ` Nick Piggin
2009-01-23 11:25     ` Nick Piggin
2009-01-23 11:57     ` Andi Kleen
2009-01-23 11:57       ` Andi Kleen
2009-01-23 13:18       ` Nick Piggin
2009-01-23 13:18         ` Nick Piggin
2009-01-23 14:04         ` Andi Kleen
2009-01-23 14:04           ` Andi Kleen
2009-01-23 14:27           ` Nick Piggin
2009-01-23 14:27             ` Nick Piggin
2009-01-23 15:06             ` Andi Kleen
2009-01-23 15:06               ` Andi Kleen
2009-01-23 15:15               ` Nick Piggin
2009-01-23 15:15                 ` Nick Piggin
2009-01-23 12:55   ` Nick Piggin
2009-01-23 12:55     ` Nick Piggin
  -- strict thread matches above, loose matches on Subject: below --
2009-01-14  9:04 Nick Piggin
2009-01-14  9:04 ` Nick Piggin
2009-01-14 10:53 ` Pekka Enberg
2009-01-14 10:53   ` Pekka Enberg
2009-01-14 11:47   ` Nick Piggin
2009-01-14 11:47     ` Nick Piggin
2009-01-14 13:44     ` Pekka Enberg
2009-01-14 13:44       ` Pekka Enberg
2009-01-14 14:22       ` Nick Piggin
2009-01-14 14:22         ` Nick Piggin
2009-01-14 14:45         ` Pekka Enberg
2009-01-14 14:45           ` Pekka Enberg
2009-01-14 15:09           ` Nick Piggin
2009-01-14 15:09             ` Nick Piggin
2009-01-14 15:22             ` Nick Piggin
2009-01-14 15:22               ` Nick Piggin
2009-01-14 15:30               ` Pekka Enberg
2009-01-14 15:30                 ` Pekka Enberg
2009-01-14 15:59                 ` Nick Piggin
2009-01-14 15:59                   ` Nick Piggin
2009-01-14 18:40                   ` Christoph Lameter
2009-01-14 18:40                     ` Christoph Lameter
2009-01-15  6:19                     ` Nick Piggin
2009-01-15  6:19                       ` Nick Piggin
2009-01-15 20:47                       ` Christoph Lameter
2009-01-15 20:47                         ` Christoph Lameter
2009-01-16  3:43                         ` Nick Piggin
2009-01-16  3:43                           ` Nick Piggin
2009-01-16 21:25                           ` Christoph Lameter
2009-01-16 21:25                             ` Christoph Lameter
2009-01-19  6:18                             ` Nick Piggin
2009-01-19  6:18                               ` Nick Piggin
2009-01-22  0:13                               ` Christoph Lameter
2009-01-22  0:13                                 ` Christoph Lameter
2009-01-22  9:27                                 ` Pekka Enberg
2009-01-22  9:27                                   ` Pekka Enberg
2009-01-22  9:30                                   ` Zhang, Yanmin
2009-01-22  9:30                                     ` Zhang, Yanmin
2009-01-22  9:33                                     ` Pekka Enberg
2009-01-22  9:33                                       ` Pekka Enberg
2009-01-23 15:32                                       ` Christoph Lameter
2009-01-23 15:32                                         ` Christoph Lameter
2009-01-23 15:37                                         ` Pekka Enberg
2009-01-23 15:37                                           ` Pekka Enberg
2009-01-23 15:42                                           ` Christoph Lameter
2009-01-23 15:42                                             ` Christoph Lameter
2009-01-23 15:32                                   ` Christoph Lameter
2009-01-23 15:32                                     ` Christoph Lameter
2009-01-23  4:09                                 ` Nick Piggin
2009-01-23  4:09                                   ` Nick Piggin
2009-01-23 15:41                                   ` Christoph Lameter
2009-01-23 15:41                                     ` Christoph Lameter
2009-01-23 15:53                                     ` Nick Piggin
2009-01-23 15:53                                       ` Nick Piggin
2009-01-26 17:28                                       ` Christoph Lameter
2009-01-26 17:28                                         ` Christoph Lameter
2009-02-03  1:53                                         ` Nick Piggin
2009-02-03  1:53                                           ` Nick Piggin
2009-02-03 17:33                                           ` Christoph Lameter
2009-02-03 17:33                                             ` Christoph Lameter
2009-02-03 18:42                                             ` Pekka Enberg
2009-02-03 18:42                                               ` Pekka Enberg
2009-02-03 18:47                                               ` Pekka Enberg
2009-02-03 18:47                                                 ` Pekka Enberg
2009-02-04  4:22                                                 ` Nick Piggin
2009-02-04  4:22                                                   ` Nick Piggin
2009-02-04 20:09                                                   ` Christoph Lameter
2009-02-04 20:09                                                     ` Christoph Lameter
2009-02-05  3:18                                                     ` Nick Piggin
2009-02-05  3:18                                                       ` Nick Piggin
2009-02-04 20:10                                               ` Christoph Lameter
2009-02-04 20:10                                                 ` Christoph Lameter
2009-02-05  3:14                                                 ` Nick Piggin
2009-02-05  3:14                                                   ` Nick Piggin
2009-02-04  4:07                                             ` Nick Piggin
2009-02-04  4:07                                               ` Nick Piggin
2009-01-14 18:01             ` Christoph Lameter
2009-01-14 18:01               ` Christoph Lameter
2009-01-15  6:03               ` Nick Piggin
2009-01-15  6:03                 ` Nick Piggin
2009-01-15 20:05                 ` Christoph Lameter
2009-01-15 20:05                   ` Christoph Lameter
2009-01-16  3:19                   ` Nick Piggin
2009-01-16  3:19                     ` Nick Piggin
2009-01-16 21:07                     ` Christoph Lameter
2009-01-16 21:07                       ` Christoph Lameter
2009-01-19  5:47                       ` Nick Piggin
2009-01-19  5:47                         ` Nick Piggin
2009-01-22  0:19                         ` Christoph Lameter
2009-01-22  0:19                           ` Christoph Lameter
2009-01-23  4:17                           ` Nick Piggin
2009-01-23  4:17                             ` Nick Piggin
2009-01-23 15:52                             ` Christoph Lameter
2009-01-23 15:52                               ` Christoph Lameter
2009-01-23 16:10                               ` Nick Piggin
2009-01-23 16:10                                 ` Nick Piggin
2009-01-23 17:09                                 ` Nick Piggin
2009-01-23 17:09                                   ` Nick Piggin
2009-01-26 17:46                                   ` Christoph Lameter
2009-01-26 17:46                                     ` Christoph Lameter
2009-02-03  1:42                                     ` Nick Piggin
2009-02-03  1:42                                       ` Nick Piggin
2009-01-26 17:34                                 ` Christoph Lameter
2009-01-26 17:34                                   ` Christoph Lameter
2009-02-03  1:48                                   ` Nick Piggin
2009-02-03  1:48                                     ` Nick Piggin

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=20090121174010.GA2998@elte.hu \
    --to=mingo@elte.hu \
    --cc=akpm@linux-foundation.org \
    --cc=clameter@engr.sgi.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=ming.m.lin@intel.com \
    --cc=npiggin@suse.de \
    --cc=penberg@cs.helsinki.fi \
    --cc=yanmin_zhang@linux.intel.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.