Browse Source

x86: add noclflush option

To disable CLFLUSH usage, especially in change_page_attr().

Signed-off-by: Andi Kleen <ak@suse.de>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Andi Kleen 17 years ago
parent
commit
191679fdfa

+ 2 - 0
Documentation/kernel-parameters.txt

@@ -1191,6 +1191,8 @@ and is between 256 and 4096 characters. It is defined in the file
 			register save and restore. The kernel will only save
 			register save and restore. The kernel will only save
 			legacy floating-point registers on task switch.
 			legacy floating-point registers on task switch.
 
 
+	noclflush	[BUGS=X86] Don't use the CLFLUSH instruction
+
 	nohlt		[BUGS=ARM]
 	nohlt		[BUGS=ARM]
 
 
 	no-hlt		[BUGS=X86-32] Tells the kernel that the hlt
 	no-hlt		[BUGS=X86-32] Tells the kernel that the hlt

+ 7 - 0
arch/x86/kernel/cpu/common.c

@@ -542,6 +542,13 @@ void __cpuinit detect_ht(struct cpuinfo_x86 *c)
 }
 }
 #endif
 #endif
 
 
+static __init int setup_noclflush(char *arg)
+{
+	setup_clear_cpu_cap(X86_FEATURE_CLFLSH);
+	return 1;
+}
+__setup("noclflush", setup_noclflush);
+
 void __cpuinit print_cpu_info(struct cpuinfo_x86 *c)
 void __cpuinit print_cpu_info(struct cpuinfo_x86 *c)
 {
 {
 	char *vendor = NULL;
 	char *vendor = NULL;

+ 7 - 0
arch/x86/kernel/setup_64.c

@@ -1032,6 +1032,13 @@ void __cpuinit identify_cpu(struct cpuinfo_x86 *c)
 
 
 }
 }
 
 
+static __init int setup_noclflush(char *arg)
+{
+	setup_clear_cpu_cap(X86_FEATURE_CLFLSH);
+	return 1;
+}
+__setup("noclflush", setup_noclflush);
+
 void __cpuinit print_cpu_info(struct cpuinfo_x86 *c)
 void __cpuinit print_cpu_info(struct cpuinfo_x86 *c)
 {
 {
 	if (c->x86_model_id[0])
 	if (c->x86_model_id[0])