Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754680AbbBTS2W (ORCPT ); Fri, 20 Feb 2015 13:28:22 -0500 Received: from mail-wi0-f182.google.com ([209.85.212.182]:53090 "EHLO mail-wi0-f182.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754561AbbBTS2V (ORCPT ); Fri, 20 Feb 2015 13:28:21 -0500 Message-ID: <54E77CC0.5030401@colorfullife.com> Date: Fri, 20 Feb 2015 19:28:16 +0100 From: Manfred Spraul User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.4.0 MIME-Version: 1.0 To: Oleg Nesterov , Peter Zijlstra CC: "Paul E. McKenney" , Kirill Tkhai , linux-kernel@vger.kernel.org, Ingo Molnar , Josh Poimboeuf Subject: Re: [PATCH 2/2] [PATCH] sched: Add smp_rmb() in task rq locking cycles References: <20150217104516.12144.85911.stgit@tkhai> <1424170021.5749.22.camel@tkhai> <20150217121258.GM5029@twins.programming.kicks-ass.net> <20150217130523.GV24151@twins.programming.kicks-ass.net> <20150217160532.GW4166@linux.vnet.ibm.com> <20150217183636.GR5029@twins.programming.kicks-ass.net> <20150217215231.GK4166@linux.vnet.ibm.com> <20150218155904.GA27687@redhat.com> <54E4E479.4050003@colorfullife.com> <20150218224317.GC5029@twins.programming.kicks-ass.net> <20150219141905.GA11018@redhat.com> In-Reply-To: <20150219141905.GA11018@redhat.com> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1361 Lines: 52 Hi Oleg, my example was bad, let's continue with your example. And: If sem_lock() needs another smp_xmb(), then we must add it: Some apps do not have a user space hot path, i.e. it seems that on some setups, we have millions of calls per second. If there is a race, then it will happen. I've tried to merge your example: > > int X = 0, Y = 0; > > void func(void) > { > bool ll = rand(); > > if (ll) { > spin_lock(&local); > if (!spin_is_locked(&global)) > goto done; > spin_unlock(&local); > } > ll = false; > spin_lock(&global); > spin_unlock_wait(&local); > done: > smp_rmb(); <<<<<<<<<<<<<<< > BUG_ON(X != Y); > > ++X; ++Y; > > if (ll) > spin_unlock(&local); > else > spin_unlock(&global); > } I agree, we need the smp_rmb(). I'll write a patch. > We need the full barrier to serialize STORE's as well, but probably we can > rely on control dependancy and thus we only need rmb(). Do we need a full barrier or not? I don't manage to create a proper line of reasoning. -- Manfred -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/