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: Steven Rostedt <rostedt@goodmis.org>
Date: 2013-01-17 23:10:48
Also in: linux-mm, lkml

On Thu, 2013-01-17 at 17:46 -0500, Steven Rostedt wrote:
On Thu, 2013-01-17 at 21:51 +0000, Christoph Lameter wrote:
quoted
This is dealing with the same cpu being interrupted. Some of these
segments are in interrupt disable sections so they are not affected.
Except that we are not always on the same CPU. Now I'm looking at
mainline (non modified by -rt):
Because there's also nothing to keep page related to object either, we
may just need to do:

From slab_alloc_node():

	/*
	 * Must read kmem_cache cpu data via this cpu ptr. Preemption is
	 * enabled. We may switch back and forth between cpus while
	 * reading from one cpu area. That does not matter as long
	 * as we end up on the original cpu again when doing the cmpxchg.
	 */
	local_irq_save(flags);
	c = __this_cpu_ptr(s->cpu_slab);

	/*
	 * The transaction ids are globally unique per cpu and per operation on
	 * a per cpu queue. Thus they can be guarantee that the cmpxchg_double
	 * occurs on the right processor and that there was no operation on the
	 * linked list in between.
	 */
	tid = c->tid;
	barrier();

	object = c->freelist;
	page = c->page;
	r = !object || !node_match(page, node);
	local_irq_restore(flags);

	if (unlikely(r)) {
		object = __slab_alloc(s, gfpflags, node, addr, c);
I was thinking at first we could use preempt_disable(), but if an
interrupt comes in after we set object = c->freelist, and changes
c->page, then we disassociate the freelist and page again.

-- Steve


--
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