From patchwork Wed May 3 20:13:22 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mathieu Desnoyers X-Patchwork-Id: 89853 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp1597779vqo; Wed, 3 May 2023 13:43:14 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ5TZqbbGStnv9Ls4SdCjfVFBOzNPBI2doLnIUU510LBDnQXq3IAgdhAefYDknEcxzXI5Yrh X-Received: by 2002:a05:6a00:3496:b0:63b:6d4d:4c9 with SMTP id cp22-20020a056a00349600b0063b6d4d04c9mr3855572pfb.9.1683146594021; Wed, 03 May 2023 13:43:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1683146594; cv=none; d=google.com; s=arc-20160816; b=GFM1ekrKQn6ow63JjPJrswUX0RIlCz1ETRuo6TvixK+dV1dmMpy+Y+VQEi3/mxj2uJ /wmVYco7i/VpHmnP3oidXX2yDEcP5kOe/3hRB0RNdqUayy03jmv/bFqw0CWkMbiak+jE ZBXX/0TWEOcLUNf2KnVJENsUycKTTUJd8hmId65FOoj0lTrsC/qWnVngBybDVN67wtVS doD3SzKphFEHs42z3VProRRiOFV68HbJJ3h1jc4JIMXQhU2lcufTz+41DLdkR4SEz937 XbyDWNidYqjDaolE2bZYlonD3uARs7gu4TSt7OzVE5pM7A5hNIxEb0HETBuitOTtTgwW ypsA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=GMWdqSjVCBGTLqvsl1GuDgQBpGYGY548bbp3vb2dCMU=; b=kExo1Z6eL3cPlf9V+M87ugy8SVfmIQoE0t7GleiKUh+pPvAAfc3fix4mCA6GkfJWZW 3/G/yWqyiP619gfq1bgOEWEWeLRPYvs793yI4vU6Bv/UpofyIeLCibein+Ogm2Ru3KyI 2ccLcZ52T+qJjIADrTZop9+bsmL4/veINhooboxwDajPnlHDp03rIujKZXxoSgTD5OLk oymC1bgfZOl25miPhibPOYAp4jbVmiUCbGQlie2faIL9FxKccah0H/hyD7cxQlnyHorj HFqjnIt8T1fI3+fuacA3xD0c3Y8cPEKqYYP8dYHjhbot+kOKLOiMkv2HUwpG4qqH8dJt 65TA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@efficios.com header.s=smtpout1 header.b=iWQhduDV; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=efficios.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id g64-20020a636b43000000b00513128cd495si33168436pgc.730.2023.05.03.13.42.38; Wed, 03 May 2023 13:43:14 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@efficios.com header.s=smtpout1 header.b=iWQhduDV; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=efficios.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230145AbjECUOo (ORCPT + 99 others); Wed, 3 May 2023 16:14:44 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47398 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230156AbjECUOg (ORCPT ); Wed, 3 May 2023 16:14:36 -0400 Received: from smtpout.efficios.com (smtpout.efficios.com [167.114.26.122]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 846B58A62 for ; Wed, 3 May 2023 13:13:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=efficios.com; s=smtpout1; t=1683144808; bh=40ZXckww7AYtcV479k70ydFlE0zo0yVWPM2kmuXq4GE=; h=From:To:Cc:Subject:Date:From; b=iWQhduDV2eR1p8Thl+BMwPzCkIwdsiO/5RLyy8ywDEU3r6f16RUbK/SQUaD/8xsdL 3OVqXh1KHJm0i2fCxTimnKBAcpcDrQMNByvpRV7eOP5l2Yybwd6Xia/HGrnYGDl3L0 iMmMYtqenUAKxh8LeUqDRp7spzSOT+ONHMNuRvtTuVRX9ucQ40zsQcK/p2lkKqq2h7 /iW+zAJ4wDCOG/bEKoPymILTMcMYk+x06S+cB1qPjcG/lUAzOw0nLM/5wMfLsDX+ZM w6co6Xh+3+g1i784LVhFGB7QlwV/xHSl2imfTDobzxaEN3RqOmVVCJ8KXsPyxWUflS XdCyV2qe+sO9w== Received: from localhost.localdomain (192-222-143-198.qc.cable.ebox.net [192.222.143.198]) by smtpout.efficios.com (Postfix) with ESMTPSA id 4QBSnN4dzBz11hs; Wed, 3 May 2023 16:13:28 -0400 (EDT) From: Mathieu Desnoyers To: Peter Zijlstra Cc: linux-kernel@vger.kernel.org, Mathieu Desnoyers Subject: [RFC PATCH 1/3] selftests/rseq: Implement rseq_unqual_scalar_typeof Date: Wed, 3 May 2023 16:13:22 -0400 Message-Id: <20230503201324.1587003-1-mathieu.desnoyers@efficios.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1764907123204463336?= X-GMAIL-MSGID: =?utf-8?q?1764907123204463336?= Allow defining variables and perform cast with a typeof which removes the volatile and const qualifiers. This prevents declaring a stack variable with a volatile qualifier within a macro, which would generate sub-optimal assembler. This is imported from the "librseq" project. Signed-off-by: Mathieu Desnoyers --- tools/testing/selftests/rseq/compiler.h | 27 +++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/tools/testing/selftests/rseq/compiler.h b/tools/testing/selftests/rseq/compiler.h index f47092bddeba..8dc7f881e253 100644 --- a/tools/testing/selftests/rseq/compiler.h +++ b/tools/testing/selftests/rseq/compiler.h @@ -33,4 +33,31 @@ #define RSEQ_COMBINE_TOKENS(_tokena, _tokenb) \ RSEQ__COMBINE_TOKENS(_tokena, _tokenb) +#ifdef __cplusplus +#define rseq_unqual_scalar_typeof(x) \ + std::remove_cv::type>::type +#else +/* + * Use C11 _Generic to express unqualified type from expression. This removes + * volatile qualifier from expression type. + */ +#define rseq_unqual_scalar_typeof(x) \ + __typeof__( \ + _Generic((x), \ + char: (char)0, \ + unsigned char: (unsigned char)0, \ + signed char: (signed char)0, \ + unsigned short: (unsigned short)0, \ + signed short: (signed short)0, \ + unsigned int: (unsigned int)0, \ + signed int: (signed int)0, \ + unsigned long: (unsigned long)0, \ + signed long: (signed long)0, \ + unsigned long long: (unsigned long long)0, \ + signed long long: (signed long long)0, \ + default: (x) \ + ) \ + ) +#endif + #endif /* RSEQ_COMPILER_H_ */ From patchwork Wed May 3 20:13:23 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mathieu Desnoyers X-Patchwork-Id: 89852 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp1597039vqo; Wed, 3 May 2023 13:41:43 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ64JJIlaa2B9EKTF6KaENrYalx/MXcjwfqvStjWty5e3YsDcuYN6076/tTZwcE+wNvYLLY5 X-Received: by 2002:a05:6a00:1301:b0:63d:27a1:d578 with SMTP id j1-20020a056a00130100b0063d27a1d578mr27908999pfu.20.1683146503328; Wed, 03 May 2023 13:41:43 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1683146503; cv=none; d=google.com; s=arc-20160816; b=iXJ5PBT3tAxcmab5onoUBdd2DwsW6fxAQubbI+HWOmRoHIhaQ7CpBPAvHPiZQDcj9O Cq37t6VJXQR1P9x1zhz/qLqBiBOsXM/8FDbHXUyMUYwV/aDRDlBI9+ghX7FyrLJxUqqH a9EDcCU68PZ3JgHw+rqahd8HCJjXlzrwVQmVxgYmH/PGU7LMFYuDX+JWjOtBlmN7Zzkr 6dSY+OLkNJM4/GSPpR6yB/bfxcRwEDq23J3wH3qbN1BRcp5/VreEtAdWl5VRwdQCWyNj 7jDVTDF/zd86SCTH0t61kcnk45C2pK0c632YhQ916YrWEOHBpFXTKYkQjVUX10i8a93/ hNkQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=p7yIdMUHa3wF/HBuRqqOLUfYvEG1ouewyAEX7xxTeFI=; b=dyvXVKBKKwGXh2sz6ljCNJDcDMK7ZGYWgBlcJX7M6fdgdxDZv4RUYQnp3c2+BJupXR ZiW9oV6Ne+6/eKnJtsIBnYuxNo6wbnf9f98DJHf51ojhuK3q+ZI8H2QRZC2tz1F+at/b Mxaqi/f4AEnfCrFzbOgFFH02C633uBHYr0XYjEGbK0zUt0WV5B8hz3SxsNjBYI2HxdF+ yopBjRjM5HXqJHMUHjLTnZZCN3UyhOiwMxEfokzHDpZh1Nx5aCOEQNlJa3oP6tSLeBQ7 ZX8EI+ogfL+FBc22/wsY2Y3Cjubd03tn5rw2cC9WhFwzQ+zfZepU9FMxHtdm1ur8Fnq8 gSTQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@efficios.com header.s=smtpout1 header.b=jrCr7ZuX; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=efficios.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id a184-20020a621ac1000000b006435b390dbbsi1110956pfa.153.2023.05.03.13.41.28; Wed, 03 May 2023 13:41:43 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@efficios.com header.s=smtpout1 header.b=jrCr7ZuX; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=efficios.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230204AbjECUOl (ORCPT + 99 others); Wed, 3 May 2023 16:14:41 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47400 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230155AbjECUOg (ORCPT ); Wed, 3 May 2023 16:14:36 -0400 Received: from smtpout.efficios.com (smtpout.efficios.com [167.114.26.122]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 838DB83DD for ; Wed, 3 May 2023 13:13:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=efficios.com; s=smtpout1; t=1683144810; bh=JFXZOyA+MaNEabXquELDZyqKe3MTOQ5kU8hAyTwsfD4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=jrCr7ZuXd3PMW6ZxxHvWngAtYnCBERRMuBbL2ZvXwVMNToqyE6ua+a1WXPpMq4C5D tiHKI+b2KnOKmSRV66aCPm9zymztYhXt5tBZOp2xU2LFBe/K6xhIfFQSkzq6Pk+ZlM /uvd4QHnPxI1DJIO8hQKR0smpMWuKMHp0QUMXOZBUpQ9i8yUJLFaNR6gabtu76C762 +kUZu0zJUnd6iO7qRBaHc1OHDw300e0U+furA4wS1I0d0MQfvhbcQcMJCzJozcXWnU O3+oCCQbC4j2AeLk7TOy1r8qhmfVxHWn9A9BBxQJ+jPvT60FWmCNsHhtXZIwwzX+DX j6AACQLfsdXqg== Received: from localhost.localdomain (192-222-143-198.qc.cable.ebox.net [192.222.143.198]) by smtpout.efficios.com (Postfix) with ESMTPSA id 4QBSnP6S1lz11ht; Wed, 3 May 2023 16:13:29 -0400 (EDT) From: Mathieu Desnoyers To: Peter Zijlstra Cc: linux-kernel@vger.kernel.org, Mathieu Desnoyers , Catalin Marinas , Will Deacon Subject: [RFC PATCH 2/3] selftests/rseq: Fix arm64 buggy load-acquire/store-release macros Date: Wed, 3 May 2023 16:13:23 -0400 Message-Id: <20230503201324.1587003-2-mathieu.desnoyers@efficios.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230503201324.1587003-1-mathieu.desnoyers@efficios.com> References: <20230503201324.1587003-1-mathieu.desnoyers@efficios.com> MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1764907027833721519?= X-GMAIL-MSGID: =?utf-8?q?1764907027833721519?= The arm64 load-acquire/store-release macros from the Linux kernel rseq selftests are buggy. Remplace them by a working implementation. Signed-off-by: Mathieu Desnoyers Cc: Catalin Marinas Cc: Will Deacon Cc: Peter Zijlstra --- tools/testing/selftests/rseq/rseq-arm64.h | 58 ++++++++++++----------- 1 file changed, 30 insertions(+), 28 deletions(-) diff --git a/tools/testing/selftests/rseq/rseq-arm64.h b/tools/testing/selftests/rseq/rseq-arm64.h index 85b90977e7e6..21e1626a7235 100644 --- a/tools/testing/selftests/rseq/rseq-arm64.h +++ b/tools/testing/selftests/rseq/rseq-arm64.h @@ -27,59 +27,61 @@ #define rseq_smp_load_acquire(p) \ __extension__ ({ \ - __typeof(*p) ____p1; \ - switch (sizeof(*p)) { \ + union { rseq_unqual_scalar_typeof(*(p)) __val; char __c[sizeof(*(p))]; } __u; \ + switch (sizeof(*(p))) { \ case 1: \ - asm volatile ("ldarb %w0, %1" \ - : "=r" (*(__u8 *)p) \ - : "Q" (*p) : "memory"); \ + __asm__ __volatile__ ("ldarb %w0, %1" \ + : "=r" (*(__u8 *)__u.__c) \ + : "Q" (*(p)) : "memory"); \ break; \ case 2: \ - asm volatile ("ldarh %w0, %1" \ - : "=r" (*(__u16 *)p) \ - : "Q" (*p) : "memory"); \ + __asm__ __volatile__ ("ldarh %w0, %1" \ + : "=r" (*(__u16 *)__u.__c) \ + : "Q" (*(p)) : "memory"); \ break; \ case 4: \ - asm volatile ("ldar %w0, %1" \ - : "=r" (*(__u32 *)p) \ - : "Q" (*p) : "memory"); \ + __asm__ __volatile__ ("ldar %w0, %1" \ + : "=r" (*(__u32 *)__u.__c) \ + : "Q" (*(p)) : "memory"); \ break; \ case 8: \ - asm volatile ("ldar %0, %1" \ - : "=r" (*(__u64 *)p) \ - : "Q" (*p) : "memory"); \ + __asm__ __volatile__ ("ldar %0, %1" \ + : "=r" (*(__u64 *)__u.__c) \ + : "Q" (*(p)) : "memory"); \ break; \ } \ - ____p1; \ + (rseq_unqual_scalar_typeof(*(p)))__u.__val; \ }) #define rseq_smp_acquire__after_ctrl_dep() rseq_smp_rmb() #define rseq_smp_store_release(p, v) \ do { \ - switch (sizeof(*p)) { \ + union { rseq_unqual_scalar_typeof(*(p)) __val; char __c[sizeof(*(p))]; } __u = \ + { .__val = (rseq_unqual_scalar_typeof(*(p))) (v) }; \ + switch (sizeof(*(p))) { \ case 1: \ - asm volatile ("stlrb %w1, %0" \ - : "=Q" (*p) \ - : "r" ((__u8)v) \ + __asm__ __volatile__ ("stlrb %w1, %0" \ + : "=Q" (*(p)) \ + : "r" (*(__u8 *)__u.__c) \ : "memory"); \ break; \ case 2: \ - asm volatile ("stlrh %w1, %0" \ - : "=Q" (*p) \ - : "r" ((__u16)v) \ + __asm__ __volatile__ ("stlrh %w1, %0" \ + : "=Q" (*(p)) \ + : "r" (*(__u16 *)__u.__c) \ : "memory"); \ break; \ case 4: \ - asm volatile ("stlr %w1, %0" \ - : "=Q" (*p) \ - : "r" ((__u32)v) \ + __asm__ __volatile__ ("stlr %w1, %0" \ + : "=Q" (*(p)) \ + : "r" (*(__u32 *)__u.__c) \ : "memory"); \ break; \ case 8: \ - asm volatile ("stlr %1, %0" \ - : "=Q" (*p) \ - : "r" ((__u64)v) \ + __asm__ __volatile__ ("stlr %1, %0" \ + : "=Q" (*(p)) \ + : "r" (*(__u64 *)__u.__c) \ : "memory"); \ break; \ } \ From patchwork Wed May 3 20:13:24 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mathieu Desnoyers X-Patchwork-Id: 89842 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp1584794vqo; Wed, 3 May 2023 13:16:44 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ4236Fl84KxG8owB8BGnvxdjvMsXdo0U6wNzV8IS5bd+ZG97mKQ8EcOiEpd0FncVancx1tv X-Received: by 2002:a17:902:7295:b0:1aa:ee36:4095 with SMTP id d21-20020a170902729500b001aaee364095mr1200490pll.43.1683145003809; Wed, 03 May 2023 13:16:43 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1683145003; cv=none; d=google.com; s=arc-20160816; b=y4jvd0bQFkcEOBJcciyZdDU2ov4oK7tVF2kFbXIhXUBQ2fSRjkxxW3klM6Qwazw2VW 4UKoiMUgKqfK+HDFYKaveulzhJ9+UGp5xym/UAxOst42umlsamzlRbQr6t58RobEnxli yt+eG1wrJgx8N+fm6mz7rpPXtt/Vch4Jov9akS/0FxJyea5LVn107LarEAJcw5Odl3cu U87h8vSqwGaUxZy0WQaLvDp13yQMtAlQwcqZnfk5vf8MTKg77CB/ycqjxp5QnLFnJpTP h1LOBc9JX2MzrP8Gr3WUrOIr9y/YjP0SVUUCzPev4ManFcwq+MIJZyA3a1LiiSUYblzu 5o6w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=9Ofp1Ft5+NDKGumSAHbScNrto0F9ZJGiDvYbxh3s13E=; b=WxUlSn5UNi1Lq7+gGMpm7koQVkbbPdFUO3k7S3Ct3gZ4HQaaPqOv5wbzJDWthsvZfd L3n0TxZ7TlwYMkz7po7YZSavSit5NEygDOYsUrWjK/qV4odlSH3eZ28ZkCXeliAM+8vh EHaLGswnNXQkZ5O7JIbsk8OjuGNuzZFFWCuIsoz5bITFHUZUxGdK8mRvtQAMXs8ilQ+O pF8ZU84J2+SSAU2L1gRnFpIKy7/nk/wyWM3nMawUMpr2HPPaKn1kNPySzs9OK5RmEd5t QXSeMDZr+Z7VoL0EN4aPkykQNfzauKa/P1KToCcBZv4sMi28AYlH/y8qpKA6OVVazwUb Yt9w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@efficios.com header.s=smtpout1 header.b=Pe6lhTMV; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=efficios.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id w1-20020a170902e88100b001a971d32b41si26495735plg.267.2023.05.03.13.16.26; Wed, 03 May 2023 13:16:43 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@efficios.com header.s=smtpout1 header.b=Pe6lhTMV; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=efficios.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230246AbjECUOr (ORCPT + 99 others); Wed, 3 May 2023 16:14:47 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47478 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230157AbjECUOg (ORCPT ); Wed, 3 May 2023 16:14:36 -0400 Received: from smtpout.efficios.com (smtpout.efficios.com [167.114.26.122]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D7B409005 for ; Wed, 3 May 2023 13:13:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=efficios.com; s=smtpout1; t=1683144810; bh=sUuJuaMEmAlyyRMOf/8VHfapTZrVaMFeI2CoS0ABZ7s=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Pe6lhTMVc1Xw9qBkJU1HxKjEr7G8Fe1xxPRL1wLggeplfduwHo/Zv1Es4a5djfwhN tiUt2EZLlpkgxpJwmkWYMdmyYGabYMcES99KWyLcBuc+ebKdBG4iV/RYVMvxWrWBtM SfVSTsDWFw8rRANgSPoIY0bDIN74yhpGUpDiZ2UtKqD5rTG+BlZl2kYxTG6s9d0Akh MagVZTGLG9EjHi3XocEVoeLWYv4hbarje5iYu5PP7gvLTiKke6nZKZQECaFtcBlgSC JAXRlhFdUaQbVuEUu/E9QTA7xDOn41lg8BjvQxpwWK2HUi5frfyYXQZvs52NT6jgXk atpm7Exlr9X1A== Received: from localhost.localdomain (192-222-143-198.qc.cable.ebox.net [192.222.143.198]) by smtpout.efficios.com (Postfix) with ESMTPSA id 4QBSnQ4n6Nz11hv; Wed, 3 May 2023 16:13:30 -0400 (EDT) From: Mathieu Desnoyers To: Peter Zijlstra Cc: linux-kernel@vger.kernel.org, Mathieu Desnoyers Subject: [RFC PATCH 3/3] selftests/rseq: Use rseq_unqual_scalar_typeof in macros Date: Wed, 3 May 2023 16:13:24 -0400 Message-Id: <20230503201324.1587003-3-mathieu.desnoyers@efficios.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230503201324.1587003-1-mathieu.desnoyers@efficios.com> References: <20230503201324.1587003-1-mathieu.desnoyers@efficios.com> MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1764905455288841586?= X-GMAIL-MSGID: =?utf-8?q?1764905455288841586?= Use rseq_unqual_scalar_typeof() rather than typeof() in macros to remove the volatile qualifier (if there is one in the input argument), thus generating better assembly code in those scenarios. Also add extra brackets around the "p" parameter in RSEQ_READ_ONCE(), RSEQ_WRITE_ONCE(), and rseq_unqual_scalar_typeof() across architectures to preserve expectations of operator priority. Here is an example that shows how operator priority may be an issue with missing parentheses: #define m(p) \ do { \ __typeof__(*p) v = 0; \ } while (0) void fct(unsigned long long *p1) { m(p1 + 1); /* works */ m(1 + p1); /* broken */ } Signed-off-by: Mathieu Desnoyers Cc: Peter Zijlstra --- tools/testing/selftests/rseq/rseq-arm.h | 4 ++-- tools/testing/selftests/rseq/rseq-mips.h | 4 ++-- tools/testing/selftests/rseq/rseq-ppc.h | 4 ++-- tools/testing/selftests/rseq/rseq-riscv.h | 6 +++--- tools/testing/selftests/rseq/rseq-s390.h | 4 ++-- tools/testing/selftests/rseq/rseq-x86.h | 4 ++-- 6 files changed, 13 insertions(+), 13 deletions(-) diff --git a/tools/testing/selftests/rseq/rseq-arm.h b/tools/testing/selftests/rseq/rseq-arm.h index 8414fc3eac15..d887b3bbe257 100644 --- a/tools/testing/selftests/rseq/rseq-arm.h +++ b/tools/testing/selftests/rseq/rseq-arm.h @@ -66,7 +66,7 @@ #define rseq_smp_load_acquire(p) \ __extension__ ({ \ - __typeof(*p) ____p1 = RSEQ_READ_ONCE(*p); \ + rseq_unqual_scalar_typeof(*(p)) ____p1 = RSEQ_READ_ONCE(*(p)); \ rseq_smp_mb(); \ ____p1; \ }) @@ -76,7 +76,7 @@ __extension__ ({ \ #define rseq_smp_store_release(p, v) \ do { \ rseq_smp_mb(); \ - RSEQ_WRITE_ONCE(*p, v); \ + RSEQ_WRITE_ONCE(*(p), v); \ } while (0) #define __RSEQ_ASM_DEFINE_TABLE(label, version, flags, start_ip, \ diff --git a/tools/testing/selftests/rseq/rseq-mips.h b/tools/testing/selftests/rseq/rseq-mips.h index 50b950cf9585..42ef8e946693 100644 --- a/tools/testing/selftests/rseq/rseq-mips.h +++ b/tools/testing/selftests/rseq/rseq-mips.h @@ -45,7 +45,7 @@ #define rseq_smp_load_acquire(p) \ __extension__ ({ \ - __typeof(*p) ____p1 = RSEQ_READ_ONCE(*p); \ + rseq_unqual_scalar_typeof(*(p)) ____p1 = RSEQ_READ_ONCE(*(p)); \ rseq_smp_mb(); \ ____p1; \ }) @@ -55,7 +55,7 @@ __extension__ ({ \ #define rseq_smp_store_release(p, v) \ do { \ rseq_smp_mb(); \ - RSEQ_WRITE_ONCE(*p, v); \ + RSEQ_WRITE_ONCE(*(p), v); \ } while (0) #if _MIPS_SZLONG == 64 diff --git a/tools/testing/selftests/rseq/rseq-ppc.h b/tools/testing/selftests/rseq/rseq-ppc.h index dc9190facee9..57b160597189 100644 --- a/tools/testing/selftests/rseq/rseq-ppc.h +++ b/tools/testing/selftests/rseq/rseq-ppc.h @@ -23,7 +23,7 @@ #define rseq_smp_load_acquire(p) \ __extension__ ({ \ - __typeof(*p) ____p1 = RSEQ_READ_ONCE(*p); \ + rseq_unqual_scalar_typeof(*(p)) ____p1 = RSEQ_READ_ONCE(*(p)); \ rseq_smp_lwsync(); \ ____p1; \ }) @@ -33,7 +33,7 @@ __extension__ ({ \ #define rseq_smp_store_release(p, v) \ do { \ rseq_smp_lwsync(); \ - RSEQ_WRITE_ONCE(*p, v); \ + RSEQ_WRITE_ONCE(*(p), v); \ } while (0) /* diff --git a/tools/testing/selftests/rseq/rseq-riscv.h b/tools/testing/selftests/rseq/rseq-riscv.h index 17932a79e066..37e598d0a365 100644 --- a/tools/testing/selftests/rseq/rseq-riscv.h +++ b/tools/testing/selftests/rseq/rseq-riscv.h @@ -36,8 +36,8 @@ #define rseq_smp_load_acquire(p) \ __extension__ ({ \ - __typeof(*(p)) ____p1 = RSEQ_READ_ONCE(*(p)); \ - RISCV_FENCE(r, rw) \ + rseq_unqual_scalar_typeof(*(p)) ____p1 = RSEQ_READ_ONCE(*(p)); \ + RISCV_FENCE(r, rw); \ ____p1; \ }) @@ -46,7 +46,7 @@ __extension__ ({ \ #define rseq_smp_store_release(p, v) \ do { \ RISCV_FENCE(rw, w); \ - RSEQ_WRITE_ONCE(*(p), v); \ + RSEQ_WRITE_ONCE(*(p), v); \ } while (0) #define __RSEQ_ASM_DEFINE_TABLE(label, version, flags, start_ip, \ diff --git a/tools/testing/selftests/rseq/rseq-s390.h b/tools/testing/selftests/rseq/rseq-s390.h index 46c92598acc7..33baaa9f9997 100644 --- a/tools/testing/selftests/rseq/rseq-s390.h +++ b/tools/testing/selftests/rseq/rseq-s390.h @@ -15,7 +15,7 @@ #define rseq_smp_load_acquire(p) \ __extension__ ({ \ - __typeof(*p) ____p1 = RSEQ_READ_ONCE(*p); \ + rseq_unqual_scalar_typeof(*(p)) ____p1 = RSEQ_READ_ONCE(*(p)); \ rseq_barrier(); \ ____p1; \ }) @@ -25,7 +25,7 @@ __extension__ ({ \ #define rseq_smp_store_release(p, v) \ do { \ rseq_barrier(); \ - RSEQ_WRITE_ONCE(*p, v); \ + RSEQ_WRITE_ONCE(*(p), v); \ } while (0) #ifdef __s390x__ diff --git a/tools/testing/selftests/rseq/rseq-x86.h b/tools/testing/selftests/rseq/rseq-x86.h index fb65ef54b0fb..a2aa428ba151 100644 --- a/tools/testing/selftests/rseq/rseq-x86.h +++ b/tools/testing/selftests/rseq/rseq-x86.h @@ -42,7 +42,7 @@ #define rseq_smp_load_acquire(p) \ __extension__ ({ \ - __typeof(*p) ____p1 = RSEQ_READ_ONCE(*p); \ + rseq_unqual_scalar_typeof(*(p)) ____p1 = RSEQ_READ_ONCE(*(p)); \ rseq_barrier(); \ ____p1; \ }) @@ -52,7 +52,7 @@ __extension__ ({ \ #define rseq_smp_store_release(p, v) \ do { \ rseq_barrier(); \ - RSEQ_WRITE_ONCE(*p, v); \ + RSEQ_WRITE_ONCE(*(p), v); \ } while (0) #define __RSEQ_ASM_DEFINE_TABLE(label, version, flags, \