Received: by 10.192.165.156 with SMTP id m28csp361431imm; Mon, 16 Apr 2018 01:05:39 -0700 (PDT) X-Google-Smtp-Source: AIpwx49R3FG2Alg/kx/qW+IAnGyp4Z3+8qKHYZ/mzV96BVZ9cKsSru/qCMyrpSsgKn3AQbayngOw X-Received: by 10.98.106.193 with SMTP id f184mr20898784pfc.201.1523865939269; Mon, 16 Apr 2018 01:05:39 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1523865939; cv=none; d=google.com; s=arc-20160816; b=igqBm0Y1j4aaXarytYMcUG1z+mn0wn5MgsutvdROOB3uUWVDzBlzRxJ63t0lkwzQc8 2p8WxxKdRd498A/zOuMETBgLm1PKz+APPpAd/rI8v47UUeH1+YkbvfTRml7U3omr1oM6 LjFoZHTjxxhUKBx+mlmB8/U3OCdf1jdmgE4xoUs59KvR1nEcKinA8+VSD3iuWJfQVCTf SItCchdrBMfwQG5bIFHALiDIVhtSh4lseWpEysoYRAl/X4EuawSnsx6H+mbrFo3aP0ia tqy5fFtUq8yjTpcCuVGqdpmqOsbaY+2yMG1ODTjK6Mpz+arLkyzGK8e4xJrtBcUc5DV5 lOhw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-disposition :content-transfer-encoding:mime-version:robot-unsubscribe:robot-id :git-commit-id:subject:to:references:in-reply-to:reply-to:cc :message-id:from:date:arc-authentication-results; bh=MAeQb5wVv2OR+atZJSf0d49FWGcXRRk91PwNd7FRooQ=; b=fFZpr/BkneLY/rwKDKQwjmE6fayBEo3i61rGYLAWGYaemlnZOvwoQhXKZ6r1/RQtyM XbBhHBGivzyziotN5jhtm841oNohzYUYSQy7nOvyrvP9Z0+pJ+XqZRuUwmX7CbY4bnBy 67RyMQb0IJz29deiHKXx0bQSOoXAOexRKA5TrEXduLvnVvha3QvOVdUFPJ9O1za9ACuv YmKk7yvzRE6STKcsKn4tbc8GGu/ZbuwimQxH2J0SBj8YNpVYkP+NjlQbIamIb5hZu3sZ TYy5y4P5eGkx8zThEw2J3FprCCnxMMFVCLS64q0LoiFDJnTw4MbrvFrgSSM4hPwB1nMh 9AWw== ARC-Authentication-Results: i=1; mx.google.com; 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 g4-v6si11792683plb.522.2018.04.16.01.05.23; Mon, 16 Apr 2018 01:05: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; 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 S1752795AbeDPGl7 (ORCPT + 99 others); Mon, 16 Apr 2018 02:41:59 -0400 Received: from terminus.zytor.com ([198.137.202.136]:41883 "EHLO terminus.zytor.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752654AbeDPGl5 (ORCPT ); Mon, 16 Apr 2018 02:41:57 -0400 Received: from terminus.zytor.com (localhost [127.0.0.1]) by terminus.zytor.com (8.15.2/8.15.2) with ESMTP id w3G6fY4J404924; Sun, 15 Apr 2018 23:41:34 -0700 Received: (from tipbot@localhost) by terminus.zytor.com (8.15.2/8.15.2/Submit) id w3G6fXf8404920; Sun, 15 Apr 2018 23:41:33 -0700 Date: Sun, 15 Apr 2018 23:41:33 -0700 X-Authentication-Warning: terminus.zytor.com: tipbot set sender to tipbot@zytor.com using -f From: tip-bot for Mark Rutland Message-ID: Cc: acme@redhat.com, lizhijian@cn.fujitsu.com, mingo@kernel.org, mark.rutland@arm.com, tglx@linutronix.de, hpa@zytor.com, linux-kernel@vger.kernel.org, sandipan@linux.vnet.ibm.com Reply-To: tglx@linutronix.de, mark.rutland@arm.com, lizhijian@cn.fujitsu.com, mingo@kernel.org, acme@redhat.com, sandipan@linux.vnet.ibm.com, linux-kernel@vger.kernel.org, hpa@zytor.com In-Reply-To: <20180404163445.16492-1-mark.rutland@arm.com> References: <20180404163445.16492-1-mark.rutland@arm.com> To: linux-tip-commits@vger.kernel.org Subject: [tip:perf/urgent] tools headers: Restore READ_ONCE() C++ compatibility Git-Commit-ID: 4d3b57da1593c66835d8e3a757e4751b35493fb8 X-Mailer: tip-git-log-daemon Robot-ID: Robot-Unsubscribe: Contact to get blacklisted from these emails MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8 Content-Disposition: inline X-Spam-Status: No, score=-2.9 required=5.0 tests=ALL_TRUSTED,BAYES_00 autolearn=ham autolearn_force=no version=3.4.1 X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on terminus.zytor.com Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Commit-ID: 4d3b57da1593c66835d8e3a757e4751b35493fb8 Gitweb: https://git.kernel.org/tip/4d3b57da1593c66835d8e3a757e4751b35493fb8 Author: Mark Rutland AuthorDate: Wed, 4 Apr 2018 17:34:45 +0100 Committer: Arnaldo Carvalho de Melo CommitDate: Thu, 12 Apr 2018 09:30:09 -0300 tools headers: Restore READ_ONCE() C++ compatibility Our userspace defines READ_ONCE() in a way that clang doesn't like, as we have an anonymous union in which neither field is initialized. WRITE_ONCE() is fine since it initializes the __val field. For READ_ONCE() we can keep clang and GCC happy with a dummy initialization of the __c field, so let's do that. At the same time, let's split READ_ONCE() and WRITE_ONCE() over several lines for legibility, as we do in the in-kernel . Reported-by: Li Zhijian Reported-by: Sandipan Das Tested-by: Sandipan Das Signed-off-by: Mark Rutland Fixes: 6aa7de059173a986 ("locking/atomics: COCCINELLE/treewide: Convert trivial ACCESS_ONCE() patterns to READ_ONCE()/WRITE_ONCE()") Link: http://lkml.kernel.org/r/20180404163445.16492-1-mark.rutland@arm.com Signed-off-by: Arnaldo Carvalho de Melo --- tools/include/linux/compiler.h | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/tools/include/linux/compiler.h b/tools/include/linux/compiler.h index 04e32f965ad7..1827c2f973f9 100644 --- a/tools/include/linux/compiler.h +++ b/tools/include/linux/compiler.h @@ -151,11 +151,21 @@ static __always_inline void __write_once_size(volatile void *p, void *res, int s * required ordering. */ -#define READ_ONCE(x) \ - ({ union { typeof(x) __val; char __c[1]; } __u; __read_once_size(&(x), __u.__c, sizeof(x)); __u.__val; }) - -#define WRITE_ONCE(x, val) \ - ({ union { typeof(x) __val; char __c[1]; } __u = { .__val = (val) }; __write_once_size(&(x), __u.__c, sizeof(x)); __u.__val; }) +#define READ_ONCE(x) \ +({ \ + union { typeof(x) __val; char __c[1]; } __u = \ + { .__c = { 0 } }; \ + __read_once_size(&(x), __u.__c, sizeof(x)); \ + __u.__val; \ +}) + +#define WRITE_ONCE(x, val) \ +({ \ + union { typeof(x) __val; char __c[1]; } __u = \ + { .__val = (val) }; \ + __write_once_size(&(x), __u.__c, sizeof(x)); \ + __u.__val; \ +}) #ifndef __fallthrough