Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933780Ab3ECRGZ (ORCPT ); Fri, 3 May 2013 13:06:25 -0400 Received: from merlin.infradead.org ([205.233.59.134]:47180 "EHLO merlin.infradead.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932481Ab3ECRGX (ORCPT ); Fri, 3 May 2013 13:06:23 -0400 Date: Fri, 3 May 2013 19:04:47 +0200 From: Peter Zijlstra To: "Paul E. McKenney" Cc: Julian Anastasov , Simon Horman , Eric Dumazet , Ingo Molnar , lvs-devel@vger.kernel.org, netdev@vger.kernel.org, netfilter-devel@vger.kernel.org, linux-kernel@vger.kernel.org, Pablo Neira Ayuso , Dipankar Sarma Subject: Re: [PATCH v2 1/2] sched: Add cond_resched_rcu_lock() helper Message-ID: <20130503170447.GB30733@dyad.programming.kicks-ass.net> References: <20130502072623.GE7521@dyad.programming.kicks-ass.net> <20130502173257.GX3780@linux.vnet.ibm.com> <20130502193409.GA3780@linux.vnet.ibm.com> <20130502223107.GB3780@linux.vnet.ibm.com> <20130503163045.GE3780@linux.vnet.ibm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130503163045.GE3780@linux.vnet.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 Content-Length: 1188 Lines: 30 > The key point is that I don't understand why we cannot get the effect > we are looking for with the following in sched.h (or wherever): > > static inline int cond_resched_rcu(void) > { > #if defined(CONFIG_DEBUG_ATOMIC_SLEEP) || !defined(CONFIG_PREEMPT_RCU) > rcu_read_unlock(); > cond_resched(); > rcu_read_lock(); > #endif > } > > This adds absolutely no overhead in non-debug builds of CONFIG_PREEMPT_RCU, > does the checking in debug builds, and allows voluntary preemption in > !CONFIG_PREEMPT_RCU builds. CONFIG_PROVE_RCU builds will check for an > (illegal) outer rcu_read_lock() in CONFIG_PREEMPT_RCU builds, and you > will get "scheduling while atomic" in response to an outer rcu_read_lock() > in !CONFIG_PREEMPT_RCU builds. > > It also seems to me a lot simpler. > > Does this work, or am I still missing something? It can do quite a number of superfluous rcu_read_unlock()/lock() pairs for voluntary preemption kernels? -- 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/