From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751364AbbJLQ07 (ORCPT ); Mon, 12 Oct 2015 12:26:59 -0400 Received: from casper.infradead.org ([85.118.1.10]:55782 "EHLO casper.infradead.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750748AbbJLQ05 (ORCPT ); Mon, 12 Oct 2015 12:26:57 -0400 Date: Mon, 12 Oct 2015 18:26:53 +0200 From: Peter Zijlstra To: Boqun Feng Cc: "Paul E. McKenney" , Oleg Nesterov , linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, Jonathan Corbet , Michal Hocko , David Howells , Linus Torvalds , Will Deacon Subject: Re: [PATCH] Documentation: Remove misleading examples of the barriers in wake_*() Message-ID: <20151012162653.GN3604@twins.programming.kicks-ass.net> References: <20150910021612.GC18494@fixme-laptop.cn.ibm.com> <20150910175557.GA20640@redhat.com> <20150917130125.GL3816@twins.programming.kicks-ass.net> <20150924132121.GA1814@fixme-laptop.cn.ibm.com> <20151006160650.GT3604@twins.programming.kicks-ass.net> <20151011152640.GC27351@fixme-laptop.cn.ibm.com> <20151012004044.GZ3910@linux.vnet.ibm.com> <20151012090636.GF27351@fixme-laptop.cn.ibm.com> <20151012115438.GM3816@twins.programming.kicks-ass.net> <20151012130924.GH27351@fixme-laptop.cn.ibm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20151012130924.GH27351@fixme-laptop.cn.ibm.com> User-Agent: Mutt/1.5.21 (2012-12-30) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, Oct 12, 2015 at 09:09:24PM +0800, Boqun Feng wrote: > On Mon, Oct 12, 2015 at 01:54:38PM +0200, Peter Zijlstra wrote: > > On Mon, Oct 12, 2015 at 05:06:36PM +0800, Boqun Feng wrote: > > > Understood. > > > > > > But, IMO, the position of this section is already misleading: > > > > > > (*) Implicit kernel memory barriers. > > > - Locking functions. > > > - Interrupt disabling functions. > > > ->- Sleep and wake-up functions.<- > > > - Miscellaneous functions. > > > > > > I read it as that sleep and wake-up functions provide some kernel memory > > > barriers which we can use *externally*(outside sleep/wakeup themselves). > > > > I think it is useful to state that the primitives handle the ordering > > between the waker and wakee wrt the 'blocking' state. > > > > I agree that's useful, however, the 'blocking' state is something > internal for sleep and wakeup, right? Not entirely; its also the @cond thing in wait queues. IE: for (;;) set_current_state(TASK_INTERRUPTIBLE); if (@cond) break; schedule(); } __set_current_state(TASK_RUNNING); vs. @cond = true; wake_up_process(p); So we guarantee that 'p' will see the @cond stores IF it does the wakeup. (If it does not, ie. 'p' wasn't sleeping, any guarantee is out the window). > Not sure whether the users of > wake_up() and wait_event() will care much about this or they need to > understand that detailedly to use wake_up() and wait_event() correctly. I think its mostly natural; but it explains why you don't have to do: wait_event(wq, @cond); vs. @cond = true; smp_wmb(); wake_up(wq); (or worse...) > > But I've not put much thought into wording. I wanted to finish process > > order 'comment' patch first. > > Of course. Actually your 'comment' patch is the reason why I think this > section may be removed. Yes, that is another option, referring to the comment, once that's sorted.