From patchwork Fri Oct 22 01:33:40 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alistair Francis X-Patchwork-Id: 12576829 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1791AC433FE for ; Fri, 22 Oct 2021 01:34:32 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id A3B4B610D0 for ; Fri, 22 Oct 2021 01:34:31 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org A3B4B610D0 Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=opensource.wdc.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:Message-Id:Date:Subject:Cc :To:From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References: List-Owner; bh=dYE7eGaeJQyz0Ci1KSB/74sHwc8VNrLQ4dlDVYwPHUM=; b=F26vLM7ZxYgCUY VpjHls0kgja+t/K70OL2SSBEoJhoSCB7swa2TrHoHDNYGfgF4EnPjS9QdVb3Zpsz4TvUigc7pfIQz HUCtxJSzhhjptAf4EVQoFwkKzYjvHVB+oKfaTlmFpnD+jHCP8EZR7wp7yMNv/o8GOaJP1hxNFIIcY cyCSWWRlsjHFn+PaF0/KMfvbg03N9wK8THhN5NlkjnX25gj3JblTtUJvsLwOfLIoQ1sbpiMMWfq6j +6E3WbNXtofL/IPi2MIfzKVj55dF2ByCggU/M0TusXv+DibEbboxrZoKm8KP4LbwBS0lOUfzjgZ+L W804HkwwtTB40B1ij0JQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mdjRj-009QPb-P3; Fri, 22 Oct 2021 01:34:11 +0000 Received: from esa2.hgst.iphmx.com ([68.232.143.124]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mdjRh-009QOj-2m for linux-riscv@lists.infradead.org; Fri, 22 Oct 2021 01:34:10 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1634866448; x=1666402448; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=m97MnHAZ25lH2gTLkW56Y00NrpnkCF1Bb4DbwT8g/50=; b=L6XsUq4ozC+tiPzeWlr/sfDOGoBcFsFC1HBCpfsceSFhJfk82usoyu8U yFe/FNf/r+matOYUS6PdgKYbHWsUiaR21s6cbBFzHO+aQf2ft14iu1UE7 miRXIEDotqBrDh27ua6haZf/WE3pgmNqIuIBOPOBA3AQvUcEdEwP98M6P Qx3o5LAY8AoPBjV6/XPF8xUAMUVCi0JAzOfVHzsxMfPCyfDF+Ejj7McTY 6ME3VA8+tbobjHiLG777J+LIKUNWczVOt11+VZC0f9T5hQFberig8CINA GTfE57brFRklI/EqicmPplt0ZaFr4Ag9wm8Zax253NU2R7kYlO8tuicUm w==; X-IronPort-AV: E=Sophos;i="5.87,171,1631548800"; d="scan'208";a="287445369" Received: from h199-255-45-14.hgst.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 22 Oct 2021 09:34:06 +0800 IronPort-SDR: XEVwV2Ne3481X9DfxyPQTaeGfDo8l19hiHtMosI+c+H+n0J1l8Q1RFX8OeJq1RPawIZUc8bq3B Zq6GOqypo6bU42QXOVfIbIcmDlXrbYFNBlOcBa5zVVE0vTjDqDTWO+in2VB9jgw3cW4q95wmxD i0q+Lyl2qb2TWgzB88/tQI/YeUphr+/UmF1NhFGrVMPlGFhHv1TJlRw25mbhvC2mdIGmm0JQf4 x4gYm9QOcm4ldfENSVo9tdZYEXHYwgrqSqzUQlTzVqLgVZkHQPduuRPpcDQHUGrXXs9WPTF2Em LQbGiR2gWaRndPyCqhd3G86K Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Oct 2021 18:09:41 -0700 IronPort-SDR: dEDX4n8gk6+yTyRI89rxQEJdpQetQZ9qyacPLdpRMOPupz8QJaCsEXoXj/vRyBtqiAdstt3sxk uD2oUEvotFUEV5nWfvSOm8EkiZVuD89go4n0QQy5t58qG750bmhcFcmSg0JlP4wgjjBncHWj2f YXjUr/k9MNHQbWn6T+RMDn1tLgHurKi7mXOWAQ98UvPQvldY/WgVQy1hm3SeRvYAQz8Elv3jOX dShyy8HovD25xzc36Yl87MTqOSSvUy5RM4EPYfZk6YDv1zyumLZXdYqwECXr3REZneqFnWnLvD 7X0= 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:06 -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 4Hb6MK4G9kz1SGYN for ; Thu, 21 Oct 2021 18:34:05 -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 :x-mailer:message-id:date:subject:to:from; s=dkim; t=1634866444; x=1637458445; bh=m97MnHAZ25lH2gTLkW56Y00NrpnkCF1Bb4DbwT8g/50=; b= Hl+HmMG70w0gT7rLNv7TyC7bez2Wy3hlf3tLx0jqMV+BhM5ywmIhpjJzIz/1RHhG HD+R8Pq4sJGaN+sKzCq84eFJHJMna/ygU59CUtve6mZltjoJRbILFCbm6rCWiAqB YP8uLnN7oLYSjdjjP5zmwmm021qtLbNVMdyIGcbQjBbRkqjjvE700Pv9N7I55obO K1t0582OlwEt/UWXOZrXDVyM0rwf5VER4bCM2CUGufiAzYNk/GNN54urjh6O1ljl qQiSMeHiCvJzZ3FfJdoH9T2u+QbC/rgDTRkXrnEodohI7KIOgeZ6Ek/ZSiCJ3WeP 9oN760y8b+WAFN07IiU6KQ== 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 K-y-ZSisbcm8 for ; Thu, 21 Oct 2021 18:34:04 -0700 (PDT) Received: from toolbox.wdc.com (unknown [10.225.165.39]) by usg-ed-osssrv.wdc.com (Postfix) with ESMTPSA id 4Hb6M32PPzz1RvTm; Thu, 21 Oct 2021 18:33:50 -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 , Davidlohr Bueso Subject: [PATCH v5 1/4] perf bench futex: Call the futex syscall from a function Date: Fri, 22 Oct 2021 11:33:40 +1000 Message-Id: <20211022013343.2262938-1-alistair.francis@opensource.wdc.com> X-Mailer: git-send-email 2.31.1 MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20211021_183409_279480_DD66EA1C X-CRM114-Status: GOOD ( 17.92 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org From: Alistair Francis 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 Acked-by: Davidlohr Bueso --- tools/perf/bench/futex.h | 43 ++++++++++++++++++++++++---------------- 1 file changed, 26 insertions(+), 17 deletions(-) diff --git a/tools/perf/bench/futex.h b/tools/perf/bench/futex.h index b3853aac3021c..ebdc2b032afc1 100644 --- a/tools/perf/bench/futex.h +++ b/tools/perf/bench/futex.h @@ -28,7 +28,7 @@ struct bench_futex_parameters { }; /** - * 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 @@ -38,17 +38,26 @@ struct bench_futex_parameters { * @val3: varies by op * @opflags: flags to be bitwise OR'd with op, such as FUTEX_PRIVATE_FLAG * - * futex() is used by all the following futex op wrappers. It can also be + * futex_syscall() is used by all the following futex op wrappers. It can also be * used for misuse and abuse testing. Generally, the specific op wrappers - * should be used instead. It is a macro instead of an static inline function 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 below. */ -#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 timespec *timeout, + volatile u_int32_t *uaddr2, int val3, int opflags) +{ + return syscall(SYS_futex, uaddr, op | opflags, val, timeout, uaddr2, val3); +} + +static inline int +futex_syscall_nr_requeue(volatile u_int32_t *uaddr, int op, u_int32_t val, int nr_requeue, + volatile u_int32_t *uaddr2, int val3, int opflags) +{ + return syscall(SYS_futex, uaddr, op | opflags, val, nr_requeue, uaddr2, val3); +} /** * futex_wait() - block on uaddr with optional timeout @@ -57,7 +66,7 @@ struct bench_futex_parameters { static inline int futex_wait(u_int32_t *uaddr, u_int32_t val, struct timespec *timeout, int opflags) { - return futex(uaddr, FUTEX_WAIT, val, timeout, NULL, 0, opflags); + return futex_syscall(uaddr, FUTEX_WAIT, val, timeout, NULL, 0, opflags); } /** @@ -67,7 +76,7 @@ futex_wait(u_int32_t *uaddr, u_int32_t val, struct timespec *timeout, int opflag static inline int futex_wake(u_int32_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); } /** @@ -76,7 +85,7 @@ futex_wake(u_int32_t *uaddr, int nr_wake, int opflags) static inline int futex_lock_pi(u_int32_t *uaddr, struct timespec *timeout, int opflags) { - return futex(uaddr, FUTEX_LOCK_PI, 0, timeout, NULL, 0, opflags); + return futex_syscall(uaddr, FUTEX_LOCK_PI, 0, timeout, NULL, 0, opflags); } /** @@ -85,7 +94,7 @@ futex_lock_pi(u_int32_t *uaddr, struct timespec *timeout, int opflags) static inline int futex_unlock_pi(u_int32_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); } /** @@ -97,8 +106,8 @@ static inline int futex_cmp_requeue(u_int32_t *uaddr, u_int32_t val, u_int32_t *uaddr2, int nr_wake, 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_requeue, uaddr2, + val, opflags); } /** @@ -113,8 +122,8 @@ static inline int futex_wait_requeue_pi(u_int32_t *uaddr, u_int32_t val, u_int32_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); } /** @@ -130,8 +139,8 @@ static inline int futex_cmp_requeue_pi(u_int32_t *uaddr, u_int32_t val, u_int32_t *uaddr2, int nr_requeue, int opflags) { - return futex(uaddr, FUTEX_CMP_REQUEUE_PI, 1, nr_requeue, uaddr2, - val, opflags); + return futex_syscall_nr_requeue(uaddr, FUTEX_CMP_REQUEUE_PI, 1, nr_requeue, uaddr2, + val, opflags); } #endif /* _FUTEX_H */ From patchwork Fri Oct 22 01:33:41 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alistair Francis X-Patchwork-Id: 12576831 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 35E95C433EF for ; Fri, 22 Oct 2021 01:34:33 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id E2B4E610D0 for ; Fri, 22 Oct 2021 01:34:32 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org E2B4E610D0 Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=opensource.wdc.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=3z/x8A7W4ABpq+pI7n9D5b661jMDMrkI5R6R/cAIzLU=; b=1//3UcKAz8qW8N TgQpJkC/IXUjTLcC/v+WgxJ6skEUeV8LnfjF/N9ziaCQfsWdfRuhI5e30h7JOomMOTdo2FtiSCADf 2SRAijVe3lZFc/Oi0ikoPx0Gb/4gd19W12VqP/z99rHTAIPVQHJWD0TuAPGiFi/w4FdOjhBzj0hDd 26pV9WqKXs2sIXYtQmWeIMTBVvTcilYA5uIbdzlV2yCXDovUHZ9FEi1GXr36L1iMFwveXDOZzcbru Y6yKI4hmXkiHMGGl8CvrJ62ZpXiViPcW42DAkKbBDTo0PlZqHEb1vyWPMBlFcsLk4A2jGMxuLZllp jQGc7V2QFjihROoZmadw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mdjRu-009QRR-Jw; Fri, 22 Oct 2021 01:34:22 +0000 Received: from esa5.hgst.iphmx.com ([216.71.153.144]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mdjRs-009QQf-In for linux-riscv@lists.infradead.org; Fri, 22 Oct 2021 01:34:21 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1634866458; x=1666402458; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=0jezQdAQdWhHmDMWZLYcoD4DYC4/yRryNOc0ZTLZ39I=; b=bIm7CLWKgMM80P1VZIFdsZOnS3bEPzGqk1ohdUtQjfEIBWFeByIKqBEI k4DAne+aLAVE00jbjxuJmFl/aLj971UnLO8dyZ/YqT5J06xcCEY2QIdui ITHw+ik2jzQaFk0UI4tMLEcRknZ2TAmZ+46ukqC/xO/jAeJ0ltzkxUhN1 ZZnFyD39jx59vizGpL2behTZ5irfvba2/BrdWLTuiKXsOp5VWT8S77Igg X2BVIISw5t/ioa+jIzHmFsilNiCNdZBDpoZ6FDENqkVjB6DTJIhoNyk5Q BihvSIjMM6w4v+8fH/2m+ls69fGDRNx6l5Gawv9RHTAznFOBwzkrD9gif w==; X-IronPort-AV: E=Sophos;i="5.87,171,1631548800"; d="scan'208";a="183571767" Received: from h199-255-45-14.hgst.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 22 Oct 2021 09:34:18 +0800 IronPort-SDR: zq1l/TntoH1qg7PkM1Ku9hnzx52YvrMAEQkNZtvTEpKe3VtKyty0/B3wA3xEuiSKxNuMsKc7Kt n6YLobEtk+mctKFjE1ah0fAgQcJIRVWUNccSsCOY/dU+vEFnpYmke5dJkkGNcFigtuo1XsxSog O2XyTZeD/QXcQCrnmX4AyXX07VRu/gAJ51SwM0vUvBNANuZLhj+N78yydnxlto0mrHFUGQDZyb xEtDQkhrYefnop5QWCxS6r5/FkLxLrLy0uEM9+h5NSft9/6rELlXAFUXaA7ov6o2l+ScEO7HZJ DrKJrMz1cryTmqyIEKh+jiTS Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Oct 2021 18:09:55 -0700 IronPort-SDR: 41bDs95KdXswoW3qJszu9dg1ZSJtrtU23s2i4WHpuj2jgg6MWVGQlMGFIw4k+3DDfldRYvGyt8 qky5Tal4FiadyKg+iACqKxAAZdi4CD63V8+u2E8QU/I7rbB4ngV6XVE210FELSfHUx04Ah8Wls /2E42ZfmZAQZn3So5F5QxxmVDJqEOSdnx36+/iRcHJ9hFLZGAewM49HjeBRAFk08ferDgVEoyf lo0u7l4BVjN73W1T/tsAtOD20tAhXvx5qmm25F1yrna03qIyOPj6/eLqoWwNgCYUrFX7khIluK Ez4= 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:20 -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 4Hb6MZ5bLRz1SGYR for ; Thu, 21 Oct 2021 18:34:18 -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=1634866457; x=1637458458; bh=0jezQdAQdWhHmDMWZL YcoD4DYC4/yRryNOc0ZTLZ39I=; b=srYgOZj35H5p9OIJQafrSjr8v7mCjz+hup H56NYdLtorEQPLbINDMzDLT4r+FJEn7KMI8jdsV4oo+l7Uuq/NISmJMLZODbwGk9 S2Ha3vj8MPkrHvONyQlGO/ZxWJ6xyyf1Vq+xvot3DtCGsdZ2ap4+6uxcI4nWlcSY GJfNTGvXueh2A41SdyjIkRt89B1pHtcbW7AZ3vRroWby9RBF39mNDJv55D3N1PPc 711XAvSiuygtbyeQwFqca6UDVI2SC/ZO1A6V6ySbbbkOElqONZXEbS36PSofpvde /BgQZKvoJxz/gZP5RdVHfHNqHQRFmaz3MYdrrxrVcIvlACCsrrYA== 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 RTWnDPK4zEje for ; Thu, 21 Oct 2021 18:34:17 -0700 (PDT) Received: from toolbox.wdc.com (unknown [10.225.165.39]) by usg-ed-osssrv.wdc.com (Postfix) with ESMTPSA id 4Hb6MK10B0z1Rvlw; Thu, 21 Oct 2021 18:34:04 -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 , Davidlohr Bueso Subject: [PATCH v5 2/4] perf bench futex: Add support for 32-bit systems with 64-bit time_t Date: Fri, 22 Oct 2021 11:33:41 +1000 Message-Id: <20211022013343.2262938-2-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 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20211021_183420_657771_B28C179E X-CRM114-Status: GOOD ( 17.34 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org From: Alistair Francis Some 32-bit architectures (such are 32-bit RISC-V) only have a 64-bit time_t and as such don't have the SYS_futex syscall. This patch will allow us to use the SYS_futex_time64 syscall on those platforms. This also converts the futex calls to be y2038 safe (when built for a 5.1+ kernel). Signed-off-by: Alistair Francis Reviewed-by: Arnd Bergmann Acked-by: Davidlohr Bueso --- tools/perf/bench/futex.h | 43 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 40 insertions(+), 3 deletions(-) diff --git a/tools/perf/bench/futex.h b/tools/perf/bench/futex.h index ebdc2b032afc1..6a7dd86871eb8 100644 --- a/tools/perf/bench/futex.h +++ b/tools/perf/bench/futex.h @@ -8,10 +8,12 @@ #ifndef _FUTEX_H #define _FUTEX_H +#include #include #include #include #include +#include struct bench_futex_parameters { bool silent; @@ -28,7 +30,7 @@ struct bench_futex_parameters { }; /** - * futex_syscall() - SYS_futex syscall wrapper + * futex_syscall() - __NR_futex syscall wrapper * @uaddr: address of first futex * @op: futex op code * @val: typically expected value of uaddr, but varies by op @@ -49,14 +51,49 @@ static inline int futex_syscall(volatile u_int32_t *uaddr, int op, u_int32_t val, struct timespec *timeout, volatile u_int32_t *uaddr2, int val3, int opflags) { - return syscall(SYS_futex, uaddr, op | opflags, val, timeout, uaddr2, val3); +#if defined(__NR_futex_time64) + if (sizeof(*timeout) != sizeof(struct __kernel_old_timespec)) { + int ret = syscall(__NR_futex_time64, uaddr, op | opflags, val, timeout, + uaddr2, val3); + if (ret == 0 || errno != ENOSYS) + return ret; + } +#endif + +#if defined(__NR_futex) + if (sizeof(*timeout) == sizeof(struct __kernel_old_timespec)) + return syscall(__NR_futex, uaddr, op | opflags, val, timeout, uaddr2, val3); + + if (timeout && timeout->tv_sec == (long)timeout->tv_sec) { + struct __kernel_old_timespec ts32; + + ts32.tv_sec = (__kernel_long_t) timeout->tv_sec; + ts32.tv_nsec = (__kernel_long_t) timeout->tv_nsec; + + return syscall(__NR_futex, uaddr, op | opflags, val, ts32, uaddr2, val3); + } else if (!timeout) { + return syscall(__NR_futex, uaddr, op | opflags, val, NULL, uaddr2, val3); + } +#endif + + errno = ENOSYS; + return -1; } static inline int futex_syscall_nr_requeue(volatile u_int32_t *uaddr, int op, u_int32_t val, int nr_requeue, volatile u_int32_t *uaddr2, int val3, int opflags) { - return syscall(SYS_futex, uaddr, op | opflags, val, nr_requeue, uaddr2, val3); +#if defined(__NR_futex_time64) + int ret = syscall(__NR_futex_time64, uaddr, op | opflags, val, nr_requeue, + uaddr2, val3); + if (ret == 0 || errno != ENOSYS) + return ret; +#endif + +#if defined(__NR_futex) + return syscall(__NR_futex, uaddr, op | opflags, val, nr_requeue, uaddr2, val3); +#endif } /** From patchwork Fri Oct 22 01:33:42 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alistair Francis X-Patchwork-Id: 12576833 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 10C54C433F5 for ; Fri, 22 Oct 2021 01:34:50 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id C5E726112D for ; Fri, 22 Oct 2021 01:34:49 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org C5E726112D Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=opensource.wdc.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=Be99Lh6u0a94ZXT4i8RtIVttN4ks7LcYSOJATYIxQTs=; b=eVp6h9J17m4Vc9 JhDFv1XC04JuY7gNUdjXGf0KUCj+aqXsSq+PWSnfFcoblHhrQ2OjLKwDYjxtVJVQs8Hh1KtpeuJsP WLbtDjLPYaaKsN1qZQLPkbwasfJLQPvOB5b1x7ReLKT/GNl+PukYf86Ngo50SWXp2ivGZ2YExJuz9 9vm4jsF71vt6ZYeqyMsk6iD3CsRSUiaeLOPoWavgm566V12AQw30nceZ9xS3xOeSvuIeeD0RMynS7 mMxe3plkLcxgBIKaFCBVE/4jJCCaL96RkMkE3ghDowxAZrbLalsDhc/Mh4QW05TdcJBAWCpwR/an4 awGBrz2B5ssSs+GcRo8A==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mdjS9-009QY2-Ha; Fri, 22 Oct 2021 01:34:37 +0000 Received: from esa4.hgst.iphmx.com ([216.71.154.42]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mdjS5-009QVi-UN for linux-riscv@lists.infradead.org; Fri, 22 Oct 2021 01:34:35 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1634866473; x=1666402473; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=nQmD8tz0siK/3ewe7eS/wMF3ydoICuJwawIePzDCHFY=; b=JQzmuoBRtt0nTELwIvb/odDalWOIKekWcotMMNOvzzPg3MpK4GxHc+u1 QdAnMv5+rTP+T9hnO5+zBclzbhZGf8a1FXdjOUSRdi3HfNbr2Lsej3LVh SJmhlyU03D2dDOvmKzdnZi9i5vCfiswSkcVd0NOSWGJ1Ds7GDABLID0XI YotuPG08YTHrfEF+4n/CW/qjMt3i/JZyOovuJ7GA7oWXirr4AdXG81Ifi zKgUcmteamAfKajJ1QWyjbU/a5+cd1DCfIzdxRe+nhe6RSASQSXGTY62e U5rcaqCGPD/cj2DneOhiH/N/evHf11H9pbEWFF1segXIdFXalDAhbZTMO g==; X-IronPort-AV: E=Sophos;i="5.87,171,1631548800"; d="scan'208";a="182583844" Received: from uls-op-cesaip01.wdc.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 22 Oct 2021 09:34:31 +0800 IronPort-SDR: 1w2B+wdRphzKuVjJGzBK6zXMOUqppxDrXDjDDI0kra2CHdpYpGVRI00XJNq6boxeF2v9Ie7QCE CrIpluozIDWLBBbnkg0szr166X4K7uVaZzaXHtTZITM2J2saiNRMpLkqGIqygHxxXbbbQomJm9 oDLYPhj/HcCk5XHyg9V32IcrTjqwESQUHLskk0Gt+ggrXM+0VghKL3saiyup4gMv5uruJWVVFj wIVJ+a8N8MoleQfH8BkRRnf890HEyaMVP06yVU2kgLY13RmathiT1I0d50C0n7dNW2wPaMsb3o dHGyTUJ2GsJd80zU1Dk+TWuT Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Oct 2021 18:10:07 -0700 IronPort-SDR: SuK0ny9pMoj7dUmE9WXk1krKZf4uot1MSnzuuSpDIsD5PQ7xlMCdkFeAkhoNWvmUSVVPSbGhG0 Qh1eKubCtCttGCBxLwV6QIza5pcUnUPry1Vi73pUb+tKRtp/Av6Hvo5y+jfuhfrqCqHktOuLI2 ACElMOBFk/84c9RQAEbaAF/VOzh350h3mdr06MgX0AzkHmuaOV2wy/34byEL7Hnnn9llYoZABs AieTRvMy1ZzjD91SUkKCgIshMw4skpO1hqOJQD2tkaQrhl8Rd6BvBMh9Zz9MEbNHPruv9g9nfM EOw= 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 4Hb6Mq64Jyz1SGYP 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=1634866470; x=1637458471; bh=nQmD8tz0siK/3ewe7e S/wMF3ydoICuJwawIePzDCHFY=; b=tLk+rTVIC+Uq1QqJ4u9+meYj1Sqse67rFB lzPQXFcCX5AlQ9T0rfHt8GxkLNNIhZe0E1d7fIttsCNVZ1WKKzUltid82ELIu83L 7FUQojkmrgpDEPoh8liZluWRESkddQWFlECw9iImdcOJ4IWI6ASGmQ8SLm10UgnM z4LOVAgmoBpPwe+K+on88LkbJJsxluCvMjx6KwHTmnHY5MffsfKCr56e5laiLxpu psBKn35ZuDcnOGbOk7q0/2b8DGE+2eNMhdfOcdX6fyrf8avLMnVOxG1lDmMZ+r1D y0w1qqoyZkJ0e8+U4dtENa8MFmOSGWLxcdNhG14lMQNfXXJKGuug== 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 ovPuPKNtrsLS for ; Thu, 21 Oct 2021 18:34:30 -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 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20211021_183434_121581_6416344F X-CRM114-Status: GOOD ( 17.42 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.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/testing/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 /** - * 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_FLAG * - * futex() is used by all the following futex op wrappers. It can also be + * futex_syscall() is used by all the following futex op wrappers. It can also be * used for misuse and abuse testing. Generally, the specific op wrappers - * should be used instead. It is a macro instead of an static inline function 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 below. */ -#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 timespec *timeout, + volatile u_int32_t *uaddr2, int val3, int opflags) +{ + return syscall(SYS_futex, uaddr, op | opflags, val, timeout, uaddr2, val3); +} + +static inline int +futex_syscall_nr_requeue(volatile u_int32_t *uaddr, int op, u_int32_t val, int nr_requeue, + volatile u_int32_t *uaddr2, int val3, int opflags) +{ + return syscall(SYS_futex, uaddr, op | opflags, val, nr_requeue, uaddr2, val3); +} /** * 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 opflags) { - return futex(uaddr, FUTEX_WAIT, val, timeout, NULL, 0, opflags); + return futex_syscall(uaddr, FUTEX_WAIT, val, timeout, NULL, 0, opflags); } /** @@ -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); } /** @@ -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, bitset, + opflags); } /** @@ -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 opflags) { - return futex(uaddr, FUTEX_WAKE_BITSET, nr_wake, NULL, NULL, bitset, - opflags); + return futex_syscall(uaddr, FUTEX_WAKE_BITSET, nr_wake, NULL, NULL, bitset, + opflags); } /** @@ -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, opflags); } /** @@ -130,7 +139,7 @@ futex_lock_pi(futex_t *uaddr, struct timespec *timeout, 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); } /** @@ -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); } /** @@ -156,8 +165,8 @@ static inline int futex_requeue(futex_t *uaddr, futex_t *uaddr2, int nr_wake, int nr_requeue, 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_requeue, uaddr2, 0, + opflags); } /** @@ -169,8 +178,8 @@ static inline int futex_cmp_requeue(futex_t *uaddr, futex_t val, futex_t *uaddr2, int nr_wake, 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_requeue, uaddr2, + val, opflags); } /** @@ -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); } /** @@ -200,8 +209,8 @@ static inline int futex_cmp_requeue_pi(futex_t *uaddr, futex_t val, futex_t *uaddr2, int nr_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, nr_requeue, uaddr2, + val, opflags); } /** From patchwork Fri Oct 22 01:33:43 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alistair Francis X-Patchwork-Id: 12576835 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 67115C433EF for ; Fri, 22 Oct 2021 01:34:58 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 2C1FA6112D for ; Fri, 22 Oct 2021 01:34:58 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 2C1FA6112D Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=opensource.wdc.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=0sGGWgZdMhSp3uJrjKupEV0ntSGDLoesQ95k2OBvv7A=; b=qJ02NpxYaZ0FQo FL1zh8qNmZBGo59ONlfEd7zgaszenrUQiOWTgXyBXDhmoy89iYC4twHw138jw5hq6Eu04lG3RQ+Fd oUEgcneYBbzjI7DLHkAWhfkxfyDRsngQv8P9uD9BsRlWYwuju06ZV6dJSS/od6I2ia1eIwPryVmjv eEu/NMy4DOXCh+Blq6YKXp7GlWqqvASeAluahp6GF/KJ0Yx1sOxgIbR40eOH+UWawgwwfe17EWAWD CftTTFrGD5zpoINveZlydRGzfHVQSwnt0zYfA3kwQNHiE5390tTk5vtKNXXK932o3S0TRko4KG3U7 LHPO1YcZqXKeYuAPtJrw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mdjSM-009QdP-Qu; Fri, 22 Oct 2021 01:34:50 +0000 Received: from esa2.hgst.iphmx.com ([68.232.143.124]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mdjSH-009QaJ-PL for linux-riscv@lists.infradead.org; Fri, 22 Oct 2021 01:34:50 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1634866485; x=1666402485; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=uekV2slH9LXIzmi+5+Ec6CuXKwui2fjecjIGu1he6h0=; b=pjnSWPuPL4y7EGDBagDkUYOAwMP7OMN75QTsWnkWmokoimjbLrO5x+Vk rfHgxbhrvt9Hlfd3DMDlURdSQQQVGUKUBvjtQO9R4F2SR4KOO9M4iJwHj j1du//imB+ImWSgwEtXnxUJt5ei/D8TsBg1nigl7wBB+etJUSvpQghwXl MDeSlrk8MJts/SPMN1vRbWCYFLqUpCfA0tmSZwKRkKT6VDBYyBBuckVAf Pz0dor1HmUFo0i8j5ipB7QUAaTvKrZR2n9mYZbTMnMXZmo7DvXsHTFpzI 4Tz+SRoiVkWm/OuY+C0wV25EneWUDj2NJC6pi0HMYRwcWd7OvayBS1NPT A==; X-IronPort-AV: E=Sophos;i="5.87,171,1631548800"; d="scan'208";a="287445424" 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:45 +0800 IronPort-SDR: LJKwe6FlO09kKX6TK/2MWa9AT3/T6UO1TWsveh/aZ1ecEJAoQK3jAQYjmO2dLAKpIL9bt/iSXB hhquVFn7LguHBXiUEREjJOkk+kd9i0HBh2IRAK6hjpqn30HN6kgjnssJU/qVu7And/aSoOSLu3 GpmCmRXuawrfynQ9zp+RVqICHy0ZHnDtPUlYxbBWwc2KmrRqBQPA0ef732cOn/9KiZhFZgW2Ce V2FStwzuaCzJs/swG8uz0L1LSPKcs0MDOSrUq8oFUd/2p6nPXmo3BVaLwLavKRLn4dcwOhmQ4c r1A8M0bqhtcjICu5+Dl6WiIZ 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:47 -0700 IronPort-SDR: 1Dar43Wvi/YY2DxhoF8sqfB3z0FnJjTVidoMSsd2ha9IqkcWcYyHLu3SosyU7vmPnA/etflwLf qG7ZzX4+Omi00Sfah0qQ/oxJznhUAG6Pb3SRDnfIUeJyAp/OSy2IR8Uvs2G6vWDY0zuF9922GN uKZi/Ns0m9Tkig1noTeFeum+92oudiBLRZ6MTRm/Lc31On6ygSkk7cuP7VwQ3rNLZMibudia6s oU/DIDUmVtXLTG468xrTi2b1y31Blwf2abwkgwZzdRn5jeGd1DlOuNCuTCDMYDnnM9wrL6UUjY XK8= 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:45 -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 4Hb6N43tV8z1RwtP for ; Thu, 21 Oct 2021 18:34:44 -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=1634866483; x=1637458484; bh=uekV2slH9LXIzmi+5+ Ec6CuXKwui2fjecjIGu1he6h0=; b=cciO0ud2x6Nw+4POPJ1cL9lSzePeHfI63x 1Isa+oyimEZxe2hhBJcL0j6HM2pK1kT5xt/Mg4srhw51EZE4hzILtNPKqynDyzuP P5wlnS/FujMyJYNhGXxdPO8vLj+HcAF//IwK1aqtxbjRF6aQBg6bXxopWQsPrkpI yuNmpMSqlxXyfV6kdqC0Y75ni63ipH/ENlAByL3QTkRacEHzISTOA0UMjRBFB1pF 1t1++muaDbwYjcOIh9v8E+18MnmsiPPefn2ShYi9mHcp+8j574z12ud1p1Mz67Go tu+uDYaPLpMSW4wMs6z3em7APPr2hfk+L7N7btOy4XkoDXAsTlPQ== 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 IvStxVnPcuvP for ; Thu, 21 Oct 2021 18:34:43 -0700 (PDT) Received: from toolbox.wdc.com (unknown [10.225.165.39]) by usg-ed-osssrv.wdc.com (Postfix) with ESMTPSA id 4Hb6Mq37m6z1RvlC; Thu, 21 Oct 2021 18:34:30 -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 4/4] selftests: futex: Add support for 32-bit systems with 64-bit time_t Date: Fri, 22 Oct 2021 11:33:43 +1000 Message-Id: <20211022013343.2262938-4-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 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20211021_183447_460356_B359ED47 X-CRM114-Status: GOOD ( 17.71 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org From: Alistair Francis Some 32-bit architectures (such are 32-bit RISC-V) only have a 64-bit time_t and as such don't have the SYS_futex syscall. This patch will allow us to use the SYS_futex_time64 syscall on those platforms. This also converts the futex calls to be y2038 safe (when built for a 5.1+ kernel). Signed-off-by: Alistair Francis --- .../futex/functional/futex_requeue_pi.c | 2 +- .../selftests/futex/include/futextest.h | 44 ++++++++++++++++++- 2 files changed, 43 insertions(+), 3 deletions(-) diff --git a/tools/testing/selftests/futex/functional/futex_requeue_pi.c b/tools/testing/selftests/futex/functional/futex_requeue_pi.c index 1ee5518ee6b7f..d3673996fed4e 100644 --- a/tools/testing/selftests/futex/functional/futex_requeue_pi.c +++ b/tools/testing/selftests/futex/functional/futex_requeue_pi.c @@ -294,7 +294,7 @@ int unit_test(int broadcast, long lock, int third_party_owner, long timeout_ns) secs = (ts.tv_nsec + timeout_ns) / 1000000000; ts.tv_nsec = ((int64_t)ts.tv_nsec + timeout_ns) % 1000000000; ts.tv_sec += secs; - info("ts.tv_sec = %ld\n", ts.tv_sec); + info("ts.tv_sec = %lld\n", ts.tv_sec); info("ts.tv_nsec = %ld\n", ts.tv_nsec); tsp = &ts; } diff --git a/tools/testing/selftests/futex/include/futextest.h b/tools/testing/selftests/futex/include/futextest.h index c786fffecb8a5..b303d0d492ff7 100644 --- a/tools/testing/selftests/futex/include/futextest.h +++ b/tools/testing/selftests/futex/include/futextest.h @@ -17,10 +17,12 @@ #ifndef _FUTEXTEST_H #define _FUTEXTEST_H +#include #include #include #include #include +#include typedef volatile u_int32_t futex_t; #define FUTEX_INITIALIZER 0 @@ -69,14 +71,52 @@ static inline int futex_syscall(volatile u_int32_t *uaddr, int op, u_int32_t val, struct timespec *timeout, volatile u_int32_t *uaddr2, int val3, int opflags) { - return syscall(SYS_futex, uaddr, op | opflags, val, timeout, uaddr2, val3); +#if defined(__NR_futex_time64) + if (sizeof(*timeout) != sizeof(struct __kernel_old_timespec)) { + int ret = syscall(__NR_futex_time64, uaddr, op | opflags, val, timeout, + uaddr2, val3); + if (ret == 0 || errno != ENOSYS) + return ret; + } +#endif + +#if defined(__NR_futex) + if (sizeof(*timeout) == sizeof(struct __kernel_old_timespec)) + return syscall(__NR_futex, uaddr, op | opflags, val, timeout, uaddr2, val3); + + if (timeout && timeout->tv_sec == (long)timeout->tv_sec) { + struct __kernel_old_timespec ts32; + + ts32.tv_sec = (__kernel_long_t) timeout->tv_sec; + ts32.tv_nsec = (__kernel_long_t) timeout->tv_nsec; + + return syscall(__NR_futex, uaddr, op | opflags, val, ts32, uaddr2, val3); + } else if (!timeout) { + return syscall(__NR_futex, uaddr, op | opflags, val, NULL, uaddr2, val3); + } +#endif + + errno = ENOSYS; + return -1; } static inline int futex_syscall_nr_requeue(volatile u_int32_t *uaddr, int op, u_int32_t val, int nr_requeue, volatile u_int32_t *uaddr2, int val3, int opflags) { - return syscall(SYS_futex, uaddr, op | opflags, val, nr_requeue, uaddr2, val3); +#if defined(__NR_futex_time64) + int ret = syscall(__NR_futex_time64, uaddr, op | opflags, val, nr_requeue, + uaddr2, val3); + if (ret == 0 || errno != ENOSYS) + return ret; +#endif + +#if defined(__NR_futex) + return syscall(__NR_futex, uaddr, op | opflags, val, nr_requeue, uaddr2, val3); +#endif + + errno = ENOSYS; + return -1; } /**