Received: by 2002:a05:6a10:5bc5:0:0:0:0 with SMTP id os5csp1217378pxb; Thu, 21 Oct 2021 18:38:58 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyQbHg4Ri1eGCweRhf+s52eX+DYtAEVo4E3lHFdSijDNEhi9OvrbzXYARH4il2hfHijsuhB X-Received: by 2002:a17:906:f84e:: with SMTP id ks14mr158241ejb.89.1634866738227; Thu, 21 Oct 2021 18:38:58 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1634866738; cv=none; d=google.com; s=arc-20160816; b=0uCUXN9LmEtY1CRczZjuRiP7M6HDEUaP80pb7kqVJRYqwwCT9XOiHoJGro78bt7NnC o3lzSAwgA1m1RReuZQtlFyOlsr7VdW774+3JYEI0YCYGasmZ09lnIB0kExsDFgEIXy47 OIEpRiT/+KY3KLAXNNjqGksvhGuQMN65LblqpzznfqlRMDsP2m7K0NLKiByoM/uBYDSc Nh23vCfUNT7QvbE1XQsjaBgpMRZoIUOVT3vEyTakuEsyFFabGXYHqaHEvKZVZ871nphd jsjR5r6UCoDs82iGr6Ef2tIhGTwpIyre8xSlIC+qtlbnQQvSKPDbxN2928mnmqjMzukf 4fug== 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:wdcironportexception:ironport-sdr:ironport-sdr :dkim-signature; bh=jFYwk+lcp9UOvZMEvbgPKTtg0J3fy+phttgfHmx/VZw=; b=GahI6eghxY1KpOtJtw6coBbCQ4ij3mgYmSXzwLEncFwgpeVkjDc680SQK+1mIwXro5 IsvekEA+hOHTNryj5v0fxUn5xVGeJ0MuYw14LtYvfyVZD1TDMgqW2SMG1a+KIoZddHBu VD8u17w8kCiTVZNGKegqIMDgakRoVOhQx36vRPCFnlvoSgoCNaK8vJ49ePEM4eZJODCw VtSv5UgFMqlljIn86r8tQy8fRsTXpLWhJ7TjAi7g1SxW60zyKYqjHUiUs1YeJjlelaKe 3ao26p9GQKKXeQteh3BVw2X18c0Hgo1/w3pv0JQIkywBJx0BJvUrhsbL2bhaZuI2HqcZ chrQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@wdc.com header.s=dkim.wdc.com header.b="Dg1/XK06"; dkim=pass header.i=@opensource.wdc.com header.s=dkim header.b=usycVyQx; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=NONE dis=NONE) header.from=opensource.wdc.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id y7si8722076edl.117.2021.10.21.18.38.34; Thu, 21 Oct 2021 18:38:58 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=fail header.i=@wdc.com header.s=dkim.wdc.com header.b="Dg1/XK06"; dkim=pass header.i=@opensource.wdc.com header.s=dkim header.b=usycVyQx; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=NONE dis=NONE) header.from=opensource.wdc.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231732AbhJVBhD (ORCPT + 99 others); Thu, 21 Oct 2021 21:37:03 -0400 Received: from esa1.hgst.iphmx.com ([68.232.141.245]:44478 "EHLO esa1.hgst.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231336AbhJVBhB (ORCPT ); Thu, 21 Oct 2021 21:37:01 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1634866484; x=1666402484; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=nQmD8tz0siK/3ewe7eS/wMF3ydoICuJwawIePzDCHFY=; b=Dg1/XK060QNjBalvgkFNKSaF1Fl6Ydn7E4aanHFYa264iPNHStHjkXxJ hQJgKOAI3lAMiPNkZUbCY9G3kwAmjAAwiyUIqrA0RgmI+TQ099YITi3R4 rpMxT387PflZmpMMu4YbPX6KpYQSoOZJ5lcqMbQjHgnoiDEFRYjMr7zbO hXzkqdd2EbceO3pzNdIssSgGJLSdObZQs9W2pXbRiOhx4ke8yS/W8e3AZ KYfuUia9OrirdhrTlZlgZd72RK9zB1Hu3j77fqf3QTdO6IIg2Dbda8qLO kOrwkuturaz+nB5Ge/0WjFZD8EuMStwC+ilJtVIypOKfuqLEZT2mi57hF Q==; X-IronPort-AV: E=Sophos;i="5.87,171,1631548800"; d="scan'208";a="295304688" Received: from uls-op-cesaip02.wdc.com (HELO uls-op-cesaep02.wdc.com) ([199.255.45.15]) by ob1.hgst.iphmx.com with ESMTP; 22 Oct 2021 09:34:32 +0800 IronPort-SDR: OJqH4n/BvtmvRyS0k3EwwHKSROYd0jS+y9YiIFndvVj80CtfjMitnpelwN1AexfAPx0LI/z05J W+M1D1p96yPQIAsO/asKRnFqkpKpl1mlMO7dFRKzH2mgQHlGq6Z+0di2XTSQKvemAUVtEiMzTd b7WLyZGMTra1Qbi3fz6woSkERuEg5rW/JDmhHU3+xCzqY8Gpnp9hsvfckTJmjXJwLvQHNgjX8/ XqFcSsUzZK+Px27ZznIhUwqwVBaldpKY8nby9IvK+wBg2lpcE+B6WYBcRxYvt8Te3p7gzJiWk4 ulKru05HatDj59f3vOmHHW6b Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep02.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Oct 2021 18:08:35 -0700 IronPort-SDR: TJrqlxOwfXS7YsXehmNZVoVaNQpWCe71S08EuJxy0ps9hgwrQDxtOdHsRE64gv8rRyyFz8dSjJ ZdfM0/6wzUzOIBDRWcgtAqE1o5rzMxVuj/keM7sx2Ho9zHBowtLhpoYHJ1prw8X8NWp/siGa0f bYEMeYaaYlufHKHJJ2XIXGXuOYEmpngoRzODDiZ84L/cDIoaeBXbbGNnvOsXRAASjv/LI1Xh/1 X/MZ7z+t6q/9RMKnBgBzXUaPOFKyjcgR+9nAj2eLE57S1X77ueJ2rC0FSdGFhjZOKrOo+Tgqji IXc= WDCIronportException: Internal Received: from usg-ed-osssrv.wdc.com ([10.3.10.180]) by uls-op-cesaip02.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Oct 2021 18:34:32 -0700 Received: from usg-ed-osssrv.wdc.com (usg-ed-osssrv.wdc.com [127.0.0.1]) by usg-ed-osssrv.wdc.com (Postfix) with ESMTP id 4Hb6Mq5sMhz1RwtP for ; Thu, 21 Oct 2021 18:34:31 -0700 (PDT) Authentication-Results: usg-ed-osssrv.wdc.com (amavisd-new); dkim=pass reason="pass (just generated, assumed good)" header.d=opensource.wdc.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d= opensource.wdc.com; h=content-transfer-encoding:mime-version :references:in-reply-to:x-mailer:message-id:date:subject:to :from; s=dkim; t=1634866469; x=1637458470; bh=nQmD8tz0siK/3ewe7e S/wMF3ydoICuJwawIePzDCHFY=; b=usycVyQxOLWhFUbFjg6sW3zKN6InQ6Mubf +QIcS9RxcpNThMBc/WwosWe47Rtce79KcevQHPja1tPPHI5Zr9m1BExO1Hqh0sDz jK70vZgQIAB8eDzNFQUw9JH83ej719ywECGM9xt525c8xGBn7edhT3KP5zoo0UGH loGvBeAWu+CUr4vq40jj+izmgRqtD3sx2OWxZUgJw/HzMx9uux/EVINgQ4zth+Hj /Q4E+KULVIUO3RfKzN82s3PmSs/66aJTeigt3E/OYrne7NYzP2JBuxFkRPprjdFz 6uK3DK9Py3NIifq/a63GFZE8hRX+0Zex+KrLp1fIcn3NejraExUA== X-Virus-Scanned: amavisd-new at usg-ed-osssrv.wdc.com Received: from usg-ed-osssrv.wdc.com ([127.0.0.1]) by usg-ed-osssrv.wdc.com (usg-ed-osssrv.wdc.com [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id 3CYpiUSC7FYS for ; Thu, 21 Oct 2021 18:34:29 -0700 (PDT) Received: from toolbox.wdc.com (unknown [10.225.165.39]) by usg-ed-osssrv.wdc.com (Postfix) with ESMTPSA id 4Hb6MZ4H63z1RwtM; Thu, 21 Oct 2021 18:34:17 -0700 (PDT) From: Alistair Francis To: linux-perf-users@vger.kernel.org, linux-riscv@lists.infradead.org Cc: dvhart@infradead.org, tglx@linutronix.de, alexander.shishkin@linux.intel.com, jolsa@redhat.com, namhyung@kernel.org, mingo@redhat.com, atish.patra@wdc.com, linux-kernel@vger.kernel.org, arnd@arndb.de, alistair23@gmail.com, mark.rutland@arm.com, acme@kernel.org, peterz@infradead.org, dave@stgolabs.net, Alistair Francis Subject: [PATCH v5 3/4] selftests: futex: Call the futex syscall from a function Date: Fri, 22 Oct 2021 11:33:42 +1000 Message-Id: <20211022013343.2262938-3-alistair.francis@opensource.wdc.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20211022013343.2262938-1-alistair.francis@opensource.wdc.com> References: <20211022013343.2262938-1-alistair.francis@opensource.wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Alistair Francis Call the futex syscall from a function In preparation for a more complex futex() function let's convert the current macro into two functions. We need two functions to avoid compiler failures as the macro is overloaded. This will allow us to include pre-processor conditionals in the futex syscall functions. Signed-off-by: Alistair Francis --- .../selftests/futex/include/futextest.h | 59 +++++++++++-------- 1 file changed, 34 insertions(+), 25 deletions(-) diff --git a/tools/testing/selftests/futex/include/futextest.h b/tools/te= sting/selftests/futex/include/futextest.h index ddbcfc9b7bac4..c786fffecb8a5 100644 --- a/tools/testing/selftests/futex/include/futextest.h +++ b/tools/testing/selftests/futex/include/futextest.h @@ -48,7 +48,7 @@ typedef volatile u_int32_t futex_t; #endif =20 /** - * futex() - SYS_futex syscall wrapper + * futex_syscall() - SYS_futex syscall wrapper * @uaddr: address of first futex * @op: futex op code * @val: typically expected value of uaddr, but varies by op @@ -58,17 +58,26 @@ typedef volatile u_int32_t futex_t; * @val3: varies by op * @opflags: flags to be bitwise OR'd with op, such as FUTEX_PRIVATE_FLA= G * - * futex() is used by all the following futex op wrappers. It can also b= e + * futex_syscall() is used by all the following futex op wrappers. It ca= n also be * used for misuse and abuse testing. Generally, the specific op wrapper= s - * should be used instead. It is a macro instead of an static inline fun= ction as - * some of the types over overloaded (timeout is used for nr_requeue for - * example). + * should be used instead. * * These argument descriptions are the defaults for all * like-named arguments in the following wrappers except where noted bel= ow. */ -#define futex(uaddr, op, val, timeout, uaddr2, val3, opflags) \ - syscall(SYS_futex, uaddr, op | opflags, val, timeout, uaddr2, val3) +static inline int +futex_syscall(volatile u_int32_t *uaddr, int op, u_int32_t val, struct t= imespec *timeout, + volatile u_int32_t *uaddr2, int val3, int opflags) +{ + return syscall(SYS_futex, uaddr, op | opflags, val, timeout, uaddr2, va= l3); +} + +static inline int +futex_syscall_nr_requeue(volatile u_int32_t *uaddr, int op, u_int32_t va= l, int nr_requeue, + volatile u_int32_t *uaddr2, int val3, int opflags) +{ + return syscall(SYS_futex, uaddr, op | opflags, val, nr_requeue, uaddr2,= val3); +} =20 /** * futex_wait() - block on uaddr with optional timeout @@ -77,7 +86,7 @@ typedef volatile u_int32_t futex_t; static inline int futex_wait(futex_t *uaddr, futex_t val, struct timespec *timeout, int op= flags) { - return futex(uaddr, FUTEX_WAIT, val, timeout, NULL, 0, opflags); + return futex_syscall(uaddr, FUTEX_WAIT, val, timeout, NULL, 0, opflags)= ; } =20 /** @@ -87,7 +96,7 @@ futex_wait(futex_t *uaddr, futex_t val, struct timespec= *timeout, int opflags) static inline int futex_wake(futex_t *uaddr, int nr_wake, int opflags) { - return futex(uaddr, FUTEX_WAKE, nr_wake, NULL, NULL, 0, opflags); + return futex_syscall(uaddr, FUTEX_WAKE, nr_wake, NULL, NULL, 0, opflags= ); } =20 /** @@ -98,8 +107,8 @@ static inline int futex_wait_bitset(futex_t *uaddr, futex_t val, struct timespec *timeout, u_int32_t bitset, int opflags) { - return futex(uaddr, FUTEX_WAIT_BITSET, val, timeout, NULL, bitset, - opflags); + return futex_syscall(uaddr, FUTEX_WAIT_BITSET, val, timeout, NULL, bits= et, + opflags); } =20 /** @@ -109,8 +118,8 @@ futex_wait_bitset(futex_t *uaddr, futex_t val, struct= timespec *timeout, static inline int futex_wake_bitset(futex_t *uaddr, int nr_wake, u_int32_t bitset, int opf= lags) { - return futex(uaddr, FUTEX_WAKE_BITSET, nr_wake, NULL, NULL, bitset, - opflags); + return futex_syscall(uaddr, FUTEX_WAKE_BITSET, nr_wake, NULL, NULL, bit= set, + opflags); } =20 /** @@ -121,7 +130,7 @@ static inline int futex_lock_pi(futex_t *uaddr, struct timespec *timeout, int detect, int opflags) { - return futex(uaddr, FUTEX_LOCK_PI, detect, timeout, NULL, 0, opflags); + return futex_syscall(uaddr, FUTEX_LOCK_PI, detect, timeout, NULL, 0, op= flags); } =20 /** @@ -130,7 +139,7 @@ futex_lock_pi(futex_t *uaddr, struct timespec *timeou= t, int detect, static inline int futex_unlock_pi(futex_t *uaddr, int opflags) { - return futex(uaddr, FUTEX_UNLOCK_PI, 0, NULL, NULL, 0, opflags); + return futex_syscall(uaddr, FUTEX_UNLOCK_PI, 0, NULL, NULL, 0, opflags)= ; } =20 /** @@ -140,8 +149,8 @@ static inline int futex_wake_op(futex_t *uaddr, futex_t *uaddr2, int nr_wake, int nr_wake2= , int wake_op, int opflags) { - return futex(uaddr, FUTEX_WAKE_OP, nr_wake, nr_wake2, uaddr2, wake_op, - opflags); + return futex_syscall_nr_requeue(uaddr, FUTEX_WAKE_OP, nr_wake, nr_wake2= , uaddr2, wake_op, + opflags); } =20 /** @@ -156,8 +165,8 @@ static inline int futex_requeue(futex_t *uaddr, futex_t *uaddr2, int nr_wake, int nr_reque= ue, int opflags) { - return futex(uaddr, FUTEX_REQUEUE, nr_wake, nr_requeue, uaddr2, 0, - opflags); + return futex_syscall_nr_requeue(uaddr, FUTEX_REQUEUE, nr_wake, nr_reque= ue, uaddr2, 0, + opflags); } =20 /** @@ -169,8 +178,8 @@ static inline int futex_cmp_requeue(futex_t *uaddr, futex_t val, futex_t *uaddr2, int nr_w= ake, int nr_requeue, int opflags) { - return futex(uaddr, FUTEX_CMP_REQUEUE, nr_wake, nr_requeue, uaddr2, - val, opflags); + return futex_syscall_nr_requeue(uaddr, FUTEX_CMP_REQUEUE, nr_wake, nr_r= equeue, uaddr2, + val, opflags); } =20 /** @@ -185,8 +194,8 @@ static inline int futex_wait_requeue_pi(futex_t *uaddr, futex_t val, futex_t *uaddr2, struct timespec *timeout, int opflags) { - return futex(uaddr, FUTEX_WAIT_REQUEUE_PI, val, timeout, uaddr2, 0, - opflags); + return futex_syscall(uaddr, FUTEX_WAIT_REQUEUE_PI, val, timeout, uaddr2= , 0, + opflags); } =20 /** @@ -200,8 +209,8 @@ static inline int futex_cmp_requeue_pi(futex_t *uaddr, futex_t val, futex_t *uaddr2, int n= r_wake, int nr_requeue, int opflags) { - return futex(uaddr, FUTEX_CMP_REQUEUE_PI, nr_wake, nr_requeue, uaddr2, - val, opflags); + return futex_syscall_nr_requeue(uaddr, FUTEX_CMP_REQUEUE_PI, nr_wake, n= r_requeue, uaddr2, + val, opflags); } =20 /** --=20 2.31.1