From patchwork Mon Oct 4 09:00:12 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 66627 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 5010AB70CD for ; Mon, 4 Oct 2010 20:00:25 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753900Ab0JDJAS (ORCPT ); Mon, 4 Oct 2010 05:00:18 -0400 Received: from mail-fx0-f46.google.com ([209.85.161.46]:40975 "EHLO mail-fx0-f46.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753757Ab0JDJAR (ORCPT ); Mon, 4 Oct 2010 05:00:17 -0400 Received: by mail-fx0-f46.google.com with SMTP id 14so1554478fxm.19 for ; Mon, 04 Oct 2010 02:00:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:subject:from:to:cc :in-reply-to:references:content-type:date:message-id:mime-version :x-mailer:content-transfer-encoding; bh=+VOhDUXBF58EWtE+Fp5bkeSHkQqfkdteINDI5baSmg4=; b=jwx1EVThueEo8wbFiI7SX0e5JnoA2aNJEoG1hBKvh1O6ntJab73hy5oXPRvonYmVlQ HEa4LXeNmTMPhWeHnCts3qgC0dRqa+ufa0Kj77dy04jjt+eHKkbPg942qvnVCR3LUnOn Hl96q0UrXf9D3MVfSD/+zuI1simOQmBPzSwS8= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=subject:from:to:cc:in-reply-to:references:content-type:date :message-id:mime-version:x-mailer:content-transfer-encoding; b=mSfdgvolqIvIGdufWut5AJfQXmIa9Ly/vQXrTO14vYzg60fJbLsEc1NpPXiRvVH5v4 7SvlKNfk3UARfBWx9tqqPdjZLHmz15gwPW21TQc6eMP3C+jdTzA2VevJ0d4mzyqY4K37 ZYJaTI39ytk/vAbLcadGrVbjqetkh+yLmoCHI= Received: by 10.223.117.204 with SMTP id s12mr492490faq.22.1286182816396; Mon, 04 Oct 2010 02:00:16 -0700 (PDT) Received: from [10.150.51.211] (gw0.net.jmsp.net [212.23.165.14]) by mx.google.com with ESMTPS id r5sm2038729faq.8.2010.10.04.02.00.14 (version=SSLv3 cipher=RC4-MD5); Mon, 04 Oct 2010 02:00:15 -0700 (PDT) Subject: [PATCH net-next] net: relax rtnl_dereference() From: Eric Dumazet To: David Miller Cc: hadi@cyberus.ca, netdev , Jarek Poplawski In-Reply-To: <1286181729.18293.8.camel@edumazet-laptop> References: <1285689517.3154.76.camel@edumazet-laptop> <20100928180447.GA1880@del.dom.local> <1285757817.3561.2.camel@bigi> <1285887509.2705.33.camel@edumazet-laptop> <1285933506.3553.176.camel@bigi> <1285941388.2641.175.camel@edumazet-laptop> <20101002093255.GA2049@del.dom.local> <1286035915.2582.2472.camel@edumazet-laptop> <20101003094221.GA2028@del.dom.local> <1286181729.18293.8.camel@edumazet-laptop> Date: Mon, 04 Oct 2010 11:00:12 +0200 Message-ID: <1286182812.18293.22.camel@edumazet-laptop> Mime-Version: 1.0 X-Mailer: Evolution 2.30.3 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Le lundi 04 octobre 2010 à 10:42 +0200, Eric Dumazet a écrit : > BTW, rtnl_dereference() should be changed to use > rcu_dereference_protected() instead of rcu_dereference_check() : > If RTBL is held, there is no need to force a barrier. > [PATCH net-next] net: relax rtnl_dereference() rtnl_dereference() is used in contexts where RTNL is held, to fetch an RCU protected pointer. Updates to this pointer are prevented by RTNL, so we dont need smp_read_barrier_depends() and the ACCESS_ONCE() provided in rcu_dereference_check(). rtnl_dereference() is mainly a macro to document the locking invariant. Signed-off-by: Eric Dumazet --- include/linux/rtnetlink.h | 10 ++++++---- 1 files changed, 6 insertions(+), 4 deletions(-) -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/include/linux/rtnetlink.h b/include/linux/rtnetlink.h index 68c436b..d3c4efa 100644 --- a/include/linux/rtnetlink.h +++ b/include/linux/rtnetlink.h @@ -754,20 +754,22 @@ extern int lockdep_rtnl_is_held(void); * @p: The pointer to read, prior to dereferencing * * Do an rcu_dereference(p), but check caller either holds rcu_read_lock() - * or RTNL + * or RTNL. Note : Please prefer rtnl_dereference() or rcu_dereference() */ #define rcu_dereference_rtnl(p) \ rcu_dereference_check(p, rcu_read_lock_held() || \ lockdep_rtnl_is_held()) /** - * rtnl_dereference - rcu_dereference with debug checking + * rtnl_dereference - fetch RCU pointer when updates are prevented by RTNL * @p: The pointer to read, prior to dereferencing * - * Do an rcu_dereference(p), but check caller holds RTNL + * Return the value of the specified RCU-protected pointer, but omit + * both the smp_read_barrier_depends() and the ACCESS_ONCE(), because + * caller holds RTNL. */ #define rtnl_dereference(p) \ - rcu_dereference_check(p, lockdep_rtnl_is_held()) + rcu_dereference_protected(p, lockdep_rtnl_is_held()) extern void rtnetlink_init(void); extern void __rtnl_unlock(void);