Received: by 2002:a25:ab43:0:0:0:0:0 with SMTP id u61csp3550678ybi; Mon, 27 May 2019 01:51:55 -0700 (PDT) X-Google-Smtp-Source: APXvYqzrbbkr6fI2yz92HtKu+cMv3s9DoFJNue3Unb1u9MFc36OBYjw5KopTw8trsyNt6Jl8IvQa X-Received: by 2002:a17:902:521:: with SMTP id 30mr87901747plf.62.1558947115006; Mon, 27 May 2019 01:51:55 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1558947115; cv=none; d=google.com; s=arc-20160816; b=MTpr/KX2K7na7v9hiOXidv+IhIiXbk0f4wnq2WnTquyUul6E2aHZlw2af4HUyC+wmg GKUQOymMEjzHh7PXncRuYr/NsP1D/6GViSB35FdPlOOe7/y8WXtK9a7Le9WyUoRMc8pI ucqCwP0JIt2fAORY4cxOymbmFswIPfNm9JxK+LrvgalXC2M2P5/1RQkrB9CwOXTSlnRD kn2j22tuyT1gDS5CcpqVYzXDlE5NgDkh2sgb32jODQ6PNm/F+4NBFtgXCOLi3ZQTaqST rmp7KtwqfR/1du3YZy/cDd+K6irgJxwoRDOONA2jObUrj/dXHv947JjV6sg6cmj+/dDy Wb3g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from :dkim-signature; bh=JSYe47ktmWDVImdRMdjKYkUfFXl23hlJNQIL3W+hEjY=; b=K+fg++NoF9t4LDjzYTqSr/EJJK5HQC8JJ1QG6qtP2kY3B3cw2ZvKZBIMQS1+83znqu 3QK4DUVZD587ZHnfYRPLE+p2sMlZvKkyVacz1RHo+0ZvoK27xCXp9nqulLFxcxRkH8cj n6adNdfZKxWVml5GsgP29IeyPQbLQE5P8r0+b2IVa8xyNwgeiTUf5CUaFanjOnCVQh5e g4V6bySvp2OuBF3RoVklTTNUyyByd5ZZFWU9JvQ2aBsv5QIhy14hSgbvn9Uv6+o4QiNm sq3QaMNMMb78UH/uwWoIyJsdDV171KTQuhOfDnTkgvmlyDGDBsOdoBy9mHoCs2rWXdGX maew== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b=eXFCI9Im; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id p13si16643455pgh.417.2019.05.27.01.51.40; Mon, 27 May 2019 01:51:54 -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=@amarulasolutions.com header.s=google header.b=eXFCI9Im; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726774AbfE0IuY (ORCPT + 99 others); Mon, 27 May 2019 04:50:24 -0400 Received: from mail-wm1-f66.google.com ([209.85.128.66]:36100 "EHLO mail-wm1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726757AbfE0IuW (ORCPT ); Mon, 27 May 2019 04:50:22 -0400 Received: by mail-wm1-f66.google.com with SMTP id v22so7734908wml.1 for ; Mon, 27 May 2019 01:50:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amarulasolutions.com; s=google; h=from:to:cc:subject:date:message-id; bh=JSYe47ktmWDVImdRMdjKYkUfFXl23hlJNQIL3W+hEjY=; b=eXFCI9ImDvCZKjk0jgbcXG/WbIcHIk+7MQNwJdKDwJNbEzr9PvGux3wik26Mz5q/tx H2Ibzxqwhdwns143brs5zym7VWKd5/QQ2XIFU3HnPs1F09NqKgQzR3TZIqfpSabiDjKg e2h4YOZwHNXtEVNoUyr2IuvyeaKI5tGdXv98g= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=JSYe47ktmWDVImdRMdjKYkUfFXl23hlJNQIL3W+hEjY=; b=FC7wLUIUGsdFHH77qK8R7fvBp3hg0VQJGmSYgZz+I0fqaXf0NOlE5c5Lrg7oOSLGky Znz+WezhP8ejHcDsfiItfcpfw5DSD6K3AvcuJ5uzGFu/WBOldEP6uYi3mEJGhdK/7Boq H4sE+IQh+FonmRYFPAsTwXWj6YxGSgyyoA/f8EBIyf2ywvvRhPeFfbHPFCBnkhB0Clzn CdD/32nCsk6eaG5vOQ4dmONso53jDoqYv7wbSB41A60j0nkrlgbeA0W1p6Ab0QbPrKzU V30h5X13Z4+din9R/2ATPfTVMFo6CWXxuvIxTIrJcvUPEUKPk6o2Iug1itnJOzWziFfu 9O2Q== X-Gm-Message-State: APjAAAXSxops5awQyyDRuLNNEhPHJquL0PnIZpAflEC/oZnR2KlQXApr OToPKEK3CiHPcEFyRxNCbn6gJ7ZANEruUg== X-Received: by 2002:a7b:c943:: with SMTP id i3mr8400604wml.128.1558947019989; Mon, 27 May 2019 01:50:19 -0700 (PDT) Received: from localhost.localdomain (86.100.broadband17.iol.cz. [109.80.100.86]) by smtp.gmail.com with ESMTPSA id f197sm10308637wme.39.2019.05.27.01.50.18 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 27 May 2019 01:50:19 -0700 (PDT) From: Andrea Parri To: linux-kernel@vger.kernel.org Cc: Andrea Parri , "Paul E. McKenney" , Josh Triplett , Steven Rostedt , Mathieu Desnoyers , Lai Jiangshan , Joel Fernandes , rcu@vger.kernel.org, Peter Zijlstra , Will Deacon , Mark Rutland , Matthew Wilcox , Sasha Levin Subject: [PATCH v2] rcu: Don't return a value from rcu_assign_pointer() Date: Mon, 27 May 2019 10:49:57 +0200 Message-Id: <1558946997-25559-1-git-send-email-andrea.parri@amarulasolutions.com> X-Mailer: git-send-email 2.7.4 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Quoting Paul [1]: "Given that a quick (and perhaps error-prone) search of the uses of rcu_assign_pointer() in v5.1 didn't find a single use of the return value, let's please instead change the documentation and implementation to eliminate the return value." [1] https://lkml.kernel.org/r/20190523135013.GL28207@linux.ibm.com Signed-off-by: Andrea Parri Cc: "Paul E. McKenney" Cc: Josh Triplett Cc: Steven Rostedt Cc: Mathieu Desnoyers Cc: Lai Jiangshan Cc: Joel Fernandes Cc: rcu@vger.kernel.org Cc: Peter Zijlstra Cc: Will Deacon Cc: Mark Rutland Cc: Matthew Wilcox Cc: Sasha Levin --- Changes in v2: - Fix documentation and style (Paul E. McKenney) - Improve subject line (Mark Rutland) --- Documentation/RCU/whatisRCU.txt | 8 ++++---- include/linux/rcupdate.h | 5 ++--- tools/include/linux/rcu.h | 4 ++-- tools/testing/radix-tree/linux/rcupdate.h | 2 +- 4 files changed, 9 insertions(+), 10 deletions(-) diff --git a/Documentation/RCU/whatisRCU.txt b/Documentation/RCU/whatisRCU.txt index 981651a8b65d2..7e1a8721637ab 100644 --- a/Documentation/RCU/whatisRCU.txt +++ b/Documentation/RCU/whatisRCU.txt @@ -212,7 +212,7 @@ synchronize_rcu() rcu_assign_pointer() - typeof(p) rcu_assign_pointer(p, typeof(p) v); + void rcu_assign_pointer(p, typeof(p) v); Yes, rcu_assign_pointer() -is- implemented as a macro, though it would be cool to be able to declare a function in this manner. @@ -220,9 +220,9 @@ rcu_assign_pointer() The updater uses this function to assign a new value to an RCU-protected pointer, in order to safely communicate the change - in value from the updater to the reader. This function returns - the new value, and also executes any memory-barrier instructions - required for a given CPU architecture. + in value from the updater to the reader. This macro does not + evaluate to an rvalue, but it does execute any memory-barrier + instructions required for a given CPU architecture. Perhaps just as important, it serves to document (1) which pointers are protected by RCU and (2) the point at which a diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h index a8ed624da5556..0c9b92799abc7 100644 --- a/include/linux/rcupdate.h +++ b/include/linux/rcupdate.h @@ -367,7 +367,7 @@ static inline void rcu_preempt_sleep_check(void) { } * other macros that it invokes. */ #define rcu_assign_pointer(p, v) \ -({ \ +do { \ uintptr_t _r_a_p__v = (uintptr_t)(v); \ rcu_check_sparse(p, __rcu); \ \ @@ -375,8 +375,7 @@ static inline void rcu_preempt_sleep_check(void) { } WRITE_ONCE((p), (typeof(p))(_r_a_p__v)); \ else \ smp_store_release(&p, RCU_INITIALIZER((typeof(p))_r_a_p__v)); \ - _r_a_p__v; \ -}) +} while (0) /** * rcu_swap_protected() - swap an RCU and a regular pointer diff --git a/tools/include/linux/rcu.h b/tools/include/linux/rcu.h index 7d02527e5bcea..9554d3fa54f33 100644 --- a/tools/include/linux/rcu.h +++ b/tools/include/linux/rcu.h @@ -19,7 +19,7 @@ static inline bool rcu_is_watching(void) return false; } -#define rcu_assign_pointer(p, v) ((p) = (v)) -#define RCU_INIT_POINTER(p, v) p=(v) +#define rcu_assign_pointer(p, v) do { (p) = (v); } while (0) +#define RCU_INIT_POINTER(p, v) do { (p) = (v); } while (0) #endif diff --git a/tools/testing/radix-tree/linux/rcupdate.h b/tools/testing/radix-tree/linux/rcupdate.h index fd280b070fdb1..fed468fb0c78d 100644 --- a/tools/testing/radix-tree/linux/rcupdate.h +++ b/tools/testing/radix-tree/linux/rcupdate.h @@ -7,6 +7,6 @@ #define rcu_dereference_raw(p) rcu_dereference(p) #define rcu_dereference_protected(p, cond) rcu_dereference(p) #define rcu_dereference_check(p, cond) rcu_dereference(p) -#define RCU_INIT_POINTER(p, v) (p) = (v) +#define RCU_INIT_POINTER(p, v) do { (p) = (v); } while (0) #endif -- 2.7.4