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>