From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S964998AbbI2NIL (ORCPT ); Tue, 29 Sep 2015 09:08:11 -0400 Received: from bombadil.infradead.org ([198.137.202.9]:35416 "EHLO bombadil.infradead.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S964984AbbI2NIE (ORCPT ); Tue, 29 Sep 2015 09:08:04 -0400 Date: Tue, 29 Sep 2015 15:02:01 +0200 From: Peter Zijlstra To: Frederic Weisbecker Cc: mingo@kernel.org, linux-kernel@vger.kernel.org, torvalds@linux-foundation.org, oleg@redhat.com, umgwanakikbuti@gmail.com, tglx@linutronix.de, rostedt@goodmis.org Subject: Re: [RFC][PATCH 02/11] sched: Create preempt_count invariant Message-ID: <20150929130201.GH3816@twins.programming.kicks-ass.net> References: <20150929092825.540553633@infradead.org> <20150929093519.817299442@infradead.org> <20150929125512.GB31582@lerouge> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150929125512.GB31582@lerouge> 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 Tue, Sep 29, 2015 at 02:55:13PM +0200, Frederic Weisbecker wrote: > On Tue, Sep 29, 2015 at 11:28:27AM +0200, Peter Zijlstra wrote: > > #define init_task_preempt_count(p) do { \ > > - task_thread_info(p)->preempt_count = PREEMPT_DISABLED; \ > > + task_thread_info(p)->preempt_count = 2*PREEMPT_DISABLED; \ > > Since it's not quite obvious why we use this magic value without looking > at schedule_tail() details, maybe add a little comment? (Just "/* see schedule_tail() */"). Right, I fixed that in 12/11 v2. I'll change that around a bit. > > + /* > > + * Still have preempt_count() == 2, from: > > + * > > + * schedule() > > + * preempt_disable(); // 1 > > + * __schedule() > > + * raw_spin_lock_irq(&rq->lock) // 2 > > + */ > > I found that a bit confusing first, because that's a preempt_count() > we actually emulate for a new task. Maybe something like: > > + /* > + * New task is init with preempt_count() == 2 because prev task left > + * us after: > + * > + * schedule() > + * preempt_disable(); // 1 > + * __schedule() > + * raw_spin_lock_irq(&rq->lock) // 2 > + */ I think I'll move the comment to finish_task_switch(), but yes.