From patchwork Thu Jul 29 15:15:15 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mark Brown X-Patchwork-Id: 488732 Delivered-To: patch@linaro.org Received: by 2002:a05:6638:1185:0:0:0:0 with SMTP id f5csp2257104jas; Thu, 29 Jul 2021 08:17:43 -0700 (PDT) X-Google-Smtp-Source: ABdhPJylAG6ggWSQuw1NC5TH185/kpJ7/2Ot2aU60Q2fVjl4UbUnzJwSrgWTPq4DrlsHRi1BkoD1 X-Received: by 2002:a17:906:12c6:: with SMTP id l6mr5261663ejb.373.1627571863407; Thu, 29 Jul 2021 08:17:43 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1627571863; cv=none; d=google.com; s=arc-20160816; b=PFyy6jOpvetrSZnqxWUhiNEbUwbmr6AFf1Ngn1Qznsp5X3hvhAQOBnkqJQyEQxUBY1 drGY3p4nlkPtTkV9JeR2/hX7niyTjGnLBYAzr/HXex0ohjw56pP/ef+gNbj2Px77lgAQ x/dNEHg7fTwnzDB9StbZAMsyj9zH5Q1jR+5q9CosBK4EnV612i3QuSpthkAN2TSISdQs YR1EAJkmDhxIb8HjmMgDoSbp6mrGqsJYWxuNhYmS9yE26umf8ARU/y1DOL0ja1TEegrf Y2BuB9ifopuCnFpys6tOiihQ9YkBStoQY8CmwgRppclAIYHfnHmYY/pPq2WZUNl2NTLa 1pEQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=aAwiAhnl5sNcP5r4yCWW7lNLnNpatRgnrVKwHiQSnZI=; b=s5pCWkt7B8d2EwelXaGb6SnTg21dKRBTs0mziAedCrbJLxCDHLABhopsXvJ14fM0eV wfF3nHLsOJ+5rrNKg5CgEhauxHgF7Gla1a/yLiBtFIohl4qdfnEKrDL1VfoQtYUAkwe1 RRTNROUwBW1+clU6fbnEMO6EwKVXfUVaBJkPPKdR0w6tRsB17fHOB3s8FniYx5WAWRPb Wlax+N10Im/8kHZYWojALDCZ6drtPvuEGh36M3c7qsyQegOPfHJw7Ux8hvECP/yqqTe2 2dDNWkD8vqiQRnPrDntaHwN0088bCkA7u7SdOJSLtwfuGeeqIgB/zU/3DEZbptB5+QgC iagA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=AG43rLo4; spf=pass (google.com: domain of linux-kselftest-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kselftest-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id bj22si3192971ejb.53.2021.07.29.08.17.43; Thu, 29 Jul 2021 08:17:43 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kselftest-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=AG43rLo4; spf=pass (google.com: domain of linux-kselftest-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kselftest-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237531AbhG2PRp (ORCPT + 5 others); Thu, 29 Jul 2021 11:17:45 -0400 Received: from mail.kernel.org ([198.145.29.99]:33818 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229864AbhG2PRo (ORCPT ); Thu, 29 Jul 2021 11:17:44 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 12C8160F43; Thu, 29 Jul 2021 15:17:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1627571861; bh=CdGB4OG/NflCYBfXLsaKyb4ZgSAIM7cHqA6soZ5TczM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=AG43rLo4tyHymQ80wxLw6LIq0QF/NaV8f9ij2Lh9k5RV8sqT/1OOZUj6B/izNHSsz SNDjUmmIX1s7D0urMMhWNvGu2tsQ6KyDB/enGET9i2hILSO3grPOwEGN8kfJzMQ0Nd 4UBYV4dzId4D1u1Yyl34FQ1CeUPR8TyFDMkKRvJOpDlvmkPIzCFYuJEIV6vOVtzC2B Svq7vMuGlqwMyNygFXiS6iRy+4nC2oCYzSAx07wgMFUIe5r2HNZLOugGHLdvlOtdjI JdmNlJONju6Q7I+K3Fx+SzVnYpnOZZmSwGFu2F4AAjzAjHqVnXtDSYEnf+XG4H9L2v I7ki6S5PuaZEQ== From: Mark Brown To: Catalin Marinas , Will Deacon , Shuah Khan Cc: Dave Martin , linux-arm-kernel@lists.infradead.org, linux-kselftest@vger.kernel.org, Mark Brown Subject: [PATCH v3 1/4] kselftest/arm64: Provide a helper binary and "library" for SVE RDVL Date: Thu, 29 Jul 2021 16:15:15 +0100 Message-Id: <20210729151518.46388-2-broonie@kernel.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210729151518.46388-1-broonie@kernel.org> References: <20210729151518.46388-1-broonie@kernel.org> MIME-Version: 1.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=3762; h=from:subject; bh=CdGB4OG/NflCYBfXLsaKyb4ZgSAIM7cHqA6soZ5TczM=; b=owEBbQGS/pANAwAKASTWi3JdVIfQAcsmYgBhAsX8oc07YHrsOh1K2NDPohsDGoEt9Zt9fNhL16wI 3/ocqPOJATMEAAEKAB0WIQSt5miqZ1cYtZ/in+ok1otyXVSH0AUCYQLF/AAKCRAk1otyXVSH0PWKB/ 0fN+2JYtxYgXaZ+mHwZYyVt9uZcRhtS6QCUu8L1rIzV4FEN3O2mowmjNlC9iOBx/LZgjJVN3yrp/8d 4K4BpHkq6veff/Fjq1qhkTs3EUIvvfD3blJ+Y3bVnibb3pAgXlJhDnyHJQnyKtvWMru/gekH1aZdIz 9u33Y3C6FNH9O89swFTjd+6h6jnyTuL+t1+HIagHg9iwtnj124a23lRB48tObBzwMAgqhZm/hK1r74 sWWaaqsuw2LjkiH4PEJg254C3EKfDPznR8rY/LoQ32FScNrBvmyavmBiBBLlPtwR7l7fFbthMx7zVt QAgV1UAC7W7dvxIcNFTwFtI6NIDCuo X-Developer-Key: i=broonie@kernel.org; a=openpgp; fpr=3F2568AAC26998F9E813A1C5C3F436CA30F5D8EB Precedence: bulk List-ID: X-Mailing-List: linux-kselftest@vger.kernel.org SVE provides an instruction RDVL which reports the currently configured vector length. In order to validate that our vector length configuration interfaces are working correctly without having to build the C code for our test programs with SVE enabled provide a trivial assembly library with a C callable function that executes RDVL. Since these interfaces also control behaviour on exec*() provide a trivial wrapper program which reports the currently configured vector length on stdout, tests can use this to verify that behaviour on exec*() is as expected. In preparation for providing similar helper functionality for SME, the Scalable Matrix Extension, which allows separately configured vector lengths to be read back both the assembler function and wrapper binary have SVE included in their name. Signed-off-by: Mark Brown Reviewed-by: Dave Martin --- tools/testing/selftests/arm64/fp/.gitignore | 1 + tools/testing/selftests/arm64/fp/Makefile | 6 +++++- tools/testing/selftests/arm64/fp/rdvl-sve.c | 14 ++++++++++++++ tools/testing/selftests/arm64/fp/rdvl.S | 10 ++++++++++ tools/testing/selftests/arm64/fp/rdvl.h | 8 ++++++++ 5 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 tools/testing/selftests/arm64/fp/rdvl-sve.c create mode 100644 tools/testing/selftests/arm64/fp/rdvl.S create mode 100644 tools/testing/selftests/arm64/fp/rdvl.h -- 2.20.1 diff --git a/tools/testing/selftests/arm64/fp/.gitignore b/tools/testing/selftests/arm64/fp/.gitignore index d66f76d2a650..6b53a7b60fee 100644 --- a/tools/testing/selftests/arm64/fp/.gitignore +++ b/tools/testing/selftests/arm64/fp/.gitignore @@ -1,4 +1,5 @@ fpsimd-test +rdvl-sve sve-probe-vls sve-ptrace sve-test diff --git a/tools/testing/selftests/arm64/fp/Makefile b/tools/testing/selftests/arm64/fp/Makefile index a57009d3a0dc..ed62e7003b96 100644 --- a/tools/testing/selftests/arm64/fp/Makefile +++ b/tools/testing/selftests/arm64/fp/Makefile @@ -2,12 +2,16 @@ CFLAGS += -I../../../../../usr/include/ TEST_GEN_PROGS := sve-ptrace sve-probe-vls -TEST_PROGS_EXTENDED := fpsimd-test fpsimd-stress sve-test sve-stress vlset +TEST_PROGS_EXTENDED := fpsimd-test fpsimd-stress \ + rdvl-sve \ + sve-test sve-stress \ + vlset all: $(TEST_GEN_PROGS) $(TEST_PROGS_EXTENDED) fpsimd-test: fpsimd-test.o $(CC) -nostdlib $^ -o $@ +rdvl-sve: rdvl-sve.o rdvl.o sve-ptrace: sve-ptrace.o sve-ptrace-asm.o sve-probe-vls: sve-probe-vls.o sve-test: sve-test.o diff --git a/tools/testing/selftests/arm64/fp/rdvl-sve.c b/tools/testing/selftests/arm64/fp/rdvl-sve.c new file mode 100644 index 000000000000..7f8a13a18f5d --- /dev/null +++ b/tools/testing/selftests/arm64/fp/rdvl-sve.c @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: GPL-2.0-only + +#include + +#include "rdvl.h" + +int main(void) +{ + int vl = rdvl_sve(); + + printf("%d\n", vl); + + return 0; +} diff --git a/tools/testing/selftests/arm64/fp/rdvl.S b/tools/testing/selftests/arm64/fp/rdvl.S new file mode 100644 index 000000000000..c916c1c9defd --- /dev/null +++ b/tools/testing/selftests/arm64/fp/rdvl.S @@ -0,0 +1,10 @@ +// SPDX-License-Identifier: GPL-2.0-only +// Copyright (C) 2021 ARM Limited. + +.arch_extension sve + +.globl rdvl_sve +rdvl_sve: + hint 34 // BTI C + rdvl x0, #1 + ret diff --git a/tools/testing/selftests/arm64/fp/rdvl.h b/tools/testing/selftests/arm64/fp/rdvl.h new file mode 100644 index 000000000000..7c9d953fc9e7 --- /dev/null +++ b/tools/testing/selftests/arm64/fp/rdvl.h @@ -0,0 +1,8 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + +#ifndef RDVL_H +#define RDVL_H + +int rdvl_sve(void); + +#endif From patchwork Thu Jul 29 15:15:16 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mark Brown X-Patchwork-Id: 488733 Delivered-To: patch@linaro.org Received: by 2002:a05:6638:1185:0:0:0:0 with SMTP id f5csp2257247jas; Thu, 29 Jul 2021 08:17:52 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwo6pvgh5xASyQ2CX09tOB3+7/apdwImE/xXPYXl7JDJrAOYGataSR8oJXblbQ0YyDXQusS X-Received: by 2002:a6b:f91a:: with SMTP id j26mr4613179iog.97.1627571872390; Thu, 29 Jul 2021 08:17:52 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1627571872; cv=none; d=google.com; s=arc-20160816; b=x3JabCQKRxuqr9yjc+rKViMaFgFYKzDVTs4cRvsbEbXVEdTFXzkNMSeG8NvQDMIUHU amZLWswDfCuv7BA74qZSNRCBvrGoiIk1a5LIHd/PfMoqFZpR0Z2Y+0Bpxt2V3+f0AZtT 2gLCsxv1B+TGGZ7JrlYqS+lpU+Qg6WDOu2G6fgMj2AO7R/+Y3YWqhTHsqJxLbPrUtrep EPGSAMYEFNnODKTCdP5XkgO1e0TI5Oi/QFlPEE7lyk4dp5diRsUNAx0rig4NZ3iZx+6T 0jNBuCt0YSP0tBNfukeYE7OF2Gb6tj1mIa3TgWCAFYMdjgKrlUEEyIoprdJ6IiXqn2gK GDpg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=7wVVt4os4wjwmrU1DlPSwI9dRzX7dbJ+CxbTwSVvCJw=; b=AVs34FSCTREWXOIuDYIWQMvmGgktZYChgW8gGYWxf3SZxh2e0OrjCiD6+IaVzm0iWF kP373fJagTbC/TOz4v+MuzHkqcVDhm/7w0ejevDGrDeJ4Fbofq6gDQe0LWjLt6R06Xn6 ffBJWvnmQiWNacTGhAuymBtXIYBUuWr4ikeFNrJXKF8DDxB2p5ekDlK9qOHOxqU+oZgh ac5jFLZJA/lvj3HX3m1xmYKWwRbxjYEAaau1f4Jioxl/kft0edkTSsJ8iMD2QKubDMvR trUSULBo5CHAkFToXGHzweAX9A+BgJpFmFyp9pswdWDVnnlAukRu7v5GzmTNIdzgpuCk tB7w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=cCctbs96; spf=pass (google.com: domain of linux-kselftest-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kselftest-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id u15si3979918iot.89.2021.07.29.08.17.52; Thu, 29 Jul 2021 08:17:52 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kselftest-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=cCctbs96; spf=pass (google.com: domain of linux-kselftest-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kselftest-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237783AbhG2PRv (ORCPT + 5 others); Thu, 29 Jul 2021 11:17:51 -0400 Received: from mail.kernel.org ([198.145.29.99]:33858 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237389AbhG2PRr (ORCPT ); Thu, 29 Jul 2021 11:17:47 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id CF32460F22; Thu, 29 Jul 2021 15:17:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1627571864; bh=EKvkyVbCFIkHGIl1Aft6XfS6vxY/FRzv+NjTpqSFwTM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=cCctbs96Yy3opqXLoqxaLWinWS14nosGJfsPvGsDPw9yxiRC66GFrO//0XbuT7Lkq 9Gi0ozl83BjSGlLaPZ/BaVSPHoZElsmdHqPH8a+1m0vdjvSfsNByoE3WyNmjzhzGww e38nOXhrbB7pvVOmrm2vP1n8dOBb+E+/Jo52I5hkZVBKl83WvOo4uEwxhYunY7c74g xFq9aX4wEoZwGzw1EQR1Iyh+iwoxWregCBmSWnrwP/CZFEVHfP3Ud6SfuWacG6eKP8 bt/NHamzjMp6XLFbdN0hkTNL/oNpquYeaIpbQ3nit2V2ewFSS/EGj662U9nH04nJbB fG+z+KFWawrlA== From: Mark Brown To: Catalin Marinas , Will Deacon , Shuah Khan Cc: Dave Martin , linux-arm-kernel@lists.infradead.org, linux-kselftest@vger.kernel.org, Mark Brown Subject: [PATCH v3 2/4] kselftest/arm64: Validate vector lengths are set in sve-probe-vls Date: Thu, 29 Jul 2021 16:15:16 +0100 Message-Id: <20210729151518.46388-3-broonie@kernel.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210729151518.46388-1-broonie@kernel.org> References: <20210729151518.46388-1-broonie@kernel.org> MIME-Version: 1.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=1733; h=from:subject; bh=EKvkyVbCFIkHGIl1Aft6XfS6vxY/FRzv+NjTpqSFwTM=; b=owEBbQGS/pANAwAKASTWi3JdVIfQAcsmYgBhAsX9yb4Ch9ouisizN+OUT44lVwHjZYwPWcERArhr KSPtigSJATMEAAEKAB0WIQSt5miqZ1cYtZ/in+ok1otyXVSH0AUCYQLF/QAKCRAk1otyXVSH0G0DB/ 4x4vg9icKgSbpN6iOEfUzPYMVINGCvd7LhD/Z2HfDD8kgdRVSnfNxb9AprS19XSshdoC0yh+2tRkQ8 IqAI/axGNhky0CA/tO3fZBz8YE2UPSu/EC94BbgLaRbg7didiVstlLIGZiN97sVItY6SW4ZVGrxXym T0GOuTXNasckkq860LFuMiKGd6YMN82Dma1pxmUfwlxv2X4v/l6F1P87HyeYQdLVMyUG9YPs3mgPHL 2QvTH4MXtryhLK7NM4Bu/RUtuLitBRzpk8fyNMXtdk3+wSVbnOkGqo9zyTmn26StYGgvqf87Kutesw RDOhPPAnEpOEr4mH72Uu2S9pll8m7K X-Developer-Key: i=broonie@kernel.org; a=openpgp; fpr=3F2568AAC26998F9E813A1C5C3F436CA30F5D8EB Precedence: bulk List-ID: X-Mailing-List: linux-kselftest@vger.kernel.org Currently sve-probe-vls does not verify that the vector lengths reported by the prctl() interface are actually what is reported by the architecture, use the rdvl_sve() helper to validate this. Signed-off-by: Mark Brown Reviewed-by: Dave Martin --- tools/testing/selftests/arm64/fp/Makefile | 2 +- tools/testing/selftests/arm64/fp/sve-probe-vls.c | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) -- 2.20.1 diff --git a/tools/testing/selftests/arm64/fp/Makefile b/tools/testing/selftests/arm64/fp/Makefile index ed62e7003b96..fa3a0167db2d 100644 --- a/tools/testing/selftests/arm64/fp/Makefile +++ b/tools/testing/selftests/arm64/fp/Makefile @@ -13,7 +13,7 @@ fpsimd-test: fpsimd-test.o $(CC) -nostdlib $^ -o $@ rdvl-sve: rdvl-sve.o rdvl.o sve-ptrace: sve-ptrace.o sve-ptrace-asm.o -sve-probe-vls: sve-probe-vls.o +sve-probe-vls: sve-probe-vls.o rdvl.o sve-test: sve-test.o $(CC) -nostdlib $^ -o $@ vlset: vlset.o diff --git a/tools/testing/selftests/arm64/fp/sve-probe-vls.c b/tools/testing/selftests/arm64/fp/sve-probe-vls.c index 76e138525d55..a24eca7a4ecb 100644 --- a/tools/testing/selftests/arm64/fp/sve-probe-vls.c +++ b/tools/testing/selftests/arm64/fp/sve-probe-vls.c @@ -13,6 +13,7 @@ #include #include "../../kselftest.h" +#include "rdvl.h" int main(int argc, char **argv) { @@ -38,6 +39,10 @@ int main(int argc, char **argv) vl &= PR_SVE_VL_LEN_MASK; + if (rdvl_sve() != vl) + ksft_exit_fail_msg("PR_SVE_SET_VL reports %d, RDVL %d\n", + vl, rdvl_sve()); + if (!sve_vl_valid(vl)) ksft_exit_fail_msg("VL %d invalid\n", vl); vq = sve_vq_from_vl(vl); From patchwork Thu Jul 29 15:15:17 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mark Brown X-Patchwork-Id: 488734 Delivered-To: patch@linaro.org Received: by 2002:a05:6638:1185:0:0:0:0 with SMTP id f5csp2257264jas; Thu, 29 Jul 2021 08:17:54 -0700 (PDT) X-Google-Smtp-Source: ABdhPJw8aXx8aAZWq4gB8C8xCiA9vAo2FN4b0FFx8CfwEaP/FRBIGYf5n6blnyZZGyotEKoTwlA8 X-Received: by 2002:a6b:14ca:: with SMTP id 193mr4596089iou.206.1627571874513; Thu, 29 Jul 2021 08:17:54 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1627571874; cv=none; d=google.com; s=arc-20160816; b=VGXJyVko7wnN1ldlI3LEtFLt9ZQmZhwmMLAaASFz7uqCri629AHMVVWcvcCtwo0qQc 0Qgc6TPf4YFJi0Bc/94DnCwMMKcA8stpOhcif24UYags4nODRqrnBjBiX1vOzzvXh5ZH qerVzXX3fa5sEDklrSkI/MJctW12atzIqqvzy2CRyZ0P95PFaemRele/mslKbF97dSwv /rNkFbXerhrNbxveQjbTHHR+xfU7axg9kntLpMH/TqxcxpqfNHMikbDMq0O1oZFvVkMp WzQI0e1SAu6JO586u466y0Da4As+pB2v73DADsdhm+nlPJ4g6K0JbuJ+uvoAHjZZXZ0K bkDg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=7F78DzwoNcz1R9d0NThvQZLBT/PJJgLEyOhbT1kSeGE=; b=kx8+XQ8oVoqW9xPOHSZVPFQpTEXppCjgoJsuG/70GQceV7sb/3SRbHRJaup22mBDtK R1QCdbJLxkOfvPNDv+ktKzT+6oWviS5tgS1q+6TUeh/10bhKu82c1stOkS2GgEnDSYow ftpPbuB5YCQckaZhyA1dYPOzevKscblUJu0QBgirjxnQX6BKaGZiTsfYGmVozL2yqHgr hIrEwlOo+OenA4hi0HJI6DegMa40qQLoCoaQp5xI6Rs3AJMMV9ERFxno2e6JndYoV+6v sGonUAXN1DqLEVCTW+dewb8bZNlumuaAsGMTdOn7PYz16bQbauyb1PxNkvqq9TsqdXlP KUGA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=BWaiyoWt; spf=pass (google.com: domain of linux-kselftest-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kselftest-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id u15si3979918iot.89.2021.07.29.08.17.54; Thu, 29 Jul 2021 08:17:54 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kselftest-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=BWaiyoWt; spf=pass (google.com: domain of linux-kselftest-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kselftest-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237842AbhG2PRz (ORCPT + 5 others); Thu, 29 Jul 2021 11:17:55 -0400 Received: from mail.kernel.org ([198.145.29.99]:33956 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237744AbhG2PRu (ORCPT ); Thu, 29 Jul 2021 11:17:50 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 7019960F43; Thu, 29 Jul 2021 15:17:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1627571867; bh=BSO9bJ9fgXkvNpX1JiA7Vpt/UmNqVljLWbo5EFtNoIg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=BWaiyoWtQd2olQROYPjKDQ/8+FV+KaTOn/moBd6ZZjTaX04Mnd5576SXr0R/dWGCU ca0zQiSxgNPCYrczCBWj9ajNPowGHKcXNxzYRPcUG3s1BZx6PgRZkLjQj1ZYRywiE0 7rZ0bbcsGLcfV2lOLpS5A27/ipoPLjryPoYGBoC+JJD9DGx8+A82wd+ijCpukWM4y4 gbZoHs6D28cxJJhL40pcloLMXmCNfLRIrUsuqNuCkovKZaJxnyUteDawB98YyIpDX5 5lc83wRfyDbDoXF+Y0cKwuCg0PCnhNrvzLiNhL5Fqb39OMZkYbkViPTFxOFuW3dk1h BAATm0XKl81KA== From: Mark Brown To: Catalin Marinas , Will Deacon , Shuah Khan Cc: Dave Martin , linux-arm-kernel@lists.infradead.org, linux-kselftest@vger.kernel.org, Mark Brown Subject: [PATCH v3 3/4] kselftest/arm64: Add tests for SVE vector configuration Date: Thu, 29 Jul 2021 16:15:17 +0100 Message-Id: <20210729151518.46388-4-broonie@kernel.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210729151518.46388-1-broonie@kernel.org> References: <20210729151518.46388-1-broonie@kernel.org> MIME-Version: 1.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=17555; h=from:subject; bh=BSO9bJ9fgXkvNpX1JiA7Vpt/UmNqVljLWbo5EFtNoIg=; b=owEBbQGS/pANAwAKASTWi3JdVIfQAcsmYgBhAsX9rr+WIbCtHooxzB63C4eKjsVwpcMQXotGc0UA 29y6wkWJATMEAAEKAB0WIQSt5miqZ1cYtZ/in+ok1otyXVSH0AUCYQLF/QAKCRAk1otyXVSH0B4GB/ 9Mlw5+zUjjEZN2VQF1h6RWACC92hvmveN9TcVDrPDmhf8iktdXaMCEBAzbCouJQpKNNWvoFsNsYQ6d uo0JhNN/BLIIQAA4muT85MHAaIjZdO3wDFv9cy8mWG1JpsZW+dvVLuSZCpFc6EBV5wQDLoybyBNhy5 80PUC54BLlrnqYa+vUpI7R3uNppbhEENMJb3kc142hYzKOT2+UFxtei2SKlT38VLxxf0TJgeVMAtm2 G277UQVBvP8SCNJXzllH+BSy0mLq5CB4uU6zTXOKSeLxFGy07HZxpiXRJi0ENOoQ1iIMtx7G3jlG+W 0Kx/T6yVI5uGZQzjkd/LbMVkY0BjJw X-Developer-Key: i=broonie@kernel.org; a=openpgp; fpr=3F2568AAC26998F9E813A1C5C3F436CA30F5D8EB Precedence: bulk List-ID: X-Mailing-List: linux-kselftest@vger.kernel.org We provide interfaces for configuring the SVE vector length seen by processes using prctl and also via /proc for configuring the default values. Provide tests that exercise all these interfaces and verify that they take effect as expected, though at present no test fully enumerates all the possible vector lengths. A subset of this is already tested via sve-probe-vls but the /proc interfaces are not currently covered at all. In preparation for the forthcoming support for SME, the Scalable Matrix Extension, which has separately but similarly configured vector lengths which we expect to offer similar userspace interfaces for, all the actual files and prctls used are parameterised and we don't validate that the architectural minimum vector length is the minimum we see. Signed-off-by: Mark Brown --- tools/testing/selftests/arm64/fp/.gitignore | 1 + tools/testing/selftests/arm64/fp/Makefile | 3 +- tools/testing/selftests/arm64/fp/vec-syscfg.c | 594 ++++++++++++++++++ 3 files changed, 597 insertions(+), 1 deletion(-) create mode 100644 tools/testing/selftests/arm64/fp/vec-syscfg.c -- 2.20.1 diff --git a/tools/testing/selftests/arm64/fp/.gitignore b/tools/testing/selftests/arm64/fp/.gitignore index 6b53a7b60fee..b67395903b9b 100644 --- a/tools/testing/selftests/arm64/fp/.gitignore +++ b/tools/testing/selftests/arm64/fp/.gitignore @@ -3,4 +3,5 @@ rdvl-sve sve-probe-vls sve-ptrace sve-test +vec-syscfg vlset diff --git a/tools/testing/selftests/arm64/fp/Makefile b/tools/testing/selftests/arm64/fp/Makefile index fa3a0167db2d..f2abdd6ba12e 100644 --- a/tools/testing/selftests/arm64/fp/Makefile +++ b/tools/testing/selftests/arm64/fp/Makefile @@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 CFLAGS += -I../../../../../usr/include/ -TEST_GEN_PROGS := sve-ptrace sve-probe-vls +TEST_GEN_PROGS := sve-ptrace sve-probe-vls vec-syscfg TEST_PROGS_EXTENDED := fpsimd-test fpsimd-stress \ rdvl-sve \ sve-test sve-stress \ @@ -16,6 +16,7 @@ sve-ptrace: sve-ptrace.o sve-ptrace-asm.o sve-probe-vls: sve-probe-vls.o rdvl.o sve-test: sve-test.o $(CC) -nostdlib $^ -o $@ +vec-syscfg: vec-syscfg.o rdvl.o vlset: vlset.o include ../../lib.mk diff --git a/tools/testing/selftests/arm64/fp/vec-syscfg.c b/tools/testing/selftests/arm64/fp/vec-syscfg.c new file mode 100644 index 000000000000..e8ba679aec29 --- /dev/null +++ b/tools/testing/selftests/arm64/fp/vec-syscfg.c @@ -0,0 +1,594 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * Copyright (C) 2021 ARM Limited. + * Original author: Mark Brown + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "../../kselftest.h" +#include "rdvl.h" + +#define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0])) + +#define ARCH_MIN_VL SVE_VL_MIN + +struct vec_data { + const char *name; + unsigned long hwcap_type; + unsigned long hwcap; + const char *rdvl_binary; + int (*rdvl)(void); + + int prctl_get; + int prctl_set; + const char *default_vl_file; + + int default_vl; + int min_vl; + int max_vl; +}; + + +static struct vec_data vec_data[] = { + { + .name = "SVE", + .hwcap_type = AT_HWCAP, + .hwcap = HWCAP_SVE, + .rdvl = rdvl_sve, + .rdvl_binary = "./rdvl-sve", + .prctl_get = PR_SVE_GET_VL, + .prctl_set = PR_SVE_SET_VL, + .default_vl_file = "/proc/sys/abi/sve_default_vector_length", + }, +}; + +static int stdio_read_integer(FILE *f, const char *what, int *val) +{ + int ret; + + ret = fscanf(f, "%d*1[\n]*n", val); + fclose(f); + if (ret != 1) { + ksft_print_msg("failed to parse VL from %s\n", what); + return -1; + } + + return 0; +} + +/* Start a new process and return the vector length it sees */ +static int get_child_rdvl(struct vec_data *data) +{ + FILE *out; + int pipefd[2]; + pid_t pid, child; + int read_vl, ret; + + ret = pipe(pipefd); + if (ret == -1) { + ksft_print_msg("pipe() failed: %d (%s)\n", + errno, strerror(errno)); + return -1; + } + + fflush(stdout); + + child = fork(); + if (child == -1) { + ksft_print_msg("fork() failed: %d (%s)\n", + errno, strerror(errno)); + close(pipefd[0]); + close(pipefd[1]); + return -1; + } + + /* Child: put vector length on the pipe */ + if (child == 0) { + /* + * Replace stdout with the pipe, errors to stderr from + * here as kselftest prints to stdout. + */ + ret = dup2(pipefd[1], 1); + if (ret == -1) { + fprintf(stderr, "dup2() %d\n", errno); + exit(EXIT_FAILURE); + } + + /* exec() a new binary which puts the VL on stdout */ + ret = execl(data->rdvl_binary, data->rdvl_binary, NULL); + fprintf(stderr, "execl(%s) failed: %d\n", + data->rdvl_binary, errno, strerror(errno)); + + exit(EXIT_FAILURE); + } + + close(pipefd[1]); + + /* Parent; wait for the exit status from the child & verify it */ + while (1) { + pid = wait(&ret); + if (pid == -1) { + ksft_print_msg("wait() failed: %d (%s)\n", + errno, strerror(errno)); + close(pipefd[0]); + return -1; + } + + if (pid != child) + continue; + + if (!WIFEXITED(ret)) { + ksft_print_msg("child exited abnormally\n"); + close(pipefd[0]); + return -1; + } + + if (WEXITSTATUS(ret) != 0) { + ksft_print_msg("child returned error %d\n", + WEXITSTATUS(ret)); + close(pipefd[0]); + return -1; + } + + break; + } + + out = fdopen(pipefd[0], "r"); + if (!out) { + ksft_print_msg("failed to open child stdout\n"); + close(pipefd[0]); + return -1; + } + + ret = stdio_read_integer(out, "child", &read_vl); + if (ret != 0) + return ret; + + return read_vl; +} + +static int file_read_integer(const char *name, int *val) +{ + FILE *f; + int ret; + + f = fopen(name, "r"); + if (!f) { + ksft_test_result_fail("Unable to open %s: %d (%s)\n", + name, errno, + strerror(errno)); + return -1; + } + + return stdio_read_integer(f, name, val); + + return 0; +} + +static int file_write_integer(const char *name, int val) +{ + FILE *f; + int ret; + + f = fopen(name, "w"); + if (!f) { + ksft_test_result_fail("Unable to open %s: %d (%s)\n", + name, errno, + strerror(errno)); + return -1; + } + + fprintf(f, "%d", val); + fclose(f); + if (ret < 0) { + ksft_test_result_fail("Error writing %d to %s\n", + val, name); + return -1; + } + + return 0; +} + +/* + * Verify that we can read the default VL via proc, checking that it + * is set in a freshly spawned child. + */ +static void proc_read_default(struct vec_data *data) +{ + int default_vl, child_vl, ret; + + ret = file_read_integer(data->default_vl_file, &default_vl); + if (ret != 0) + return; + + /* Is this the actual default seen by new processes? */ + child_vl = get_child_rdvl(data); + if (child_vl != default_vl) { + ksft_test_result_fail("%s is %d but child VL is %d\n", + data->default_vl_file, + default_vl, child_vl); + return; + } + + ksft_test_result_pass("%s default vector length %d\n", data->name, + default_vl); + data->default_vl = default_vl; +} + +/* Verify that we can write a minimum value and have it take effect */ +static void proc_write_min(struct vec_data *data) +{ + int ret, new_default, child_vl; + + if (geteuid() != 0) { + ksft_test_result_skip("Need to be root to write to /proc\n"); + return; + } + + ret = file_write_integer(data->default_vl_file, ARCH_MIN_VL); + if (ret != 0) + return; + + /* What was the new value? */ + ret = file_read_integer(data->default_vl_file, &new_default); + if (ret != 0) + return; + + /* Did it take effect in a new process? */ + child_vl = get_child_rdvl(data); + if (child_vl != new_default) { + ksft_test_result_fail("%s is %d but child VL is %d\n", + data->default_vl_file, + new_default, child_vl); + return; + } + + ksft_test_result_pass("%s minimum vector length %d\n", data->name, + new_default); + data->min_vl = new_default; + + file_write_integer(data->default_vl_file, data->default_vl); +} + +/* Verify that we can write a maximum value and have it take effect */ +static void proc_write_max(struct vec_data *data) +{ + int ret, new_default, child_vl; + + if (geteuid() != 0) { + ksft_test_result_skip("Need to be root to write to /proc\n"); + return; + } + + /* -1 is accepted by the /proc interface as the maximum VL */ + ret = file_write_integer(data->default_vl_file, -1); + if (ret != 0) + return; + + /* What was the new value? */ + ret = file_read_integer(data->default_vl_file, &new_default); + if (ret != 0) + return; + + /* Did it take effect in a new process? */ + child_vl = get_child_rdvl(data); + if (child_vl != new_default) { + ksft_test_result_fail("%s is %d but child VL is %d\n", + data->default_vl_file, + new_default, child_vl); + return; + } + + ksft_test_result_pass("%s maximum vector length %d\n", data->name, + new_default); + data->max_vl = new_default; + + file_write_integer(data->default_vl_file, data->default_vl); +} + +/* Can we read back a VL from prctl? */ +static void prctl_get(struct vec_data *data) +{ + int ret; + + ret = prctl(data->prctl_get); + if (ret == -1) { + ksft_test_result_fail("%s prctl() read failed: %d (%s)\n", + data->name, errno, strerror(errno)); + return; + } + + /* Mask out any flags */ + ret &= PR_SVE_VL_LEN_MASK; + + /* Is that what we can read back directly? */ + if (ret == data->rdvl()) + ksft_test_result_pass("%s current VL is %d\n", + data->name, ret); + else + ksft_test_result_fail("%s prctl() VL %d but RDVL is %d\n", + data->name, ret, data->rdvl()); +} + +/* Does the prctl let us set the VL we already have? */ +static void prctl_set_same(struct vec_data *data) +{ + int cur_vl = data->rdvl(); + int ret; + + ret = prctl(data->prctl_set, cur_vl); + if (ret < 0) { + ksft_test_result_fail("%s prctl set failed: %d (%s)\n", + data->name, errno, strerror(errno)); + return; + } + + if (cur_vl != data->rdvl()) + ksft_test_result_pass("%s current VL is %d\n", + data->name, ret); + else + ksft_test_result_fail("%s prctl() VL %d but RDVL is %d\n", + data->name, ret, data->rdvl()); +} + +/* Can we set a new VL for this process? */ +static void prctl_set(struct vec_data *data) +{ + int ret; + + if (data->min_vl == data->max_vl) { + ksft_test_result_skip("%s only one VL supported\n", + data->name); + return; + } + + /* Try to set the minimum VL */ + ret = prctl(data->prctl_set, data->min_vl); + if (ret < 0) { + ksft_test_result_fail("%s prctl set failed for %d: %d (%s)\n", + data->name, data->min_vl, + errno, strerror(errno)); + return; + } + + if ((ret & PR_SVE_VL_LEN_MASK) != data->min_vl) { + ksft_test_result_fail("%s prctl set %d but return value is %d\n", + data->name, data->min_vl, data->rdvl()); + return; + } + + if (data->rdvl() != data->min_vl) { + ksft_test_result_fail("%s set %d but RDVL is %d\n", + data->name, data->min_vl, data->rdvl()); + return; + } + + /* Try to set the maximum VL */ + ret = prctl(data->prctl_set, data->max_vl); + if (ret < 0) { + ksft_test_result_fail("%s prctl set failed for %d: %d (%s)\n", + data->name, data->max_vl, + errno, strerror(errno)); + return; + } + + if ((ret & PR_SVE_VL_LEN_MASK) != data->max_vl) { + ksft_test_result_fail("%s prctl() set %d but return value is %d\n", + data->name, data->max_vl, data->rdvl()); + return; + } + + /* The _INHERIT flag should not be present when we read the VL */ + ret = prctl(data->prctl_get); + if (ret == -1) { + ksft_test_result_fail("%s prctl() read failed: %d (%s)\n", + data->name, errno, strerror(errno)); + return; + } + + if (ret & PR_SVE_VL_INHERIT) { + ksft_test_result_fail("%s prctl() reports _INHERIT\n", + data->name); + return; + } + + ksft_test_result_pass("%s prctl() set min/max\n", data->name); +} + +/* If we didn't request it a new VL shouldn't affect the child */ +static void prctl_set_no_child(struct vec_data *data) +{ + int ret, child_vl; + + if (data->min_vl == data->max_vl) { + ksft_test_result_skip("%s only one VL supported\n", + data->name); + return; + } + + ret = prctl(data->prctl_set, data->min_vl); + if (ret < 0) { + ksft_test_result_fail("%s prctl set failed for %d: %d (%s)\n", + data->name, data->min_vl, + errno, strerror(errno)); + return; + } + + /* Ensure the default VL is different */ + ret = file_write_integer(data->default_vl_file, data->max_vl); + if (ret != 0) + return; + + /* Check that the child has the default we just set */ + child_vl = get_child_rdvl(data); + if (child_vl != data->max_vl) { + ksft_test_result_fail("%s is %d but child VL is %d\n", + data->default_vl_file, + data->max_vl, child_vl); + return; + } + + ksft_test_result_pass("%s vector length used default\n", data->name); + + file_write_integer(data->default_vl_file, data->default_vl); +} + +/* If we didn't request it a new VL shouldn't affect the child */ +static void prctl_set_for_child(struct vec_data *data) +{ + int ret, child_vl; + + if (data->min_vl == data->max_vl) { + ksft_test_result_skip("%s only one VL supported\n", + data->name); + return; + } + + ret = prctl(data->prctl_set, data->min_vl | PR_SVE_VL_INHERIT); + if (ret < 0) { + ksft_test_result_fail("%s prctl set failed for %d: %d (%s)\n", + data->name, data->min_vl, + errno, strerror(errno)); + return; + } + + /* The _INHERIT flag should be present when we read the VL */ + ret = prctl(data->prctl_get); + if (ret == -1) { + ksft_test_result_fail("%s prctl() read failed: %d (%s)\n", + data->name, errno, strerror(errno)); + return; + } + if (!(ret & PR_SVE_VL_INHERIT)) { + ksft_test_result_fail("%s prctl() does not report _INHERIT\n", + data->name); + return; + } + + /* Ensure the default VL is different */ + ret = file_write_integer(data->default_vl_file, data->max_vl); + if (ret != 0) + return; + + /* Check that the child inherited our VL */ + child_vl = get_child_rdvl(data); + if (child_vl != data->min_vl) { + ksft_test_result_fail("%s is %d but child VL is %d\n", + data->default_vl_file, + data->min_vl, child_vl); + return; + } + + ksft_test_result_pass("%s vector length was inherited\n", data->name); + + file_write_integer(data->default_vl_file, data->default_vl); +} + +/* _ONEXEC takes effect only in the child process */ +static void prctl_set_onexec(struct vec_data *data) +{ + int ret, child_vl; + + if (data->min_vl == data->max_vl) { + ksft_test_result_skip("%s only one VL supported\n", + data->name); + return; + } + + /* Set a known value for the default and our current VL */ + ret = file_write_integer(data->default_vl_file, data->max_vl); + if (ret != 0) + return; + + ret = prctl(data->prctl_set, data->max_vl); + if (ret < 0) { + ksft_test_result_fail("%s prctl set failed for %d: %d (%s)\n", + data->name, data->min_vl, + errno, strerror(errno)); + return; + } + + /* Set a different value for the child to have on exec */ + ret = prctl(data->prctl_set, data->min_vl | PR_SVE_SET_VL_ONEXEC); + if (ret < 0) { + ksft_test_result_fail("%s prctl set failed for %d: %d (%s)\n", + data->name, data->min_vl, + errno, strerror(errno)); + return; + } + + /* Our current VL should stay the same */ + if (data->rdvl() != data->max_vl) { + ksft_test_result_fail("%s VL changed by _ONEXEC prctl()\n", + data->name); + return; + } + + /* Check that the child inherited our VL */ + child_vl = get_child_rdvl(data); + if (child_vl != data->min_vl) { + ksft_test_result_fail("%s is %d but child VL is %d\n", + data->default_vl_file, + data->min_vl, child_vl); + return; + } + + ksft_test_result_pass("%s vector length set on exec\n", data->name); + + file_write_integer(data->default_vl_file, data->default_vl); +} + +typedef void (*test_type)(struct vec_data *); + +static const test_type tests[] = { + /* + * The default/min/max tests must be first and in this order + * to provide data for other tests. + */ + proc_read_default, + proc_write_min, + proc_write_max, + + prctl_get, + prctl_set, + prctl_set_no_child, + prctl_set_for_child, + prctl_set_onexec, +}; + +int main(void) +{ + int i, j; + + ksft_print_header(); + ksft_set_plan(ARRAY_SIZE(tests) * ARRAY_SIZE(vec_data)); + + for (i = 0; i < ARRAY_SIZE(vec_data); i++) { + struct vec_data *data = &vec_data[i]; + unsigned long supported; + + supported = getauxval(data->hwcap_type) & data->hwcap; + + for (j = 0; j < ARRAY_SIZE(tests); j++) { + if (supported) + tests[j](data); + else + ksft_test_result_skip("%s not supported\n", + data->name); + } + } + + ksft_exit_pass(); +} From patchwork Thu Jul 29 15:15:18 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mark Brown X-Patchwork-Id: 488735 Delivered-To: patch@linaro.org Received: by 2002:a05:6638:1185:0:0:0:0 with SMTP id f5csp2257270jas; Thu, 29 Jul 2021 08:17:55 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwbPBr7rYf4HRI1TKFDlwwtGo5/EAKEPyPjSheXFvHQB8b+crSpMM4uz/CMWy/xK5RRGcI8 X-Received: by 2002:a5d:9eda:: with SMTP id a26mr4619523ioe.166.1627571874927; Thu, 29 Jul 2021 08:17:54 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1627571874; cv=none; d=google.com; s=arc-20160816; b=c2eKJTdGWVg83fBkinWl0qWG5dLGlce3LufGytlKzLuLJdYRhOJAlrF3MOzLQjJw2h Ou3YXSyJDxdbx3G0XNs5LlQzJJyKKPrZm9cNWf1Y72CZI5/2kLJG4kRgF4k3x1mn/WGe Z1PxgT2KGHcnZ4oXBWIvHlY5a7A7+OLKZsovjPUF3ciIeHv3KAv6acM2XI0JjeKR9LU6 NRLVgKimb1UTl/0HbAVsdP5JuRK+lAKZPhnC0CU0av4N4C/y3crqTEgk7kPNJLJKttEe Qiyr1v5Gg7KyqBunozIVhuhpCC4dPXzgKa87/9dYpDHxRv53n82kX0uWb3yg+BZGEjR1 jK0g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=4yRXMPmR+3XEhRWasDYe5qLb0bWViuPTmKuicZKMgn8=; b=Pb11V4M3Q3G/L6d1OIzbnSdH8DxDG+6svWFu2+twFHH2DF7Z1+RAoD5JnZ3TTKthd4 yxxgbcO7yJSQKBdrJSIhgc0J6/7cgTvZ1AF3K9sPj/3Jp1V6C3ObPQAGxj2h46qAG0PQ mCDJbbE6/+6U9sK6cWmPJ++BIBtV4/PLeZWZEZrNAwpmq/uwX6KR4C4tJWlornz30k3s sCUJwC5Tp+MEwoe2vIvEE0L/6j1flDxWDgBXAFSBoJl4+kQq2n5URofEOZkiENYyphF0 8ZklWaoVpWG2farF7zKFPzYU296hEqDpe88EkONr2/BTN9If14K0ejKCtKVoku7vehtd mjrQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=SGA7da3K; spf=pass (google.com: domain of linux-kselftest-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kselftest-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id u15si3979918iot.89.2021.07.29.08.17.54; Thu, 29 Jul 2021 08:17:54 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kselftest-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=SGA7da3K; spf=pass (google.com: domain of linux-kselftest-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kselftest-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237744AbhG2PR4 (ORCPT + 5 others); Thu, 29 Jul 2021 11:17:56 -0400 Received: from mail.kernel.org ([198.145.29.99]:33996 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237703AbhG2PRw (ORCPT ); Thu, 29 Jul 2021 11:17:52 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 3E86660F23; Thu, 29 Jul 2021 15:17:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1627571869; bh=cqrIBm2+sPklmC33fnKs89kCRIiPSCWLJxj9sFAPJDg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=SGA7da3KouR3OLzK70xFfXXCJUOZDcxIRUgun74N/X6VVYZNn4NrSJgyzqBl7Z2xu 1HouEMUBptGxi1fHZnRbfflYxqhAk03TaQjZG0QDbf9mDbNQIDgImMOK+sHxEQ4rrV Icjt4KaPv7Uyjt0qIOPcLf6CHO/V3IjcPrRfWj6KaVpxMdYxl3KfaoSA/jxO3VXf/p wNh9PAmPZ9N/NSdVkuPrpiwNXu2MwjCsF11PkYmVFbdmhY9GlxsVCLgT7k1dYldR7y MbNpD6VS3+Y88bgoiEIwwDl1CXrkjcAvthC0srZsR/BU3IobrHuS4SgTVYt5lkkl46 UJ3vkNyO37Biw== From: Mark Brown To: Catalin Marinas , Will Deacon , Shuah Khan Cc: Dave Martin , linux-arm-kernel@lists.infradead.org, linux-kselftest@vger.kernel.org, Mark Brown Subject: [PATCH v3 4/4] kselftest/arm64: Add a TODO list for floating point tests Date: Thu, 29 Jul 2021 16:15:18 +0100 Message-Id: <20210729151518.46388-5-broonie@kernel.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210729151518.46388-1-broonie@kernel.org> References: <20210729151518.46388-1-broonie@kernel.org> MIME-Version: 1.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=729; h=from:subject; bh=cqrIBm2+sPklmC33fnKs89kCRIiPSCWLJxj9sFAPJDg=; b=owEBbQGS/pANAwAKASTWi3JdVIfQAcsmYgBhAsX+pAt85pVYYwEvPdu3ySEq4insB+GbRbW9Wt46 aWTg8G+JATMEAAEKAB0WIQSt5miqZ1cYtZ/in+ok1otyXVSH0AUCYQLF/gAKCRAk1otyXVSH0Fj+B/ 0STLbMhTsh3Q/RRUL10xdmDIWXuFvtezy1485rsM5f/0uaaCO+j2kPQjE7oWuaPzxOqEVxAd2N2kUP cZImdWcLqp9ZLLbT6IjXn1YUX9i08tb4M1zsBoUu+oF9o0K2JaMwkWpQ4ObA9iC+ACn/pnhJxjBDLz +F+3HVJ9KR8AhT0JSblCS7pH0rR/pq5ZxKk68VxddQZ7O8NUnBhwluzWjHv/qXAP0nATlSaiFsvX2x 1FKAOItM2aksMxgcgKz6DsOSZ8YmAft/5zbl/tb6/IjC0JFO38gwdp/+jneJkg/9Ptn8mCPxCjqGGp Nh3Qs+OPCJ9puhf9zqWc+T5DYfkKkN X-Developer-Key: i=broonie@kernel.org; a=openpgp; fpr=3F2568AAC26998F9E813A1C5C3F436CA30F5D8EB Precedence: bulk List-ID: X-Mailing-List: linux-kselftest@vger.kernel.org Write down some ideas for additional coverage for floating point in case someone feels inspired to look into them. Signed-off-by: Mark Brown Reviewed-by: Dave Martin --- tools/testing/selftests/arm64/fp/TODO | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 tools/testing/selftests/arm64/fp/TODO -- 2.20.1 diff --git a/tools/testing/selftests/arm64/fp/TODO b/tools/testing/selftests/arm64/fp/TODO new file mode 100644 index 000000000000..eada915227cf --- /dev/null +++ b/tools/testing/selftests/arm64/fp/TODO @@ -0,0 +1,3 @@ +- Test unsupported values in the ABIs +- More coverage for ptrace (eg, vector length conversions). +- Coverage for signals.