summaryrefslogtreecommitdiff
path: root/arch/x86/kernel/fpu
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86/kernel/fpu')
-rw-r--r--arch/x86/kernel/fpu/init.c35
1 files changed, 25 insertions, 10 deletions
diff --git a/arch/x86/kernel/fpu/init.c b/arch/x86/kernel/fpu/init.c
index fe8cce7..9da740e 100644
--- a/arch/x86/kernel/fpu/init.c
+++ b/arch/x86/kernel/fpu/init.c
@@ -284,42 +284,57 @@ static int __init no_387(char *s)
setup_clear_cpu_cap(X86_FEATURE_FPU);
return 1;
}
-
__setup("no387", no_387);
-static int __init x86_xsave_setup(char *s)
+/*
+ * Disable all xstate CPU features:
+ */
+static int __init x86_noxsave_setup(char *s)
{
if (strlen(s))
return 0;
+
setup_clear_cpu_cap(X86_FEATURE_XSAVE);
setup_clear_cpu_cap(X86_FEATURE_XSAVEOPT);
setup_clear_cpu_cap(X86_FEATURE_XSAVES);
setup_clear_cpu_cap(X86_FEATURE_AVX);
setup_clear_cpu_cap(X86_FEATURE_AVX2);
+
return 1;
}
-__setup("noxsave", x86_xsave_setup);
+__setup("noxsave", x86_noxsave_setup);
-static int __init x86_xsaveopt_setup(char *s)
+/*
+ * Disable the XSAVEOPT instruction specifically:
+ */
+static int __init x86_noxsaveopt_setup(char *s)
{
setup_clear_cpu_cap(X86_FEATURE_XSAVEOPT);
+
return 1;
}
-__setup("noxsaveopt", x86_xsaveopt_setup);
+__setup("noxsaveopt", x86_noxsaveopt_setup);
-static int __init x86_xsaves_setup(char *s)
+/*
+ * Disable the XSAVES instruction:
+ */
+static int __init x86_noxsaves_setup(char *s)
{
setup_clear_cpu_cap(X86_FEATURE_XSAVES);
+
return 1;
}
-__setup("noxsaves", x86_xsaves_setup);
+__setup("noxsaves", x86_noxsaves_setup);
-static int __init x86_fxsr_setup(char *s)
+/*
+ * Disable FX save/restore and SSE support:
+ */
+static int __init x86_nofxsr_setup(char *s)
{
setup_clear_cpu_cap(X86_FEATURE_FXSR);
setup_clear_cpu_cap(X86_FEATURE_FXSR_OPT);
setup_clear_cpu_cap(X86_FEATURE_XMM);
+
return 1;
}
-__setup("nofxsr", x86_fxsr_setup);
-
+__setup("nofxsr", x86_nofxsr_setup);