From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dave Martin Subject: [PATCH v4 20/28] arm64/sve: Add prctl controls for userspace vector length management Date: Fri, 27 Oct 2017 11:51:02 +0100 Message-ID: <1509101470-7881-21-git-send-email-Dave.Martin@arm.com> References: <1509101470-7881-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: <1509101470-7881-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 , kvmarm@lists.cs.columbia.edu List-Id: linux-arch.vger.kernel.org VGhpcyBwYXRjaCBhZGRzIHR3byBhcm02NC1zcGVjaWZpYyBwcmN0bHMsIHRvIHBlcm1pdCB1c2Vy c3BhY2UgdG8KY29udHJvbCBpdHMgdmVjdG9yIGxlbmd0aDoKCiAqIFBSX1NWRV9TRVRfVkw6IHNl dCB0aGUgdGhyZWFkJ3MgU1ZFIHZlY3RvciBsZW5ndGggYW5kIHZlY3RvcgogICBsZW5ndGggaW5o ZXJpdGFuY2UgbW9kZS4KCiAqIFBSX1NWRV9HRVRfVkw6IGdldCB0aGUgc2FtZSBpbmZvcm1hdGlv bi4KCkFsdGhvdWdoIHRoZXNlIHByY3RscyByZXNlbWJsZSBpbnN0cnVjdGlvbiBzZXQgZmVhdHVy ZXMgaW4gdGhlIFNWRQphcmNoaXRlY3R1cmUsIHRoZXkgcHJvdmlkZSBhZGRpdGlvbmFsIGNvbnRy b2w6IHRoZSB2ZWN0b3IgbGVuZ3RoCmluaGVyaXRhbmNlIG1vZGUgaXMgTGludXgtc3BlY2lmaWMg YW5kIG5vdGhpbmcgdG8gZG8gd2l0aCB0aGUKYXJjaGl0ZWN0dXJlLCBhbmQgdGhlIGFyY2hpdGVj dHVyZSBkb2VzIG5vdCBwZXJtaXQgRUwwIHRvIHNldCBpdHMKb3duIHZlY3RvciBsZW5ndGggZGly ZWN0bHkuICBCb3RoIGNhbiBiZSB1c2VkIGluIHBvcnRhYmxlIHRvb2xzCndpdGhvdXQgcmVxdWly aW5nIHRoZSB1c2Ugb2YgU1ZFIGluc3RydWN0aW9ucy4KClNpZ25lZC1vZmYtYnk6IERhdmUgTWFy dGluIDxEYXZlLk1hcnRpbkBhcm0uY29tPgpSZXZpZXdlZC1ieTogQ2F0YWxpbiBNYXJpbmFzIDxj YXRhbGluLm1hcmluYXNAYXJtLmNvbT4KQ2M6IEFsZXggQmVubsOpZSA8YWxleC5iZW5uZWVAbGlu YXJvLm9yZz4KCi0tLQoKKipEcm9wcGVkIGF0IHYzKiogUmV2aWV3ZWQtYnk6IEFsZXggQmVubsOp ZSA8YWxleC5iZW5uZWVAbGluYXJvLm9yZz4KZHVlIHRvIG5vbi10cml2aWFsIGNoYW5nZXMvZml4 ZXMgYWZ0ZXIgdjIuCgpDaGFuZ2VzIHNpbmNlIHYzCi0tLS0tLS0tLS0tLS0tLS0KClJlcXVlc3Rl ZCBieSBDYXRhbGluIE1hcmluYXM6CgogKiBSZXBsYWNlIHN0YXRpYyBfX21heWJlX3VudXNlZCBm dW5jdGlvbnMgd2l0aCBzdGF0aWMgaW5saW5lcy4KCiAgIChSZXRhaW5pbmcgQ2F0YWxpbidzIFJl dmlld2VkLWJ5IHdpdGggaGlzIGFwcHJvdmFsLikKLS0tCiBhcmNoL2FybTY0L2luY2x1ZGUvYXNt L2Zwc2ltZC5oICAgIHwgMTQgKysrKysrKysrKysKIGFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHJv Y2Vzc29yLmggfCAgNCArKysKIGFyY2gvYXJtNjQva2VybmVsL2Zwc2ltZC5jICAgICAgICAgfCA1 MCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogaW5jbHVkZS91YXBpL2xp bnV4L3ByY3RsLmggICAgICAgICB8ICA0ICsrKwoga2VybmVsL3N5cy5jICAgICAgICAgICAgICAg ICAgICAgICB8IDEyICsrKysrKysrKwogNSBmaWxlcyBjaGFuZ2VkLCA4NCBpbnNlcnRpb25zKCsp CgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9mcHNpbWQuaCBiL2FyY2gvYXJt NjQvaW5jbHVkZS9hc20vZnBzaW1kLmgKaW5kZXggZDc1NGU1YS4uYjg2ODQxMiAxMDA2NDQKLS0t IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9mcHNpbWQuaAorKysgYi9hcmNoL2FybTY0L2luY2x1 ZGUvYXNtL2Zwc2ltZC5oCkBAIC0xNyw2ICsxNyw3IEBACiAjZGVmaW5lIF9fQVNNX0ZQX0gKIAog I2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKyNpbmNsdWRlIDxhc20vZXJybm8uaD4KIAogI2lmbmRl ZiBfX0FTU0VNQkxZX18KIApAQCAtOTgsNiArOTksOSBAQCBleHRlcm4gdm9pZCBzdmVfc3luY19m cm9tX2Zwc2ltZF96ZXJvcGFkKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7CiBleHRlcm4gaW50 IHN2ZV9zZXRfdmVjdG9yX2xlbmd0aChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCiAJCQkJIHVu c2lnbmVkIGxvbmcgdmwsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOwogCitleHRlcm4gaW50IHN2ZV9z ZXRfY3VycmVudF92bCh1bnNpZ25lZCBsb25nIGFyZyk7CitleHRlcm4gaW50IHN2ZV9nZXRfY3Vy cmVudF92bCh2b2lkKTsKKwogLyoKICAqIFByb2JpbmcgYW5kIHNldHVwIGZ1bmN0aW9ucy4KICAq IENhbGxzIHRvIHRoZXNlIGZ1bmN0aW9ucyBtdXN0IGJlIHNlcmlhbGlzZWQgd2l0aCBvbmUgYW5v dGhlci4KQEAgLTExNCw2ICsxMTgsMTYgQEAgc3RhdGljIGlubGluZSB2b2lkIGZwc2ltZF9yZWxl YXNlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKSB7IH0KIHN0YXRpYyBpbmxpbmUgdm9p ZCBzdmVfc3luY190b19mcHNpbWQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKSB7IH0KIHN0YXRp YyBpbmxpbmUgdm9pZCBzdmVfc3luY19mcm9tX2Zwc2ltZF96ZXJvcGFkKHN0cnVjdCB0YXNrX3N0 cnVjdCAqdGFzaykgeyB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IHN2ZV9zZXRfY3VycmVudF92bCh1 bnNpZ25lZCBsb25nIGFyZykKK3sKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGlubGlu ZSBpbnQgc3ZlX2dldF9jdXJyZW50X3ZsKHZvaWQpCit7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisK IHN0YXRpYyBpbmxpbmUgdm9pZCBzdmVfaW5pdF92cV9tYXAodm9pZCkgeyB9CiBzdGF0aWMgaW5s aW5lIHZvaWQgc3ZlX3VwZGF0ZV92cV9tYXAodm9pZCkgeyB9CiBzdGF0aWMgaW5saW5lIGludCBz dmVfdmVyaWZ5X3ZxX21hcCh2b2lkKSB7IHJldHVybiAwOyB9CmRpZmYgLS1naXQgYS9hcmNoL2Fy bTY0L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wcm9j ZXNzb3IuaAppbmRleCBjNmZkZGIwLi4wMjNjYWNiIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2lu Y2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHJvY2Vz c29yLmgKQEAgLTIxNyw1ICsyMTcsOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc3Bpbl9sb2NrX3By ZWZldGNoKGNvbnN0IHZvaWQgKnB0cikKIGludCBjcHVfZW5hYmxlX3Bhbih2b2lkICpfX3VudXNl ZCk7CiBpbnQgY3B1X2VuYWJsZV9jYWNoZV9tYWludF90cmFwKHZvaWQgKl9fdW51c2VkKTsKIAor LyogVXNlcnNwYWNlIGludGVyZmFjZSBmb3IgUFJfU1ZFX3tTRVQsR0VUfV9WTCBwcmN0bCgpczog Ki8KKyNkZWZpbmUgU1ZFX1NFVF9WTChhcmcpCXN2ZV9zZXRfY3VycmVudF92bChhcmcpCisjZGVm aW5lIFNWRV9HRVRfVkwoKQlzdmVfZ2V0X2N1cnJlbnRfdmwoKQorCiAjZW5kaWYgLyogX19BU1NF TUJMWV9fICovCiAjZW5kaWYgLyogX19BU01fUFJPQ0VTU09SX0ggKi8KZGlmZiAtLWdpdCBhL2Fy Y2gvYXJtNjQva2VybmVsL2Zwc2ltZC5jIGIvYXJjaC9hcm02NC9rZXJuZWwvZnBzaW1kLmMKaW5k ZXggYTQ3Y2U0NC4uNzQ2NTYyMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvZnBzaW1k LmMKKysrIGIvYXJjaC9hcm02NC9rZXJuZWwvZnBzaW1kLmMKQEAgLTI4LDYgKzI4LDcgQEAKICNp bmNsdWRlIDxsaW51eC9pcnFmbGFncy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNs dWRlIDxsaW51eC9wZXJjcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9wcmN0bC5oPgogI2luY2x1ZGUg PGxpbnV4L3ByZWVtcHQuaD4KICNpbmNsdWRlIDxsaW51eC9wcmN0bC5oPgogI2luY2x1ZGUgPGxp bnV4L3B0cmFjZS5oPgpAQCAtNTU3LDYgKzU1OCw1NSBAQCBpbnQgc3ZlX3NldF92ZWN0b3JfbGVu Z3RoKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKIH0KIAogLyoKKyAqIEVuY29kZSB0aGUgY3Vy cmVudCB2ZWN0b3IgbGVuZ3RoIGFuZCBmbGFncyBmb3IgcmV0dXJuLgorICogVGhpcyBpcyBvbmx5 IHJlcXVpcmVkIGZvciBwcmN0bCgpOiBwdHJhY2UgaGFzIHNlcGFyYXRlIGZpZWxkcworICoKKyAq IGZsYWdzIGFyZSBhcyBmb3Igc3ZlX3NldF92ZWN0b3JfbGVuZ3RoKCkuCisgKi8KK3N0YXRpYyBp bnQgc3ZlX3ByY3RsX3N0YXR1cyh1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCWludCByZXQ7CisK KwlpZiAoZmxhZ3MgJiBQUl9TVkVfU0VUX1ZMX09ORVhFQykKKwkJcmV0ID0gY3VycmVudC0+dGhy ZWFkLnN2ZV92bF9vbmV4ZWM7CisJZWxzZQorCQlyZXQgPSBjdXJyZW50LT50aHJlYWQuc3ZlX3Zs OworCisJaWYgKHRlc3RfdGhyZWFkX2ZsYWcoVElGX1NWRV9WTF9JTkhFUklUKSkKKwkJcmV0IHw9 IFBSX1NWRV9WTF9JTkhFUklUOworCisJcmV0dXJuIHJldDsKK30KKworLyogUFJfU1ZFX1NFVF9W TCAqLworaW50IHN2ZV9zZXRfY3VycmVudF92bCh1bnNpZ25lZCBsb25nIGFyZykKK3sKKwl1bnNp Z25lZCBsb25nIHZsLCBmbGFnczsKKwlpbnQgcmV0OworCisJdmwgPSBhcmcgJiBQUl9TVkVfVkxf TEVOX01BU0s7CisJZmxhZ3MgPSBhcmcgJiB+dmw7CisKKwlpZiAoIXN5c3RlbV9zdXBwb3J0c19z dmUoKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXQgPSBzdmVfc2V0X3ZlY3Rvcl9sZW5ndGgo Y3VycmVudCwgdmwsIGZsYWdzKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJu IHN2ZV9wcmN0bF9zdGF0dXMoZmxhZ3MpOworfQorCisvKiBQUl9TVkVfR0VUX1ZMICovCitpbnQg c3ZlX2dldF9jdXJyZW50X3ZsKHZvaWQpCit7CisJaWYgKCFzeXN0ZW1fc3VwcG9ydHNfc3ZlKCkp CisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIHN2ZV9wcmN0bF9zdGF0dXMoMCk7Cit9CisK Ky8qCiAgKiBCaXRtYXAgZm9yIHRlbXBvcmFyeSBzdG9yYWdlIG9mIHRoZSBwZXItQ1BVIHNldCBv ZiBzdXBwb3J0ZWQgdmVjdG9yIGxlbmd0aHMKICAqIGR1cmluZyBzZWNvbmRhcnkgYm9vdC4KICAq LwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3ByY3RsLmggYi9pbmNsdWRlL3VhcGkv bGludXgvcHJjdGwuaAppbmRleCAxYjY0OTAxLi4xZWY5MzcwIDEwMDY0NAotLS0gYS9pbmNsdWRl L3VhcGkvbGludXgvcHJjdGwuaAorKysgYi9pbmNsdWRlL3VhcGkvbGludXgvcHJjdGwuaApAQCAt MTk4LDcgKzE5OCwxMSBAQCBzdHJ1Y3QgcHJjdGxfbW1fbWFwIHsKICMgZGVmaW5lIFBSX0NBUF9B TUJJRU5UX0NMRUFSX0FMTAk0CiAKIC8qIGFybTY0IFNjYWxhYmxlIFZlY3RvciBFeHRlbnNpb24g Y29udHJvbHMgKi8KKy8qIEZsYWcgdmFsdWVzIG11c3QgYmUga2VwdCBpbiBzeW5jIHdpdGggcHRy YWNlIE5UX0FSTV9TVkUgaW50ZXJmYWNlICovCisjZGVmaW5lIFBSX1NWRV9TRVRfVkwJCQk0OAkv KiBzZXQgdGFzayB2ZWN0b3IgbGVuZ3RoICovCiAjIGRlZmluZSBQUl9TVkVfU0VUX1ZMX09ORVhF QwkJKDEgPDwgMTgpIC8qIGRlZmVyIGVmZmVjdCB1bnRpbCBleGVjICovCisjZGVmaW5lIFBSX1NW RV9HRVRfVkwJCQk0OQkvKiBnZXQgdGFzayB2ZWN0b3IgbGVuZ3RoICovCisvKiBCaXRzIGNvbW1v biB0byBQUl9TVkVfU0VUX1ZMIGFuZCBQUl9TVkVfR0VUX1ZMICovCiAjIGRlZmluZSBQUl9TVkVf VkxfTEVOX01BU0sJCTB4ZmZmZgogIyBkZWZpbmUgUFJfU1ZFX1ZMX0lOSEVSSVQJCSgxIDw8IDE3 KSAvKiBpbmhlcml0IGFjcm9zcyBleGVjICovCiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9zeXMuYyBi L2tlcm5lbC9zeXMuYwppbmRleCA5YWViYzI5Li5jNTQxOTE2IDEwMDY0NAotLS0gYS9rZXJuZWwv c3lzLmMKKysrIGIva2VybmVsL3N5cy5jCkBAIC0xMTAsNiArMTEwLDEyIEBACiAjaWZuZGVmIFNF VF9GUF9NT0RFCiAjIGRlZmluZSBTRVRfRlBfTU9ERShhLGIpCSgtRUlOVkFMKQogI2VuZGlmCisj aWZuZGVmIFNWRV9TRVRfVkwKKyMgZGVmaW5lIFNWRV9TRVRfVkwoYSkJCSgtRUlOVkFMKQorI2Vu ZGlmCisjaWZuZGVmIFNWRV9HRVRfVkwKKyMgZGVmaW5lIFNWRV9HRVRfVkwoKQkJKC1FSU5WQUwp CisjZW5kaWYKIAogLyoKICAqIHRoaXMgaXMgd2hlcmUgdGhlIHN5c3RlbS13aWRlIG92ZXJmbG93 IFVJRCBhbmQgR0lEIGFyZSBkZWZpbmVkLCBmb3IKQEAgLTIzODUsNiArMjM5MSwxMiBAQCBTWVND QUxMX0RFRklORTUocHJjdGwsIGludCwgb3B0aW9uLCB1bnNpZ25lZCBsb25nLCBhcmcyLCB1bnNp Z25lZCBsb25nLCBhcmczLAogCWNhc2UgUFJfR0VUX0ZQX01PREU6CiAJCWVycm9yID0gR0VUX0ZQ X01PREUobWUpOwogCQlicmVhazsKKwljYXNlIFBSX1NWRV9TRVRfVkw6CisJCWVycm9yID0gU1ZF X1NFVF9WTChhcmcyKTsKKwkJYnJlYWs7CisJY2FzZSBQUl9TVkVfR0VUX1ZMOgorCQllcnJvciA9 IFNWRV9HRVRfVkwoKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJZXJyb3IgPSAtRUlOVkFMOwog CQlicmVhazsKLS0gCjIuMS40CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwprdm1hcm0gbWFpbGluZyBsaXN0Cmt2bWFybUBsaXN0cy5jcy5jb2x1bWJpYS5l ZHUKaHR0cHM6Ly9saXN0cy5jcy5jb2x1bWJpYS5lZHUvbWFpbG1hbi9saXN0aW5mby9rdm1hcm0K From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from usa-sjc-mx-foss1.foss.arm.com ([217.140.101.70]:56990 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752497AbdJ0Kv6 (ORCPT ); Fri, 27 Oct 2017 06:51:58 -0400 From: Dave Martin Subject: [PATCH v4 20/28] arm64/sve: Add prctl controls for userspace vector length management Date: Fri, 27 Oct 2017 11:51:02 +0100 Message-ID: <1509101470-7881-21-git-send-email-Dave.Martin@arm.com> In-Reply-To: <1509101470-7881-1-git-send-email-Dave.Martin@arm.com> References: <1509101470-7881-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 , Okamoto Takayuki , kvmarm@lists.cs.columbia.edu, libc-alpha@sourceware.org, linux-arch@vger.kernel.org Message-ID: <20171027105102.tNvejLudCU1R0uTndLMPPgj2eZi4BNXMrEEtoItVqBI@z> This patch adds two arm64-specific prctls, to permit userspace to control its vector length: * PR_SVE_SET_VL: set the thread's SVE vector length and vector length inheritance mode. * PR_SVE_GET_VL: get the same information. Although these prctls resemble instruction set features in the SVE architecture, they provide additional control: the vector length inheritance mode is Linux-specific and nothing to do with the architecture, and the architecture does not permit EL0 to set its own vector length directly. Both can be used in portable tools without requiring the use of SVE instructions. Signed-off-by: Dave Martin Reviewed-by: Catalin Marinas Cc: Alex Bennée --- **Dropped at v3** Reviewed-by: Alex Bennée due to non-trivial changes/fixes after v2. Changes since v3 ---------------- Requested by Catalin Marinas: * Replace static __maybe_unused functions with static inlines. (Retaining Catalin's Reviewed-by with his approval.) --- arch/arm64/include/asm/fpsimd.h | 14 +++++++++++ arch/arm64/include/asm/processor.h | 4 +++ arch/arm64/kernel/fpsimd.c | 50 ++++++++++++++++++++++++++++++++++++++ include/uapi/linux/prctl.h | 4 +++ kernel/sys.c | 12 +++++++++ 5 files changed, 84 insertions(+) diff --git a/arch/arm64/include/asm/fpsimd.h b/arch/arm64/include/asm/fpsimd.h index d754e5a..b868412 100644 --- a/arch/arm64/include/asm/fpsimd.h +++ b/arch/arm64/include/asm/fpsimd.h @@ -17,6 +17,7 @@ #define __ASM_FP_H #include +#include #ifndef __ASSEMBLY__ @@ -98,6 +99,9 @@ extern void sve_sync_from_fpsimd_zeropad(struct task_struct *task); extern int sve_set_vector_length(struct task_struct *task, unsigned long vl, unsigned long flags); +extern int sve_set_current_vl(unsigned long arg); +extern int sve_get_current_vl(void); + /* * Probing and setup functions. * Calls to these functions must be serialised with one another. @@ -114,6 +118,16 @@ static inline void fpsimd_release_task(struct task_struct *task) { } static inline void sve_sync_to_fpsimd(struct task_struct *task) { } static inline void sve_sync_from_fpsimd_zeropad(struct task_struct *task) { } +static inline int sve_set_current_vl(unsigned long arg) +{ + return -EINVAL; +} + +static inline int sve_get_current_vl(void) +{ + return -EINVAL; +} + static inline void sve_init_vq_map(void) { } static inline void sve_update_vq_map(void) { } static inline int sve_verify_vq_map(void) { return 0; } diff --git a/arch/arm64/include/asm/processor.h b/arch/arm64/include/asm/processor.h index c6fddb0..023cacb 100644 --- a/arch/arm64/include/asm/processor.h +++ b/arch/arm64/include/asm/processor.h @@ -217,5 +217,9 @@ static inline void spin_lock_prefetch(const void *ptr) int cpu_enable_pan(void *__unused); int cpu_enable_cache_maint_trap(void *__unused); +/* Userspace interface for PR_SVE_{SET,GET}_VL prctl()s: */ +#define SVE_SET_VL(arg) sve_set_current_vl(arg) +#define SVE_GET_VL() sve_get_current_vl() + #endif /* __ASSEMBLY__ */ #endif /* __ASM_PROCESSOR_H */ diff --git a/arch/arm64/kernel/fpsimd.c b/arch/arm64/kernel/fpsimd.c index a47ce44..7465622 100644 --- a/arch/arm64/kernel/fpsimd.c +++ b/arch/arm64/kernel/fpsimd.c @@ -28,6 +28,7 @@ #include #include #include +#include #include #include #include @@ -557,6 +558,55 @@ int sve_set_vector_length(struct task_struct *task, } /* + * Encode the current vector length and flags for return. + * This is only required for prctl(): ptrace has separate fields + * + * flags are as for sve_set_vector_length(). + */ +static int sve_prctl_status(unsigned long flags) +{ + int ret; + + if (flags & PR_SVE_SET_VL_ONEXEC) + ret = current->thread.sve_vl_onexec; + else + ret = current->thread.sve_vl; + + if (test_thread_flag(TIF_SVE_VL_INHERIT)) + ret |= PR_SVE_VL_INHERIT; + + return ret; +} + +/* PR_SVE_SET_VL */ +int sve_set_current_vl(unsigned long arg) +{ + unsigned long vl, flags; + int ret; + + vl = arg & PR_SVE_VL_LEN_MASK; + flags = arg & ~vl; + + if (!system_supports_sve()) + return -EINVAL; + + ret = sve_set_vector_length(current, vl, flags); + if (ret) + return ret; + + return sve_prctl_status(flags); +} + +/* PR_SVE_GET_VL */ +int sve_get_current_vl(void) +{ + if (!system_supports_sve()) + return -EINVAL; + + return sve_prctl_status(0); +} + +/* * Bitmap for temporary storage of the per-CPU set of supported vector lengths * during secondary boot. */ diff --git a/include/uapi/linux/prctl.h b/include/uapi/linux/prctl.h index 1b64901..1ef9370 100644 --- a/include/uapi/linux/prctl.h +++ b/include/uapi/linux/prctl.h @@ -198,7 +198,11 @@ struct prctl_mm_map { # define PR_CAP_AMBIENT_CLEAR_ALL 4 /* arm64 Scalable Vector Extension controls */ +/* Flag values must be kept in sync with ptrace NT_ARM_SVE interface */ +#define PR_SVE_SET_VL 48 /* set task vector length */ # define PR_SVE_SET_VL_ONEXEC (1 << 18) /* defer effect until exec */ +#define PR_SVE_GET_VL 49 /* get task vector length */ +/* Bits common to PR_SVE_SET_VL and PR_SVE_GET_VL */ # define PR_SVE_VL_LEN_MASK 0xffff # define PR_SVE_VL_INHERIT (1 << 17) /* inherit across exec */ diff --git a/kernel/sys.c b/kernel/sys.c index 9aebc29..c541916 100644 --- a/kernel/sys.c +++ b/kernel/sys.c @@ -110,6 +110,12 @@ #ifndef SET_FP_MODE # define SET_FP_MODE(a,b) (-EINVAL) #endif +#ifndef SVE_SET_VL +# define SVE_SET_VL(a) (-EINVAL) +#endif +#ifndef SVE_GET_VL +# define SVE_GET_VL() (-EINVAL) +#endif /* * this is where the system-wide overflow UID and GID are defined, for @@ -2385,6 +2391,12 @@ SYSCALL_DEFINE5(prctl, int, option, unsigned long, arg2, unsigned long, arg3, case PR_GET_FP_MODE: error = GET_FP_MODE(me); break; + case PR_SVE_SET_VL: + error = SVE_SET_VL(arg2); + break; + case PR_SVE_GET_VL: + error = SVE_GET_VL(); + break; default: error = -EINVAL; break; -- 2.1.4