From patchwork Wed Oct 20 22:39:17 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alistair Francis X-Patchwork-Id: 12573473 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 230E4C433EF for ; Wed, 20 Oct 2021 22:40:13 +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 D7DBA6121E for ; Wed, 20 Oct 2021 22:40:12 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org D7DBA6121E 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=+3y7okKu37aRb0mh8lFTff2hEW1sz9YVJXGsl2vquUc=; b=KOrJqfGxyXF1es 24bElS2AZFwsY53lnmoLCMWqlrz/g69D1urigzrS1mQBpcRJEbsoBFszDWcAwRhcqM7YkPQmHxsod CdTPyySYbGvHjF8TWJMxNyyDcMEdpPbTJEyIqNCmBWvTu3X9ojQHKNuRe8NCkTENnDkkU9YjDU9ja 603GqB+7yFfgS4dRU+8p1iKZBqlyLdeR7xzS3q6aWkLtUF9DZ7WP2bKmweV/qiPY2tiXGQXjFRB0s FNB1+HcbNkpSf5EseViATmYFfJpFbRe0FHf7VMmY1/UtsUs8hqN8FyOG/zA7NCXC+Wq3IlOZWYCnX dZk/OriN5NZKfbWOk0ag==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mdKFb-005vau-S2; Wed, 20 Oct 2021 22:39:59 +0000 Received: from esa6.hgst.iphmx.com ([216.71.154.45]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mdKFY-005vZy-9N for linux-riscv@lists.infradead.org; Wed, 20 Oct 2021 22:39:57 +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=1634769596; x=1666305596; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=ANjv7oA9MTzC+HqX2lqEYQUduo9FaGOUFrImo55vutA=; b=SYzw0x3PoBkaXHPOThc19HXWfsH8cL1PYT85PIfC7BiJeH5Tm8hjd5Ws yyJc+remTUFyuiQDC7p0MsBzGgA/waYKtomCe3i5h53LfW/rXBDLyOqbP G1O/YLmv0hznF5nQpEiihst9ayVc6XXjic2QyLbGM6GJbw7NlefZfBsSX RoAcorGO18G81M0ZJ8xIuYsL9YoCPoE3y3elcv8IE4Q1ZGyvCtl/OayyA CdmGh+xwA2rwYZJ0HYpa0k86lOePMfMrfr9eEDW2mVHoQYE9ViXGpG/5D DL1/+xHJZ8MTcVNziTFhzG5RSK/0ia0JsvnwaYU/wFsBnkNDiRyUp4MDP w==; X-IronPort-AV: E=Sophos;i="5.87,168,1631548800"; d="scan'208";a="184393885" Received: from uls-op-cesaip02.wdc.com (HELO uls-op-cesaep02.wdc.com) ([199.255.45.15]) by ob1.hgst.iphmx.com with ESMTP; 21 Oct 2021 06:39:53 +0800 IronPort-SDR: v/ppFAPVa2Ljt7Ddv+dXLBno/AkngsLmMPk449Z9wso/6oVNRSPH7faJTZWmp5gF5i0iiXUQgq uYoR/8ASNgjH9H0QV81nRvteozAgfX/EzbJqvyz1ClTiFXWpDB4K0Y6bXwjiRLrh6k34MLL7AV UCmaD96txe0G+YT1C+EH95jWs7khekZQRRa+CZZcndO3duYKEearEHxvVXWhCGDgdZ5R90E2kc XCz93la+D0cLz9FWUfhIPNN2/T7XbQdSxUNh/DGAwWJzIT/uvIsUq//OsHiDntDlkxoD2gx+GP NUm+M8W0BuFxKh6NYfZxKZnK Received: from uls-op-cesaip01.wdc.com ([10.248.3.36]) by uls-op-cesaep02.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 20 Oct 2021 15:13:57 -0700 IronPort-SDR: 0jqCao8G4H0ulgb5TIMV+pZ2jKhQhrfS3mrFVQHqZNNKx+gVWa8cM7Ns/VGn5j/xFMnxFjsW6O kZfj7xgBYZX0kUCSND775YrV3XMeNUriZG3/VxrrmAcVDFIPbp8xHBQPRS6d5TKtoOUrg0Qi5C d6SWDb/dRUhjZgPQKtN+Zi/I0YRjdaqMeSMfvfZZ5K2MtDAihDJJuA8JgtPARTMSQO2OPvw32K 5Ekgu00rr8c21SsG7EoKZy6NlMwyrJLN6Dz2AEgRNE2kl4ZLvZ2zXLp+AtNsEF6DrjVtUED/tq SYk= WDCIronportException: Internal Received: from usg-ed-osssrv.wdc.com ([10.3.10.180]) by uls-op-cesaip01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 20 Oct 2021 15:39:53 -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 4HZQXm3Mvzz1RvmD for ; Wed, 20 Oct 2021 15:39:52 -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=1634769591; x=1637361592; bh=ANjv7oA9MTzC+HqX2lqEYQUduo9FaGOUFrImo55vutA=; b= X9TwTCOQ94NxxhOefoN/fIhIrHZwm1iNqhhb9gWxJ6aSbhisi5DHoio1udM/okBE rHE5HDsw9oUQFz710JePfeK2UVswIj89DYHzpOng3P2L4F6gFRzzqLSjylih4Eac K69A9xVUI4OLTBX1N8dpzcAL9wA+VeuFtfSeaMMMUyT/uYoUKDqXiJfoU1ZdNict wMpl90/VIW1Wy1I+KcxplJSQRyOya5TNu0v+u9QC8nOvSy0tZ0dWXju9iw0E81DT 3bl060zvopLgg4ZH3LDcJHNHR4i2evTnb6oCB+GnBJenHmRivxncZtMIorb1A2FB WJbulokE2PWNGg7m+lciMQ== 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 irSqMvXvb2Ij for ; Wed, 20 Oct 2021 15:39:51 -0700 (PDT) Received: from toolbox.wdc.com (unknown [10.225.165.39]) by usg-ed-osssrv.wdc.com (Postfix) with ESMTPSA id 4HZQXV2XHlz1RvlZ; Wed, 20 Oct 2021 15:39:37 -0700 (PDT) From: Alistair Francis To: linux-riscv@lists.infradead.org, linux-perf-users@vger.kernel.org Cc: linux-kernel@vger.kernel.org, alistair23@gmail.com, namhyung@kernel.org, jolsa@redhat.com, alexander.shishkin@linux.intel.com, mark.rutland@arm.com, acme@kernel.org, dave@stgolabs.net, dvhart@infradead.org, peterz@infradead.org, mingo@redhat.com, tglx@linutronix.de, atish.patra@wdc.com, arnd@arndb.de, Alistair Francis , Davidlohr Bueso Subject: [PATCH v4 1/4] perf bench futex: Call the futex syscall from a function Date: Thu, 21 Oct 2021 08:39:17 +1000 Message-Id: <20211020223920.2810727-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-20211020_153956_421294_9F3A705F X-CRM114-Status: GOOD ( 19.05 ) 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..b97a343e7ec66 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, ts32, 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 Wed Oct 20 22:39:18 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alistair Francis X-Patchwork-Id: 12573475 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 D99BDC433F5 for ; Wed, 20 Oct 2021 22:40:19 +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 9926A6121E for ; Wed, 20 Oct 2021 22:40:19 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 9926A6121E 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=IJ6BoiMOFL+9V3XNElsnr7b3eNEsiORaR4WIVBKgx08=; b=qZMoXrRex+IQcJ rRcxam/FUFyjjbOxvpUGrO/Iv0dcCXdsPY3T4nDKiC/98xpaFkKfHCJf+Ej7QzEHlyRYo608I+Lmq WMDM9vLupe8snVQ37cVFYxpQSWPMaHOvBI+/Kn0VSK6Q4B/aLCEhGSxhI/4QqCK5UX7OUHMeUEoK9 bO7oWruPaTnDMqWxTZaCSXl+ioJJmvrxGFqWDi/EaV7P3BUz732xl4FWmc5K1ZC6ECywPSYtLEC/q Ixec6CZ8Oj2QhAnhtDcIdNLCpEO69Exw5SHe5Qq/WMJb6lWcZWcsCk+4Cul2F7kSXwJ0HKGSylE31 yL+qXCycdY0WVad2GzhQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mdKFm-005vdD-M2; Wed, 20 Oct 2021 22:40:10 +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 1mdKFj-005vbm-Km for linux-riscv@lists.infradead.org; Wed, 20 Oct 2021 22:40:09 +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=1634769607; x=1666305607; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=t4IGyendo4BsqYlBXcz6RY1/SabKmba0GonLcqIFhF0=; b=o97PPK7qKF0UpfNuLsXZ/UfOwouVmkIWPv9KK2M2ZY1ZDBbc45zTShXM Rt1TjTENl4m1vcA4LayfgaeB1L/Io2gMZnaUWa0mfL68UcjGvpncTfDDu R60e2BMMtRDGSx6m1WoIgKo8da0mB6bxYMd9e5fZEXDa7+2J+xXEqdOLt RjV835MiGme10frhFE4RRzUAgwiUUHfnQ6sOo5WHFAqMA4w4XyEKMQAHb bCFw8vpA8ZJdZ34zhcSzxo9o8+GuNaRny/b3a/x8anLbYwtdrbJEQInUU 2unA5IaXwNtWx8EV667thRJmgLOG+s0a17qNU0HoBxu1rqyr/aaYfmUFq Q==; X-IronPort-AV: E=Sophos;i="5.87,168,1631548800"; d="scan'208";a="287328444" 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; 21 Oct 2021 06:40:05 +0800 IronPort-SDR: FGvJY4vcXyA6KtoW9hhZ0mETphW4sK3sNDSI6nT1O2MtanLnV/Ky2HJCdwO5LOL3A1ljxF2fq1 vkkaW5M6x3dasYiI5N1/0S8FUO69BWld+TsuWrXehrhMdQ/c27AwP8knzaERU+pBqrZXPEWhoO vda7JqbpnMIzXof+XySlTFjyxjOcev77FC+Cfw9ao4FsCBgtU45n4DmrD5Jv5g+/p/z/GaVKwH 9RhDH5FLYxdeFWVEWCkkKx9VES3IDCe5xQ4y++K1t8X8E007vEzrScTe1g0OYpE+HD8WN/1XGw QDqFh1QEdLlDeUUdE6NQa69V Received: from uls-op-cesaip01.wdc.com ([10.248.3.36]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 20 Oct 2021 15:15:42 -0700 IronPort-SDR: EFSROuSQtjuJfmPD83IeiFUadjyvYQ8y7Gpvk9O1yhHDcaRgVB5PADLMPJpp/0rCJEYQSc+D17 3nPwzJT6IkOkuT3fdEv62qKhRCJZmAd2cMSl4QmJuiJw59FyJruNa12V6VubONS1ozv2uQh3/f 6H6C35lz3Ze6huJokBhdcG/IkqWWdAFzWxopi63WH4vChZvb6E6Q/aZ6TIVZgS73u2VlNGvijg x7AuKyCgTTa76paB4KsV/kR3874N6rRyL8roQIB+c9hP9q26YThzCwkXDOx/va6CYYqhZjtkGQ KTA= WDCIronportException: Internal Received: from usg-ed-osssrv.wdc.com ([10.3.10.180]) by uls-op-cesaip01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 20 Oct 2021 15:40: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 4HZQY06plLz1Rwrr for ; Wed, 20 Oct 2021 15:40:04 -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=1634769603; x=1637361604; bh=t4IGyendo4BsqYlBXc z6RY1/SabKmba0GonLcqIFhF0=; b=IC/mJaTEU70L5dB8tUNlENk+i9mh/z73si G5Hk1o5pXrPGRsLuA2znC3W7qrC94oZ0YAdhWjifFf9msVzgbiDVeEHc5xXbQDSQ SvKEYWeNx1FOGAVCb2Zv21sreHjClw+lAtNmTnFq0MXfL7/YAJdQVJl811Wc4oz9 N4MI+v8RgwDm/bkChzSPJ5Q+QYRdX0373Oob/QQ5IKti+izWUy2QBdgJ7oUZ+MSm l5LIcfhlY8u1wA9/pI1CvFQZx8Z3ey5bnrhwOWuPOwcZ8Hr0scUCaM+TqmFyMTv4 w/ZV4UYRsL0GiQUv4+z0I1HSln5IZzdGYbGwOzhEoxrtigmaqbuA== 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 hm6kuEAuReWo for ; Wed, 20 Oct 2021 15:40:03 -0700 (PDT) Received: from toolbox.wdc.com (unknown [10.225.165.39]) by usg-ed-osssrv.wdc.com (Postfix) with ESMTPSA id 4HZQXl5j5vz1RvmF; Wed, 20 Oct 2021 15:39:51 -0700 (PDT) From: Alistair Francis To: linux-riscv@lists.infradead.org, linux-perf-users@vger.kernel.org Cc: linux-kernel@vger.kernel.org, alistair23@gmail.com, namhyung@kernel.org, jolsa@redhat.com, alexander.shishkin@linux.intel.com, mark.rutland@arm.com, acme@kernel.org, dave@stgolabs.net, dvhart@infradead.org, peterz@infradead.org, mingo@redhat.com, tglx@linutronix.de, atish.patra@wdc.com, arnd@arndb.de, Alistair Francis , Davidlohr Bueso Subject: [PATCH v4 2/4] perf bench futex: Add support for 32-bit systems with 64-bit time_t Date: Thu, 21 Oct 2021 08:39:18 +1000 Message-Id: <20211020223920.2810727-2-alistair.francis@opensource.wdc.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20211020223920.2810727-1-alistair.francis@opensource.wdc.com> References: <20211020223920.2810727-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-20211020_154007_754501_D710ADA8 X-CRM114-Status: GOOD ( 17.48 ) 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 b97a343e7ec66..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, ts32, 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 Wed Oct 20 22:39:19 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alistair Francis X-Patchwork-Id: 12573477 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 0F15FC433F5 for ; Wed, 20 Oct 2021 22:40:29 +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 C1CF46121E for ; Wed, 20 Oct 2021 22:40:28 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org C1CF46121E 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=oKoffcmodLU83SCfXQ7z/O6nPf8aa6E20kaOa8qDJ20=; b=TRF6ZumYl608it cpFuL5u5vzQPtHMk/NnASfgK/U3F/5jqctgeoYZRGP912mia6k6QmY2j9qEYAyJvz711fWdWDXmCa 7kVypA4oazzZ2Rcoa6MXJBT2LiRhdqZCQ7StkLedFTUgLx78QgTC1/NXbonU0wrf5ZpFlutIGJF48 KOmoU2PoedHQewHQbmjmcqqerbcoL2gyXNEIuY4EL7Bd0U5TKdEEh6yp3Sx7kXJPFBRKRGLMjL94Y UsMFgn7EOPor1cCu7c8Kq/Wesu8x3bebfxchMIc2WwPaxcy09tef+1mouiqnw09k18EDLzJdop/wq sAhxJVxssAP8QNPHA/TQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mdKFy-005vgK-IJ; Wed, 20 Oct 2021 22:40:22 +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 1mdKFv-005vej-W7 for linux-riscv@lists.infradead.org; Wed, 20 Oct 2021 22:40: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=1634769619; x=1666305619; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=Y8ldQtnZtH2nNau0fDjjtgFR2uznY4wI2KcEdQP3NCw=; b=jB+BkNJK4+wDPrT4VCx6mJQIfdOhhO6ErquGKYNeKeHDyvTpNSc3OwUA nxF0WHG6Q1IwnPCL6bCmBVJtXzh5NulvV9NUlGykgM5z0RnYDzvY1bGRF C4fHZBimMSvliS7uChkQy87luwV7qNixbpx32/13s78ELm5OFHMItSLJu yeOjuikPWXXugjA3giigmSeVzA77rCiqjZ3E3O9w4fTiBbW6iu6FJKeiO WiTPrXN2hQ/pFR7eDH2n7rksawCQmeByyGDp0nd6SS4L17ga+5pZl9Pg3 NIz6tUm+m1NMKOyLgEslwftgbfgPXplRIxHAZIRi8zLuRa9CfXLJEboL7 w==; X-IronPort-AV: E=Sophos;i="5.87,168,1631548800"; d="scan'208";a="182470027" Received: from h199-255-45-15.hgst.com (HELO uls-op-cesaep02.wdc.com) ([199.255.45.15]) by ob1.hgst.iphmx.com with ESMTP; 21 Oct 2021 06:40:18 +0800 IronPort-SDR: LLEjG7DiW3bJWbJCNTtubFYWFj5RnyLidAj8yd6vFk1vVRKtfbkYKD8KdccVLyM+J+FibqQ/Oe IDF3QNhZgbtnWZNJ80ICsH6zEwohJBJ51Qw9z/6XnREIx/XjcTu3xpFTX/aH3CgHUfcLJqfbW6 ad3dYIRlFVk0Ip1VblsJjrQYbCOfOhIOdbcSB0XRJM5CBQTd/ACml/EAeNYCI9jTVZAeBQphUB oBM/bdPHonvx5a6yoFRy4BolS1oUo2TyYyHoO0xHQzMucnx6g3mKxvX73JA1jCySAPxmr2PvKP eVhinc9KN3OFxA6OZZQRsLnU Received: from uls-op-cesaip01.wdc.com ([10.248.3.36]) by uls-op-cesaep02.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 20 Oct 2021 15:14:22 -0700 IronPort-SDR: D0ONSfZngFH54qjnMqiSdYYqOtMN6OCLNEK/1BpSQwY4BE/ayYmIxDiiihsrVlNzeLqiWoQ38/ yZoXMTME194J6EiFTTpadTnqEDlOZZd6bmYM47hkYtHA7ZtyytdLt5FUWX7QAC41pEqZk6+XdW CHnxlVEKm1kc7EYcuuBmq3tz45dEP1ju9jcfmRhHH6CN5Jr7S93DIlbBHKqELPyg5H6iKRuyrb GLOSLk0yG5twikwXt75ppr7mJ7PLQhBArIAhqAHvRZTLgaiTTD3DwfAUEHpS1YX3C/nKDb2Uvh h2E= WDCIronportException: Internal Received: from usg-ed-osssrv.wdc.com ([10.3.10.180]) by uls-op-cesaip01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 20 Oct 2021 15:40:19 -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 4HZQYG0mFxz1RwqK for ; Wed, 20 Oct 2021 15:40: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=1634769616; x=1637361617; bh=Y8ldQtnZtH2nNau0fD jjtgFR2uznY4wI2KcEdQP3NCw=; b=WK0NYuGJdpZqBNJPokPtHztBAhbhlaT4MD e4vwlTrR1XjMEFYPuwJD7cp7Rd305TW9/D054K0mtEtQp040ZT4YM4F3TldzZii3 b88A0isBPV5Hul6AZP35l5x6IY6KnqY0OI9u46qHAC7gzFhbfAzuW7F1L4TsaonJ 9kCgVh419XVoXm6P14csyRgX5nU7oOeUWUfzKZ8WbkcAo9wC2gXqrT9NTPkvfjBW FD529WF0cxmg11JUCeD38fejiJmRcZkCwqxGZoD2vAUB8Q4aA18zoCd57/lBXlBV W2o4bU6vwZwoQv4IJv7mDkMngtTwcidqSJtuRvFnpu7bYVyG9lbw== 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 NhDo35G6Cg4d for ; Wed, 20 Oct 2021 15:40:16 -0700 (PDT) Received: from toolbox.wdc.com (unknown [10.225.165.39]) by usg-ed-osssrv.wdc.com (Postfix) with ESMTPSA id 4HZQY10Kx0z1SGYQ; Wed, 20 Oct 2021 15:40:04 -0700 (PDT) From: Alistair Francis To: linux-riscv@lists.infradead.org, linux-perf-users@vger.kernel.org Cc: linux-kernel@vger.kernel.org, alistair23@gmail.com, namhyung@kernel.org, jolsa@redhat.com, alexander.shishkin@linux.intel.com, mark.rutland@arm.com, acme@kernel.org, dave@stgolabs.net, dvhart@infradead.org, peterz@infradead.org, mingo@redhat.com, tglx@linutronix.de, atish.patra@wdc.com, arnd@arndb.de, Alistair Francis Subject: [PATCH v4 3/4] selftests: futex: Call the futex syscall from a function Date: Thu, 21 Oct 2021 08:39:19 +1000 Message-Id: <20211020223920.2810727-3-alistair.francis@opensource.wdc.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20211020223920.2810727-1-alistair.francis@opensource.wdc.com> References: <20211020223920.2810727-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-20211020_154020_110455_A7A08C2F X-CRM114-Status: GOOD ( 17.29 ) 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..1b133f81e9b7b 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, ts32, 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 Wed Oct 20 22:39:20 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alistair Francis X-Patchwork-Id: 12573479 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 2695BC433F5 for ; Wed, 20 Oct 2021 22:40:44 +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 E08806121E for ; Wed, 20 Oct 2021 22:40:43 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org E08806121E 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=vVlnfljcsoyzAaVJIKtIvvPUai62O1sBpsfzPkZszr4=; b=vHuP+/4tLY4kw9 SmHGoVoMEtxuLkeBEt+frD/8xv/KXCc3Iiqfle+tsW5NuifwxMgldbloPaTMStv+dOO+3zCAB9ucc Vh+iPA3h1FtbT5D+S7/hLmeevefo//Cm8v7/ctA+cRlASZrJUB9InCA/3ABSibzK+ob6pkpcAKutR 89cJWy8RfvdXewK4ki0QSDQz7oSHU6nNHdMnwe8uRJxFXbIjAGOoAJnKBXaWDgjSoK2G1iyRsLx9+ sHygPxj+zXUp+p6y4yT4Wau0evhf1dX5G9hQ1PA7AgKRrI1b+PSnyQBY90kpbW3EbpoMM9KIhANEK yfwDOOwqXuJ97N9TURZQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mdKGB-005vl1-E2; Wed, 20 Oct 2021 22:40:35 +0000 Received: from esa1.hgst.iphmx.com ([68.232.141.245]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mdKG9-005vj4-AM for linux-riscv@lists.infradead.org; Wed, 20 Oct 2021 22:40:34 +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=1634769633; x=1666305633; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=iokVJV3cYX9f/SC9Fc+lMMtmzbpnIQZDRYW/FHmCWd0=; b=lQwrtJEdLY/50J6ejoVcQPlIp33kTzJwDIMzBczcgs46XTU5c231rgl9 XilkpaxhAeQZsJMfEvf4gfB81bQGFYLGzBkCSwrZ4Qiv2fx5ugQwDuV56 3MmZB8jBpv/w2+yWL4YmRlJSmcVoiOd6VQm/WJXYPww7wDCfmb75fV+wh mPkM4OQ29X2dwXzUiqlZH6mrlvcM8FqPo5F83AenjymNCci1Wk9MSgjr6 ufj98us9ef86o//Q6Clt041vWPtnwUttyaiuhwwOqwbwVCnYWGsmmmcu/ bILh2c0RT02B6xQ+YttUezro6qmxXyty4AYkFGlDBSFkQzt2M49cjDCi5 A==; X-IronPort-AV: E=Sophos;i="5.87,168,1631548800"; d="scan'208";a="295186423" Received: from uls-op-cesaip01.wdc.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 21 Oct 2021 06:40:31 +0800 IronPort-SDR: Yz83FomXw3JhqvFbatUoGSOi7hE1GdtJ0j95vfi0g6uo3I47UEspK07/hc/VYhQFh+S3wzZqsq Bl3KFh0uXDBkmimKWrKMZrIBN65qgHOrdXpujM8Y1Mlj9qYfh9vn8+KxloFI+SZGjFUoMLffs7 Lb2kAOd/qjkOkSTy9eWuTrw+SGl7toohXU9JihCNOvxtuMgRsyV+h6yhfvbKfNFn0TowjnOyUq 4gnHyRC+ybs+Xoxtfb0N0g54enBLfp6w44qR+rVRGp4U8ZVA5e+DZILK23OzzIbnxcnyB/tjWQ CecQsBI66cVJhZCpmDAVsMUT Received: from uls-op-cesaip01.wdc.com ([10.248.3.36]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 20 Oct 2021 15:16:07 -0700 IronPort-SDR: /S4mLrI197zGXgDBPbxL8B7Cc314FBCeQXJWGBcPEQfyf1ysPybdAIXOlzUV6JiZEJUQ7zhP3i FsGLGf21q4vmcDoUKCtlrN+YivtvxoKxMFasM3ejw+43X9+dFYYxECwj1GWqvFj6g9yjCoFN6w IQHfRvgc4y2hWrojfkJ59ZuMbcLVdkapDFXz4gKpB1ecSgHQaVoHSzoEJG1K1pyiv9QvGvGxxq 8y/sqvpSGP2nkSIAajZKT0W46lwdYsW4fmF4BB+4iuvpblKhPTVJY73FF80shS4i9NG+AYagnB owo= WDCIronportException: Internal Received: from usg-ed-osssrv.wdc.com ([10.3.10.180]) by uls-op-cesaip01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 20 Oct 2021 15:40:31 -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 4HZQYV4vj7z1Rvm1 for ; Wed, 20 Oct 2021 15:40:30 -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=1634769629; x=1637361630; bh=iokVJV3cYX9f/SC9Fc +lMMtmzbpnIQZDRYW/FHmCWd0=; b=HbmBALspll9m4t/0EDKKGA/oB0V3treqkQ xIhDbAG8iqUVNKIkW2EnoBNPC3BM3gslxGNdMhJnGa2hZc8hr+8zwk5T89c9Uzo+ jGCPEg14L1xAueenvGRHT+b7XvGOy1pE8YkTVhAAbm13dX4hbUJF1Mf4OMgplYRC vOxPf0dk4xYfarU+MqcVzqB8FNfRn8zM61k//SniLMk5SE8VPOoxDEvKPZGDoJad eI/3xWawihNjTBfbffi49TkpXnBDFaWMLnQ3kP+RE9bxFjoc4PXjB42iBY9l510Y xMTs0+pr2/agO5wRBUcj5rkYYQupuE/PgtS7dG2+GAWH5vqqoadg== 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 o02HnATsLML2 for ; Wed, 20 Oct 2021 15:40:29 -0700 (PDT) Received: from toolbox.wdc.com (unknown [10.225.165.39]) by usg-ed-osssrv.wdc.com (Postfix) with ESMTPSA id 4HZQYF5gT8z1RvlZ; Wed, 20 Oct 2021 15:40:16 -0700 (PDT) From: Alistair Francis To: linux-riscv@lists.infradead.org, linux-perf-users@vger.kernel.org Cc: linux-kernel@vger.kernel.org, alistair23@gmail.com, namhyung@kernel.org, jolsa@redhat.com, alexander.shishkin@linux.intel.com, mark.rutland@arm.com, acme@kernel.org, dave@stgolabs.net, dvhart@infradead.org, peterz@infradead.org, mingo@redhat.com, tglx@linutronix.de, atish.patra@wdc.com, arnd@arndb.de, Alistair Francis Subject: [PATCH v4 4/4] selftests: futex: Add support for 32-bit systems with 64-bit time_t Date: Thu, 21 Oct 2021 08:39:20 +1000 Message-Id: <20211020223920.2810727-4-alistair.francis@opensource.wdc.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20211020223920.2810727-1-alistair.francis@opensource.wdc.com> References: <20211020223920.2810727-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-20211020_154033_388234_67231BC7 X-CRM114-Status: GOOD ( 17.76 ) 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 1b133f81e9b7b..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, ts32, 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; } /**