Thread (32 messages) 32 messages, 4 authors, 2013-01-21

Re: [RFC][PATCH] slub: Check for page NULL before doing the node_match check

From: Christoph Lameter <hidden>
Date: 2013-01-17 21:51:13
Also in: linux-mm, lkml

On Thu, 17 Jan 2013, Steven Rostedt wrote:
quoted
 	c->tid = next_tid(c->tid);
-	c->page = NULL;
 	c->freelist = NULL;
+	c->page = NULL;
I'm assuming that this is to deal with the same CPU being able to touch
the code?

If so, it requires "barrier()". If this can affect other CPUs, then we
need a smp_wmb() here, and smp_rmb() where it matters.
This is dealing with the same cpu being interrupted. Some of these
segments are in interrupt disable sections so they are not affected.

The above is a section where interrupts are enabled so it needs the
barriers.
quoted
@@ -2227,8 +2227,8 @@ redo:
 	if (unlikely(!node_match(page, node))) {
 		stat(s, ALLOC_NODE_MISMATCH);
 		deactivate_slab(s, page, c->freelist);
-		c->page = NULL;
 		c->freelist = NULL;
+		c->page = NULL;
 		goto new_slab;
 	}
Interrupts are disabled so we do not need to change anything here.

quoted
@@ -2239,8 +2239,8 @@ redo:
 	 */
 	if (unlikely(!pfmemalloc_match(page, gfpflags))) {
 		deactivate_slab(s, page, c->freelist);
-		c->page = NULL;
 		c->freelist = NULL;
+		c->page = NULL;
 		goto new_slab;
 	}
Ditto which leaves us with:

Index: linux/mm/slub.c
===================================================================
--- linux.orig/mm/slub.c	2013-01-17 15:49:57.417491975 -0600
+++ linux/mm/slub.c	2013-01-17 15:50:49.010287150 -0600
@@ -1993,8 +1993,9 @@ static inline void flush_slab(struct kme
 	deactivate_slab(s, c->page, c->freelist);

 	c->tid = next_tid(c->tid);
-	c->page = NULL;
 	c->freelist = NULL;
+	barrier();
+	c->page = NULL;
 }

 /*

--
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>
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help