From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dave Martin Subject: [PATCH v3 17/28] arm64/sve: Preserve SVE registers around kernel-mode NEON use Date: Tue, 10 Oct 2017 19:38:34 +0100 Message-ID: <1507660725-7986-18-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 S2VybmVsLW1vZGUgTkVPTiB3aWxsIGNvcnJ1cHQgdGhlIFNWRSB2ZWN0b3IgcmVnaXN0ZXJzLCBk dWUgdG8gdGhlCndheSB0aGV5IGFsaWFzIHRoZSBGUFNJTUQgdmVjdG9yIHJlZ2lzdGVycyBpbiB0 aGUgaGFyZHdhcmUuCgpUaGlzIHBhdGNoIGVuc3VyZXMgdGhhdCBhbnkgbGl2ZSBTVkUgcmVnaXN0 ZXIgY29udGVudCBmb3IgdGhlIHRhc2sKaXMgc2F2ZWQgYnkga2VybmVsX25lb25fYmVnaW4oKS4g IFRoZSBkYXRhIHdpbGwgYmUgcmVzdG9yZWQgaW4gdGhlCnVzdWFsIHdheSBvbiByZXR1cm4gdG8g dXNlcnNwYWNlLgoKU2lnbmVkLW9mZi1ieTogRGF2ZSBNYXJ0aW4gPERhdmUuTWFydGluQGFybS5j b20+ClJldmlld2VkLWJ5OiBBcmQgQmllc2hldXZlbCA8YXJkLmJpZXNoZXV2ZWxAbGluYXJvLm9y Zz4KUmV2aWV3ZWQtYnk6IEFsZXggQmVubsOpZSA8YWxleC5iZW5uZWVAbGluYXJvLm9yZz4KLS0t CiBhcmNoL2FybTY0L2tlcm5lbC9mcHNpbWQuYyB8IDYgKysrKy0tCiAxIGZpbGUgY2hhbmdlZCwg NCBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQv a2VybmVsL2Zwc2ltZC5jIGIvYXJjaC9hcm02NC9rZXJuZWwvZnBzaW1kLmMKaW5kZXggNTY3M2Y1 MC4uYjFkMzgzYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvZnBzaW1kLmMKKysrIGIv YXJjaC9hcm02NC9rZXJuZWwvZnBzaW1kLmMKQEAgLTkwOSw4ICs5MDksMTAgQEAgdm9pZCBrZXJu ZWxfbmVvbl9iZWdpbih2b2lkKQogCV9fdGhpc19jcHVfd3JpdGUoa2VybmVsX25lb25fYnVzeSwg dHJ1ZSk7CiAKIAkvKiBTYXZlIHVuc2F2ZWQgdGFzayBmcHNpbWQgc3RhdGUsIGlmIGFueTogKi8K LQlpZiAoY3VycmVudC0+bW0gJiYgIXRlc3RfYW5kX3NldF90aHJlYWRfZmxhZyhUSUZfRk9SRUlH Tl9GUFNUQVRFKSkKLQkJZnBzaW1kX3NhdmVfc3RhdGUoJmN1cnJlbnQtPnRocmVhZC5mcHNpbWRf c3RhdGUpOworCWlmIChjdXJyZW50LT5tbSkgeworCQl0YXNrX2Zwc2ltZF9zYXZlKCk7CisJCXNl dF90aHJlYWRfZmxhZyhUSUZfRk9SRUlHTl9GUFNUQVRFKTsKKwl9CiAKIAkvKiBJbnZhbGlkYXRl IGFueSB0YXNrIHN0YXRlIHJlbWFpbmluZyBpbiB0aGUgZnBzaW1kIHJlZ3M6ICovCiAJX190aGlz X2NwdV93cml0ZShmcHNpbWRfbGFzdF9zdGF0ZSwgTlVMTCk7Ci0tIAoyLjEuNAoKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18Ka3ZtYXJtIG1haWxpbmcgbGlz dAprdm1hcm1AbGlzdHMuY3MuY29sdW1iaWEuZWR1Cmh0dHBzOi8vbGlzdHMuY3MuY29sdW1iaWEu ZWR1L21haWxtYW4vbGlzdGluZm8va3ZtYXJtCg== 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]:49048 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932499AbdJJSjb (ORCPT ); Tue, 10 Oct 2017 14:39:31 -0400 From: Dave Martin Subject: [PATCH v3 17/28] arm64/sve: Preserve SVE registers around kernel-mode NEON use Date: Tue, 10 Oct 2017 19:38:34 +0100 Message-ID: <1507660725-7986-18-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: <20171010183834.YAyye81YuGzz7cd7DOjXh3tf6FbFdpv-SYkOTcLerZU@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 --- 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 5673f50..b1d383a 100644 --- a/arch/arm64/kernel/fpsimd.c +++ b/arch/arm64/kernel/fpsimd.c @@ -909,8 +909,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