From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dave Martin Subject: [PATCH v4 17/28] arm64/sve: Preserve SVE registers around kernel-mode NEON use Date: Fri, 27 Oct 2017 11:50:59 +0100 Message-ID: <1509101470-7881-18-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 S2VybmVsLW1vZGUgTkVPTiB3aWxsIGNvcnJ1cHQgdGhlIFNWRSB2ZWN0b3IgcmVnaXN0ZXJzLCBk dWUgdG8gdGhlCndheSB0aGV5IGFsaWFzIHRoZSBGUFNJTUQgdmVjdG9yIHJlZ2lzdGVycyBpbiB0 aGUgaGFyZHdhcmUuCgpUaGlzIHBhdGNoIGVuc3VyZXMgdGhhdCBhbnkgbGl2ZSBTVkUgcmVnaXN0 ZXIgY29udGVudCBmb3IgdGhlIHRhc2sKaXMgc2F2ZWQgYnkga2VybmVsX25lb25fYmVnaW4oKS4g IFRoZSBkYXRhIHdpbGwgYmUgcmVzdG9yZWQgaW4gdGhlCnVzdWFsIHdheSBvbiByZXR1cm4gdG8g dXNlcnNwYWNlLgoKU2lnbmVkLW9mZi1ieTogRGF2ZSBNYXJ0aW4gPERhdmUuTWFydGluQGFybS5j b20+ClJldmlld2VkLWJ5OiBBcmQgQmllc2hldXZlbCA8YXJkLmJpZXNoZXV2ZWxAbGluYXJvLm9y Zz4KUmV2aWV3ZWQtYnk6IEFsZXggQmVubsOpZSA8YWxleC5iZW5uZWVAbGluYXJvLm9yZz4KUmV2 aWV3ZWQtYnk6IENhdGFsaW4gTWFyaW5hcyA8Y2F0YWxpbi5tYXJpbmFzQGFybS5jb20+Ci0tLQog YXJjaC9hcm02NC9rZXJuZWwvZnBzaW1kLmMgfCA2ICsrKystLQogMSBmaWxlIGNoYW5nZWQsIDQg aW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tl cm5lbC9mcHNpbWQuYyBiL2FyY2gvYXJtNjQva2VybmVsL2Zwc2ltZC5jCmluZGV4IDcwM2U5ZDcu LmQ1MTA4ZTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva2VybmVsL2Zwc2ltZC5jCisrKyBiL2Fy Y2gvYXJtNjQva2VybmVsL2Zwc2ltZC5jCkBAIC04ODQsOCArODg0LDEwIEBAIHZvaWQga2VybmVs X25lb25fYmVnaW4odm9pZCkKIAlfX3RoaXNfY3B1X3dyaXRlKGtlcm5lbF9uZW9uX2J1c3ksIHRy dWUpOwogCiAJLyogU2F2ZSB1bnNhdmVkIHRhc2sgZnBzaW1kIHN0YXRlLCBpZiBhbnk6ICovCi0J aWYgKGN1cnJlbnQtPm1tICYmICF0ZXN0X2FuZF9zZXRfdGhyZWFkX2ZsYWcoVElGX0ZPUkVJR05f RlBTVEFURSkpCi0JCWZwc2ltZF9zYXZlX3N0YXRlKCZjdXJyZW50LT50aHJlYWQuZnBzaW1kX3N0 YXRlKTsKKwlpZiAoY3VycmVudC0+bW0pIHsKKwkJdGFza19mcHNpbWRfc2F2ZSgpOworCQlzZXRf dGhyZWFkX2ZsYWcoVElGX0ZPUkVJR05fRlBTVEFURSk7CisJfQogCiAJLyogSW52YWxpZGF0ZSBh bnkgdGFzayBzdGF0ZSByZW1haW5pbmcgaW4gdGhlIGZwc2ltZCByZWdzOiAqLwogCV9fdGhpc19j cHVfd3JpdGUoZnBzaW1kX2xhc3Rfc3RhdGUsIE5VTEwpOwotLSAKMi4xLjQKCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmt2bWFybSBtYWlsaW5nIGxpc3QK a3ZtYXJtQGxpc3RzLmNzLmNvbHVtYmlhLmVkdQpodHRwczovL2xpc3RzLmNzLmNvbHVtYmlhLmVk dS9tYWlsbWFuL2xpc3RpbmZvL2t2bWFybQo= From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from foss.arm.com ([217.140.101.70]:56948 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752467AbdJ0Kvx (ORCPT ); Fri, 27 Oct 2017 06:51:53 -0400 From: Dave Martin Subject: [PATCH v4 17/28] arm64/sve: Preserve SVE registers around kernel-mode NEON use Date: Fri, 27 Oct 2017 11:50:59 +0100 Message-ID: <1509101470-7881-18-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: <20171027105059.-XBVKCd9XCGMJCGHIgJmLSbTs_V5hGmDl0XmEKafk2w@z> Kernel-mode NEON will corrupt the SVE vector registers, due to the way they alias the FPSIMD vector registers in the hardware. This patch ensures that any live SVE register content for the task is saved by kernel_neon_begin(). The data will be restored in the usual way on return to userspace. Signed-off-by: Dave Martin Reviewed-by: Ard Biesheuvel Reviewed-by: Alex BennĂ©e Reviewed-by: Catalin Marinas --- arch/arm64/kernel/fpsimd.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/arch/arm64/kernel/fpsimd.c b/arch/arm64/kernel/fpsimd.c index 703e9d7..d5108e8 100644 --- a/arch/arm64/kernel/fpsimd.c +++ b/arch/arm64/kernel/fpsimd.c @@ -884,8 +884,10 @@ void kernel_neon_begin(void) __this_cpu_write(kernel_neon_busy, true); /* Save unsaved task fpsimd state, if any: */ - if (current->mm && !test_and_set_thread_flag(TIF_FOREIGN_FPSTATE)) - fpsimd_save_state(¤t->thread.fpsimd_state); + if (current->mm) { + task_fpsimd_save(); + set_thread_flag(TIF_FOREIGN_FPSTATE); + } /* Invalidate any task state remaining in the fpsimd regs: */ __this_cpu_write(fpsimd_last_state, NULL); -- 2.1.4