[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <0000013c4ef61783-2778b0f1-fdc1-421b-9d3e-ccd68d528115-000000@email.amazonses.com>
Date: Fri, 18 Jan 2013 18:40:16 +0000
From: Christoph Lameter <cl@...ux.com>
To: Steven Rostedt <rostedt@...dmis.org>
cc: LKML <linux-kernel@...r.kernel.org>, linux-mm <linux-mm@...ck.org>,
Andrew Morton <akpm@...ux-foundation.org>,
Pekka Enberg <penberg@...nel.org>,
Matt Mackall <mpm@...enic.com>,
Thomas Gleixner <tglx@...utronix.de>,
RT <linux-rt-users@...r.kernel.org>,
Clark Williams <clark@...hat.com>,
John Kacur <jkacur@...il.com>,
"Luis Claudio R. Goncalves" <lgoncalv@...hat.com>
Subject: Re: [RFC][PATCH v3] slub: Keep page and object in sync in
slab_alloc_node()
On Fri, 18 Jan 2013, Steven Rostedt wrote:
> @@ -2337,7 +2337,10 @@ redo:
> * 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.
> + *
> + * But we need to sync the setting of page and object.
> */
> + preempt_disable();
> c = __this_cpu_ptr(s->cpu_slab);
>
> /*
> @@ -2347,10 +2350,14 @@ redo:
> * linked list in between.
> */
> tid = c->tid;
The fetching of the tid is the only critical thing here. If the tid is
retrieved from the right cpu then the cmpxchg will fail if any changes
occured to freelist or the page variable.
The tid can be retrieved without disabling preemption through
this_cpu_read().
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists