From 18112d73b28ae2ff534011d08db03d05b0155589 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Duval?= Date: Sat, 31 Oct 2020 09:23:21 +0100 Subject: [PATCH] kernel/x86_64: use standard xstate length MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit for sse/avx when found invalid Change-Id: I1c93e5dd8de80bf155eabb55c77119349a7186ab Reviewed-on: https://review.haiku-os.org/c/haiku/+/3372 Reviewed-by: Jérôme Duval --- src/system/kernel/arch/x86/64/thread.cpp | 5 ----- src/system/kernel/arch/x86/arch_cpu.cpp | 2 ++ 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/src/system/kernel/arch/x86/64/thread.cpp b/src/system/kernel/arch/x86/64/thread.cpp index f767ca0f16..3cf8ee6e32 100644 --- a/src/system/kernel/arch/x86/64/thread.cpp +++ b/src/system/kernel/arch/x86/64/thread.cpp @@ -144,11 +144,6 @@ arch_thread_init(kernel_args* args) // Save one global valid FPU state; it will be copied in the arch dependent // part of each new thread. if (gHasXsave || gHasXsavec) { - if (gFPUSaveLength > sizeof(sInitialState.fpu_state)) { - panic("XSAVE FPU context is larger than allowed " - "(need at least %" B_PRIu64 " bytes)", gFPUSaveLength); - return B_ERROR; - } memset(sInitialState.fpu_state, 0, gFPUSaveLength); if (gHasXsavec) { asm volatile ( diff --git a/src/system/kernel/arch/x86/arch_cpu.cpp b/src/system/kernel/arch/x86/arch_cpu.cpp index 692fd1cc46..db5eac8e39 100644 --- a/src/system/kernel/arch/x86/arch_cpu.cpp +++ b/src/system/kernel/arch/x86/arch_cpu.cpp @@ -1554,6 +1554,8 @@ arch_cpu_init_post_vm(kernel_args* args) call_all_cpus_sync(&enable_xsavemask, NULL); get_current_cpuid(&cpuid, 0xd, 0); gFPUSaveLength = cpuid.regs.ebx; + if (gFPUSaveLength > sizeof(sInitialState.fpu_state)) + gFPUSaveLength = 832; arch_altcodepatch_replace(ALTCODEPATCH_TAG_XSAVE, gHasXsavec ? &_xsavec : &_xsave, 4);