From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dave Martin Subject: [PATCH v3 21/28] arm64/sve: Add sysctl to set the default vector length for new processes Date: Tue, 10 Oct 2017 19:38:38 +0100 Message-ID: <1507660725-7986-22-git-send-email-Dave.Martin@arm.com> References: <1507660725-7986-1-git-send-email-Dave.Martin@arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1507660725-7986-1-git-send-email-Dave.Martin@arm.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: kvmarm-bounces@lists.cs.columbia.edu Sender: kvmarm-bounces@lists.cs.columbia.edu To: linux-arm-kernel@lists.infradead.org Cc: linux-arch@vger.kernel.org, Okamoto Takayuki , libc-alpha@sourceware.org, Ard Biesheuvel , Szabolcs Nagy , Catalin Marinas , Will Deacon , Richard Sandiford , kvmarm@lists.cs.columbia.edu List-Id: linux-arch.vger.kernel.org QmVjYXVzZSBvZiB0aGUgZWZmZWN0IG9mIFNWRSBvbiB0aGUgc2l6ZSBvZiB0aGUgc2lnbmFsIGZy YW1lLCB0aGUKZGVmYXVsdCB2ZWN0b3IgbGVuZ3RoIHVzZWQgZm9yIG5ldyBwcm9jZXNzZXMgaW52 b2x2ZXMgYSB0cmFkZW9mZgpiZXR3ZWVuIHBlcmZvcm1hbmNlIG9mIFNWRS1lbmFibGVkIHNvZnR3 YXJlIG9uIHRoZSBvbmUgaGFuZCwgYW5kCnJlbGlhYmlsaXR5IG9mIG5vbi1TVkUtYXdhcmUgc29m dHdhcmUgb24gdGhlIG90aGVyIGhhbmQuCgpGb3IgdGhpcyByZWFzb24sIHRoZSBiZXN0IGNob2lj ZSBkZXBlbmRzIG9uIHRoZSByZXBlcnRvaXJlIG9mCnVzZXJzcGFjZSBzb2Z0d2FyZSBpbiB1c2Ug YW5kIGlzIHRodXMgYmVzdCBsZWZ0IHVwIHRvIGRpc3RybwptYWludGFpbmVycywgc3lzYWRtaW5z IGFuZCBkZXZlbG9wZXJzLgoKSWYgQ09ORklHX1NZU0NUTCBpcyBlbmFibGVkLCB0aGlzIHBhdGNo IGV4cG9zZXMgdGhlIGRlZmF1bHQgdmVjdG9yCmxlbmd0aCBpbiAvcHJvYy9zeXMvYWJpL3N2ZV9k ZWZhdWx0X3ZlY3Rvcl9sZW5ndGgsIHdoZXJlIGJvb3QKc2NyaXB0cyBvciB0aGUgYWR2ZW50dXJv dXMgY2FuIHBva2UgaXQuCgpJbiBjb21tb24gd2l0aCBvdGhlciBhcm02NCBBQkkgc3lzY3Rscywg dGhpcyBjb250cm9sIGlzIGN1cnJlbnRseQpnbG9iYWw6IHNldHRpbmcgaXQgcmVxdWlyZXMgQ0FQ X1NZU19BRE1JTiBpbiB0aGUgcm9vdCB1c2VyCm5hbWVzcGFjZSwgYnV0IHRoZSB2YWx1ZSBzZXQg aXMgZWZmZWN0aXZlIGZvciBzdWJzZXF1ZW50IGV4ZWNzIGluCmFsbCBuYW1lc3BhY2VzLiAgVGhl IGNvbnRyb2wgb25seSBhZmZlY3RzIF9uZXdfIHByb2Nlc3NlcywgaG93ZXZlcjoKY2hhbmdpbmcg aXQgZG9lcyBub3QgYWZmZWN0IHRoZSB2ZWN0b3IgbGVuZ3RoIG9mIGFueSBleGlzdGluZwpwcm9j ZXNzLgoKVGhlIGludGVuZGVkIHVzYWdlIG1vZGVsIGlzIHRoYXQgaWYgdXNlcnNwYWNlIGlzIGtu b3duIHRvIGJlIGZ1bGx5ClNWRS10b2xlcmFudCAob3IgYSBkZXZlbG9wZXIgaXMgY3VyaW91cyB0 byBmaW5kIG91dCkgdGhlbiBpbml0CnNjcmlwdHMgY2FuIGNyYW5rIHRoaXMgdXAgZHVyaW5nIHN0 YXJ0dXAuCgpTaWduZWQtb2ZmLWJ5OiBEYXZlIE1hcnRpbiA8RGF2ZS5NYXJ0aW5AYXJtLmNvbT4K UmV2aWV3ZWQtYnk6IEFsZXggQmVubsOpZSA8YWxleC5iZW5uZWVAbGluYXJvLm9yZz4KLS0tCiBh cmNoL2FybTY0L2tlcm5lbC9mcHNpbWQuYyB8IDYyICsrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKy0KIDEgZmlsZSBjaGFuZ2VkLCA2MSBpbnNlcnRpb25zKCspLCAx IGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvZnBzaW1kLmMgYi9h cmNoL2FybTY0L2tlcm5lbC9mcHNpbWQuYwppbmRleCAyYzIzZTRhLi5hOWNiNzk0IDEwMDY0NAot LS0gYS9hcmNoL2FybTY0L2tlcm5lbC9mcHNpbWQuYworKysgYi9hcmNoL2FybTY0L2tlcm5lbC9m cHNpbWQuYwpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkL3NpZ25hbC5o PgogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNp bmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KIAogI2luY2x1ZGUgPGFzbS9mcHNpbWQuaD4KICNpbmNs dWRlIDxhc20vY3B1dHlwZS5oPgpAQCAtMzQ1LDYgKzM0Niw2NSBAQCBzdGF0aWMgdW5zaWduZWQg aW50IGZpbmRfc3VwcG9ydGVkX3ZlY3Rvcl9sZW5ndGgodW5zaWduZWQgaW50IHZsKQogCXJldHVy biBzdmVfdmxfZnJvbV92cShiaXRfdG9fdnEoYml0KSk7CiB9CiAKKyNpZmRlZiBDT05GSUdfU1lT Q1RMCisKK3N0YXRpYyBpbnQgc3ZlX3Byb2NfZG9fZGVmYXVsdF92bChzdHJ1Y3QgY3RsX3RhYmxl ICp0YWJsZSwgaW50IHdyaXRlLAorCQkJCSAgdm9pZCBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90ICps ZW5wLAorCQkJCSAgbG9mZl90ICpwcG9zKQoreworCWludCByZXQ7CisJaW50IHZsID0gc3ZlX2Rl ZmF1bHRfdmw7CisJc3RydWN0IGN0bF90YWJsZSB0bXBfdGFibGUgPSB7CisJCS5kYXRhID0gJnZs LAorCQkubWF4bGVuID0gc2l6ZW9mKHZsKSwKKwl9OworCisJcmV0ID0gcHJvY19kb2ludHZlYygm dG1wX3RhYmxlLCB3cml0ZSwgYnVmZmVyLCBsZW5wLCBwcG9zKTsKKwlpZiAocmV0IHx8ICF3cml0 ZSkKKwkJcmV0dXJuIHJldDsKKworCS8qIFdyaXRpbmcgLTEgaGFzIHRoZSBzcGVjaWFsIG1lYW5p bmcgInNldCB0byBtYXgiOiAqLworCWlmICh2bCA9PSAtMSkgeworCQkvKiBGYWlsIHNhZmUgaWYg c3ZlX21heF92bCB3YXNuJ3QgaW5pdGlhbGlzZWQgKi8KKwkJaWYgKFdBUk5fT04oIXN2ZV92bF92 YWxpZChzdmVfbWF4X3ZsKSkpCisJCQl2bCA9IFNWRV9WTF9NSU47CisJCWVsc2UKKwkJCXZsID0g c3ZlX21heF92bDsKKworCQlnb3RvIGNob3NlbjsKKwl9CisKKwlpZiAoIXN2ZV92bF92YWxpZCh2 bCkpCisJCXJldHVybiAtRUlOVkFMOworCisJdmwgPSBmaW5kX3N1cHBvcnRlZF92ZWN0b3JfbGVu Z3RoKHZsKTsKK2Nob3NlbjoKKwlzdmVfZGVmYXVsdF92bCA9IHZsOworCXJldHVybiAwOworfQor CitzdGF0aWMgc3RydWN0IGN0bF90YWJsZSBzdmVfZGVmYXVsdF92bF90YWJsZVtdID0geworCXsK KwkJLnByb2NuYW1lCT0gInN2ZV9kZWZhdWx0X3ZlY3Rvcl9sZW5ndGgiLAorCQkubW9kZQkJPSAw NjQ0LAorCQkucHJvY19oYW5kbGVyCT0gc3ZlX3Byb2NfZG9fZGVmYXVsdF92bCwKKwl9LAorCXsg fQorfTsKKworc3RhdGljIGludCBfX2luaXQgc3ZlX3N5c2N0bF9pbml0KHZvaWQpCit7CisJaWYg KHN5c3RlbV9zdXBwb3J0c19zdmUoKSkKKwkJaWYgKCFyZWdpc3Rlcl9zeXNjdGwoImFiaSIsIHN2 ZV9kZWZhdWx0X3ZsX3RhYmxlKSkKKwkJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIDA7Cit9 CisKKyNlbHNlIC8qICEgQ09ORklHX1NZU0NUTCAqLworc3RhdGljIGludCBfX2luaXQgc3ZlX3N5 c2N0bF9pbml0KHZvaWQpIHsgcmV0dXJuIDA7IH0KKyNlbmRpZiAvKiAhIENPTkZJR19TWVNDVEwg Ki8KKwogI2RlZmluZSBaUkVHKHN2ZV9zdGF0ZSwgdnEsIG4pICgoY2hhciAqKShzdmVfc3RhdGUp ICsJCVwKIAkoU1ZFX1NJR19aUkVHX09GRlNFVCh2cSwgbikgLSBTVkVfU0lHX1JFR1NfT0ZGU0VU KSkKIApAQCAtMTIzMiw2ICsxMjkyLDYgQEAgc3RhdGljIGludCBfX2luaXQgZnBzaW1kX2luaXQo dm9pZCkKIAlpZiAoIShlbGZfaHdjYXAgJiBIV0NBUF9BU0lNRCkpCiAJCXByX25vdGljZSgiQWR2 YW5jZWQgU0lNRCBpcyBub3QgaW1wbGVtZW50ZWRcbiIpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJu IHN2ZV9zeXNjdGxfaW5pdCgpOwogfQogY29yZV9pbml0Y2FsbChmcHNpbWRfaW5pdCk7Ci0tIAoy LjEuNAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18Ka3Zt YXJtIG1haWxpbmcgbGlzdAprdm1hcm1AbGlzdHMuY3MuY29sdW1iaWEuZWR1Cmh0dHBzOi8vbGlz dHMuY3MuY29sdW1iaWEuZWR1L21haWxtYW4vbGlzdGluZm8va3ZtYXJtCg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from foss.arm.com ([217.140.101.70]:49114 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932545AbdJJSjj (ORCPT ); Tue, 10 Oct 2017 14:39:39 -0400 From: Dave Martin Subject: [PATCH v3 21/28] arm64/sve: Add sysctl to set the default vector length for new processes Date: Tue, 10 Oct 2017 19:38:38 +0100 Message-ID: <1507660725-7986-22-git-send-email-Dave.Martin@arm.com> In-Reply-To: <1507660725-7986-1-git-send-email-Dave.Martin@arm.com> References: <1507660725-7986-1-git-send-email-Dave.Martin@arm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-arch-owner@vger.kernel.org List-ID: To: linux-arm-kernel@lists.infradead.org Cc: Catalin Marinas , Will Deacon , Ard Biesheuvel , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Szabolcs Nagy , Richard Sandiford , Okamoto Takayuki , kvmarm@lists.cs.columbia.edu, libc-alpha@sourceware.org, linux-arch@vger.kernel.org Message-ID: <20171010183838.baPSqdZXpIOZZZnITznfwHFOAwAH9nhXEbslzz_L9rY@z> Because of the effect of SVE on the size of the signal frame, the default vector length used for new processes involves a tradeoff between performance of SVE-enabled software on the one hand, and reliability of non-SVE-aware software on the other hand. For this reason, the best choice depends on the repertoire of userspace software in use and is thus best left up to distro maintainers, sysadmins and developers. If CONFIG_SYSCTL is enabled, this patch exposes the default vector length in /proc/sys/abi/sve_default_vector_length, where boot scripts or the adventurous can poke it. In common with other arm64 ABI sysctls, this control is currently global: setting it requires CAP_SYS_ADMIN in the root user namespace, but the value set is effective for subsequent execs in all namespaces. The control only affects _new_ processes, however: changing it does not affect the vector length of any existing process. The intended usage model is that if userspace is known to be fully SVE-tolerant (or a developer is curious to find out) then init scripts can crank this up during startup. Signed-off-by: Dave Martin Reviewed-by: Alex Bennée --- arch/arm64/kernel/fpsimd.c | 62 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 61 insertions(+), 1 deletion(-) diff --git a/arch/arm64/kernel/fpsimd.c b/arch/arm64/kernel/fpsimd.c index 2c23e4a..a9cb794 100644 --- a/arch/arm64/kernel/fpsimd.c +++ b/arch/arm64/kernel/fpsimd.c @@ -35,6 +35,7 @@ #include #include #include +#include #include #include @@ -345,6 +346,65 @@ static unsigned int find_supported_vector_length(unsigned int vl) return sve_vl_from_vq(bit_to_vq(bit)); } +#ifdef CONFIG_SYSCTL + +static int sve_proc_do_default_vl(struct ctl_table *table, int write, + void __user *buffer, size_t *lenp, + loff_t *ppos) +{ + int ret; + int vl = sve_default_vl; + struct ctl_table tmp_table = { + .data = &vl, + .maxlen = sizeof(vl), + }; + + ret = proc_dointvec(&tmp_table, write, buffer, lenp, ppos); + if (ret || !write) + return ret; + + /* Writing -1 has the special meaning "set to max": */ + if (vl == -1) { + /* Fail safe if sve_max_vl wasn't initialised */ + if (WARN_ON(!sve_vl_valid(sve_max_vl))) + vl = SVE_VL_MIN; + else + vl = sve_max_vl; + + goto chosen; + } + + if (!sve_vl_valid(vl)) + return -EINVAL; + + vl = find_supported_vector_length(vl); +chosen: + sve_default_vl = vl; + return 0; +} + +static struct ctl_table sve_default_vl_table[] = { + { + .procname = "sve_default_vector_length", + .mode = 0644, + .proc_handler = sve_proc_do_default_vl, + }, + { } +}; + +static int __init sve_sysctl_init(void) +{ + if (system_supports_sve()) + if (!register_sysctl("abi", sve_default_vl_table)) + return -EINVAL; + + return 0; +} + +#else /* ! CONFIG_SYSCTL */ +static int __init sve_sysctl_init(void) { return 0; } +#endif /* ! CONFIG_SYSCTL */ + #define ZREG(sve_state, vq, n) ((char *)(sve_state) + \ (SVE_SIG_ZREG_OFFSET(vq, n) - SVE_SIG_REGS_OFFSET)) @@ -1232,6 +1292,6 @@ static int __init fpsimd_init(void) if (!(elf_hwcap & HWCAP_ASIMD)) pr_notice("Advanced SIMD is not implemented\n"); - return 0; + return sve_sysctl_init(); } core_initcall(fpsimd_init); -- 2.1.4