Received: by 2002:a25:824b:0:0:0:0:0 with SMTP id d11csp1560381ybn; Wed, 2 Oct 2019 18:47:39 -0700 (PDT) X-Google-Smtp-Source: APXvYqx/90RB1n2prpeHnUDJWA5aBJdzZ/aaUaSO+vTgIVNRB/Y81qBgJofPy+m9GmaHiyV1biW0 X-Received: by 2002:aa7:c897:: with SMTP id p23mr7070165eds.199.1570067259886; Wed, 02 Oct 2019 18:47:39 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1570067259; cv=none; d=google.com; s=arc-20160816; b=cBMF/BjBEaXzUZsq9aBgwz1qs0t5743mIB9QSGwHzz4AhvikSLzNPzQ7IsQGAleMZ6 9jfGlCa7LF4CDJ/gLCZm1XUspI+yb33ViQ6UEMQ0csPbuLPWf8wfZwnKjVz7AB7tce8f F6CfFJuQTaOnuYglvCJs74DmztgWfiTqTKA5RsHkUbrkLhyn+7S6txedcsdYtpymjLJ4 JfAYQbbTftV97O6ZSB9rDfl41hI+ZEcnManBrZolXwK4Kpd1Q4Y+CibNEoYB72l+hDo/ M8e/dXl48u+4jgF9KP6vKLygg1ARMvoDQmrT/hDapGNfXLY8yBLSRkV4QPJ5pJiR4dAg wuAA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature; bh=b06tAwsvjYYY8tSoWfttkwtSfv4RNPrfSjndejImadE=; b=V+6Cc6Z+mDSKzL9BvEOv1+B/r7sbzX3GyfoAMXGM9r6i8djfSo5oU/GglqAQzONcCd VajYHKVdhYrWzH+mQO2HnW4RIwiMX3MXgr7iZejJ1h7FjeclkJ5n+EIAqacdkwe9W8Da O+1CuBPK1Isbfd3Y5N1lboTEBF8RTLaaU5mY7PwBMYkOgMZXzHf9mOntBAkiM0UgOpoo Cr7exF2xmfGuxtR+vf6A/z4vL7P0gj74kxqanvlbxzv/kdeMOReAW/gbKuwM4GgwNlaL 2wGyMInk6hMnnz9/FBQTLwIfQsKySKU0T8MPvOFzdTcFb3+uq/zmepO4sCCic8n4QDj4 fGMA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=FNGveLue; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id p18si512005ejn.370.2019.10.02.18.47.15; Wed, 02 Oct 2019 18:47:39 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=FNGveLue; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726830AbfJCBnM (ORCPT + 99 others); Wed, 2 Oct 2019 21:43:12 -0400 Received: from mail.kernel.org ([198.145.29.99]:46304 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725799AbfJCBnM (ORCPT ); Wed, 2 Oct 2019 21:43:12 -0400 Received: from paulmck-ThinkPad-P72.home (50-39-105-78.bvtn.or.frontiernet.net [50.39.105.78]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id AAFA9222BE; Thu, 3 Oct 2019 01:43:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1570066992; bh=8ZyFUmDNuP7YABnB8UvoPnBETWg/O9MNocg7cJfuRNw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=FNGveLuefBEOXKRlAldGI1HhLt9gVfQ/CIGR4V/4ARVom8+NkV50Luvws4dhcIcme LB7zGCTf+Ewy57A6m4N8DqyLSjpb3z8K+GUszhS6jJiln3B6uKit9Hwg1XanBaRv0R TY2k7hY2PSITbK53obreSvs10PAR0UnJDqGphFAI= From: paulmck@kernel.org To: rcu@vger.kernel.org Cc: linux-kernel@vger.kernel.org, mingo@kernel.org, jiangshanlai@gmail.com, dipankar@in.ibm.com, akpm@linux-foundation.org, mathieu.desnoyers@efficios.com, josh@joshtriplett.org, tglx@linutronix.de, peterz@infradead.org, rostedt@goodmis.org, dhowells@redhat.com, edumazet@google.com, fweisbec@gmail.com, oleg@redhat.com, joel@joelfernandes.org, "Paul E. McKenney" , Bart Van Assche , Christoph Hellwig , Hannes Reinecke , Johannes Thumshirn , Shane M Seymour , "Martin K . Petersen" Subject: [PATCH tip/core/rcu 1/9] rcu: Upgrade rcu_swap_protected() to rcu_replace() Date: Wed, 2 Oct 2019 18:43:02 -0700 Message-Id: <20191003014310.13262-1-paulmck@kernel.org> X-Mailer: git-send-email 2.9.5 In-Reply-To: <20191003014153.GA13156@paulmck-ThinkPad-P72> References: <20191003014153.GA13156@paulmck-ThinkPad-P72> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: "Paul E. McKenney" Although the rcu_swap_protected() macro follows the example of swap(), the interactions with RCU make its update of its argument somewhat counter-intuitive. This commit therefore introduces an rcu_replace() that returns the old value of the RCU pointer instead of doing the argument update. Once all the uses of rcu_swap_protected() are updated to instead use rcu_replace(), rcu_swap_protected() will be removed. Link: https://lore.kernel.org/lkml/CAHk-=wiAsJLw1egFEE=Z7-GGtM6wcvtyytXZA1+BHqta4gg6Hw@mail.gmail.com/ Reported-by: Linus Torvalds Signed-off-by: Paul E. McKenney Cc: Bart Van Assche Cc: Christoph Hellwig Cc: Hannes Reinecke Cc: Johannes Thumshirn Cc: Shane M Seymour Cc: Martin K. Petersen --- include/linux/rcupdate.h | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h index 75a2ede..3b73287 100644 --- a/include/linux/rcupdate.h +++ b/include/linux/rcupdate.h @@ -383,6 +383,24 @@ do { \ } while (0) /** + * rcu_replace() - replace an RCU pointer, returning its old value + * @rcu_ptr: RCU pointer, whose old value is returned + * @ptr: regular pointer + * @c: the lockdep conditions under which the dereference will take place + * + * Perform a replacement, where @rcu_ptr is an RCU-annotated + * pointer and @c is the lockdep argument that is passed to the + * rcu_dereference_protected() call used to read that pointer. The old + * value of @rcu_ptr is returned, and @rcu_ptr is set to @ptr. + */ +#define rcu_replace(rcu_ptr, ptr, c) \ +({ \ + typeof(ptr) __tmp = rcu_dereference_protected((rcu_ptr), (c)); \ + rcu_assign_pointer((rcu_ptr), (ptr)); \ + __tmp; \ +}) + +/** * rcu_swap_protected() - swap an RCU and a regular pointer * @rcu_ptr: RCU pointer * @ptr: regular pointer -- 2.9.5