Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1162298AbbKEQmb (ORCPT ); Thu, 5 Nov 2015 11:42:31 -0500 Received: from g1t6223.austin.hp.com ([15.73.96.124]:52915 "EHLO g1t6223.austin.hp.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1161598AbbKEQma (ORCPT ); Thu, 5 Nov 2015 11:42:30 -0500 Message-ID: <563B86F3.9080703@hpe.com> Date: Thu, 05 Nov 2015 11:42:27 -0500 From: Waiman Long User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:10.0.12) Gecko/20130109 Thunderbird/10.0.12 MIME-Version: 1.0 To: Peter Zijlstra CC: Ingo Molnar , Thomas Gleixner , "H. Peter Anvin" , x86@kernel.org, linux-kernel@vger.kernel.org, Scott J Norton , Douglas Hatch , Davidlohr Bueso Subject: Re: [PATCH tip/locking/core v9 2/6] locking/qspinlock: prefetch next node cacheline References: <1446247597-61863-1-git-send-email-Waiman.Long@hpe.com> <1446247597-61863-3-git-send-email-Waiman.Long@hpe.com> <20151102163626.GU3604@twins.programming.kicks-ass.net> <20151102225404.GY11639@twins.programming.kicks-ass.net> In-Reply-To: <20151102225404.GY11639@twins.programming.kicks-ass.net> Content-Type: text/plain; charset=ISO-8859-1; 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: 1817 Lines: 55 On 11/02/2015 05:54 PM, Peter Zijlstra wrote: > On Mon, Nov 02, 2015 at 05:36:26PM +0100, Peter Zijlstra wrote: >> On Fri, Oct 30, 2015 at 07:26:33PM -0400, Waiman Long wrote: >>> @@ -426,6 +437,15 @@ queue: >>> cpu_relax(); >>> >>> /* >>> + * If the next pointer is defined, we are not tail anymore. >>> + * In this case, claim the spinlock& release the MCS lock. >>> + */ >>> + if (next) { >>> + set_locked(lock); >>> + goto mcs_unlock; >>> + } >>> + >>> + /* >>> * claim the lock: >>> * >>> * n,0,0 -> 0,0,1 : lock, uncontended >>> @@ -458,6 +478,7 @@ queue: >>> while (!(next = READ_ONCE(node->next))) >>> cpu_relax(); >>> >>> +mcs_unlock: >>> arch_mcs_spin_unlock_contended(&next->locked); >>> pv_kick_node(lock, next); >>> >> This however appears an independent optimization. Is it worth it? Would >> we not already have observed a val != tail in this case? At which point >> we're just adding extra code for no gain. >> >> That is, if we observe @next, must we then not also observe val != tail? > Not quite; the ordering is the other way around. If we observe next we > must also observe val != tail. But its a narrow thing. Is it really > worth it? If we observe next, we will observe val != tail sooner or later. It is not possible for it to clear the tail code in the lock. The tail xchg will guarantee that. Another alternative is to do something like + if (!next) while (!(next = READ_ONCE(node->next))) cpu_relax(); Please let me know if that is more acceptable to you. Cheers, Longman -- 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/