From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756855AbbCMQ33 (ORCPT ); Fri, 13 Mar 2015 12:29:29 -0400 Received: from resqmta-ch2-06v.sys.comcast.net ([69.252.207.38]:48086 "EHLO resqmta-ch2-06v.sys.comcast.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755965AbbCMQ3Z (ORCPT ); Fri, 13 Mar 2015 12:29:25 -0400 Date: Fri, 13 Mar 2015 11:29:23 -0500 (CDT) From: Christoph Lameter X-X-Sender: cl@gentwo.org To: Mark Rutland cc: linux-kernel@vger.kernel.org, Andrew Morton , Catalin Marinas , David Rientjes , Jesper Dangaard Brouer , Joonsoo Kim , Linus Torvalds , Pekka Enberg , Steve Capper Subject: Re: [PATCH] mm/slub: fix lockups on PREEMPT && !SMP kernels In-Reply-To: <1426261632-8911-1-git-send-email-mark.rutland@arm.com> Message-ID: References: <1426261632-8911-1-git-send-email-mark.rutland@arm.com> Content-Type: TEXT/PLAIN; charset=US-ASCII Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, 13 Mar 2015, Mark Rutland wrote: > */ > - do { > - tid = this_cpu_read(s->cpu_slab->tid); > - c = raw_cpu_ptr(s->cpu_slab); > - } while (IS_ENABLED(CONFIG_PREEMPT) && unlikely(tid != c->tid)); > + c = raw_cpu_ptr(s->cpu_slab); > + tid = READ_ONCE(c->tid); > Ok that works for the !SMP case. What about SMP and PREEMPT now? And yes code like this was deemed safe for years and the race condition is very subtle and difficult to trigger (also given that PREEMPT is rarely used these days).