Browse Source

Merge branch 'x86/urgent' into x86/fpu, to resolve a conflict

Conflicts:
	arch/x86/kernel/i387.c

This commit is conflicting:

  e88221c50cad ("x86/fpu: Disable XSAVES* support for now")

These functions changed a lot, move the quirk to arch/x86/kernel/fpu/init.c's
fpu__init_system_xstate_size_legacy().

Signed-off-by: Ingo Molnar <mingo@kernel.org>
Ingo Molnar 10 years ago
parent
commit
6f56a8d024

+ 1 - 1
Documentation/ABI/testing/sysfs-devices-system-cpu

@@ -162,7 +162,7 @@ Description:	Discover CPUs in the same CPU frequency coordination domain
 What:		/sys/devices/system/cpu/cpu*/cache/index3/cache_disable_{0,1}
 What:		/sys/devices/system/cpu/cpu*/cache/index3/cache_disable_{0,1}
 Date:		August 2008
 Date:		August 2008
 KernelVersion:	2.6.27
 KernelVersion:	2.6.27
-Contact:	discuss@x86-64.org
+Contact:	Linux kernel mailing list <linux-kernel@vger.kernel.org>
 Description:	Disable L3 cache indices
 Description:	Disable L3 cache indices
 
 
 		These files exist in every CPU's cache/index3 directory. Each
 		These files exist in every CPU's cache/index3 directory. Each

+ 5 - 2
arch/x86/kernel/cpu/mcheck/mce.c

@@ -708,6 +708,7 @@ static int mce_no_way_out(struct mce *m, char **msg, unsigned long *validp,
 			  struct pt_regs *regs)
 			  struct pt_regs *regs)
 {
 {
 	int i, ret = 0;
 	int i, ret = 0;
+	char *tmp;
 
 
 	for (i = 0; i < mca_cfg.banks; i++) {
 	for (i = 0; i < mca_cfg.banks; i++) {
 		m->status = mce_rdmsrl(MSR_IA32_MCx_STATUS(i));
 		m->status = mce_rdmsrl(MSR_IA32_MCx_STATUS(i));
@@ -716,9 +717,11 @@ static int mce_no_way_out(struct mce *m, char **msg, unsigned long *validp,
 			if (quirk_no_way_out)
 			if (quirk_no_way_out)
 				quirk_no_way_out(i, m, regs);
 				quirk_no_way_out(i, m, regs);
 		}
 		}
-		if (mce_severity(m, mca_cfg.tolerant, msg, true) >=
-		    MCE_PANIC_SEVERITY)
+
+		if (mce_severity(m, mca_cfg.tolerant, &tmp, true) >= MCE_PANIC_SEVERITY) {
+			*msg = tmp;
 			ret = 1;
 			ret = 1;
+		}
 	}
 	}
 	return ret;
 	return ret;
 }
 }

+ 14 - 0
arch/x86/kernel/fpu/init.c

@@ -167,6 +167,20 @@ static void __init fpu__init_system_xstate_size_legacy(void)
 		else
 		else
 			xstate_size = sizeof(struct fregs_state);
 			xstate_size = sizeof(struct fregs_state);
 	}
 	}
+	/*
+	 * Quirk: we don't yet handle the XSAVES* instructions
+	 * correctly, as we don't correctly convert between
+	 * standard and compacted format when interfacing
+	 * with user-space - so disable it for now.
+	 *
+	 * The difference is small: with recent CPUs the
+	 * compacted format is only marginally smaller than
+	 * the standard FPU state format.
+	 *
+	 * ( This is easy to backport while we are fixing
+	 *   XSAVES* support. )
+	 */
+	setup_clear_cpu_cap(X86_FEATURE_XSAVES);
 }
 }
 
 
 /*
 /*