Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f3d73707 authored by Arjan van de Ven's avatar Arjan van de Ven Committed by Andi Kleen
Browse files

[PATCH] x86-64: Mark rdtsc as sync only for netburst, not for core2



On the Core2 cpus, the rdtsc instruction is not serializing (as defined
in the architecture reference since rdtsc exists) and due to the deep
speculation of these cores, it's possible that you can observe time go
backwards between cores due to this speculation. Since the kernel
already deals with this with the SYNC_RDTSC flag, the solution is
simple, only assume that the instruction is serializing on family 15...

The price one pays for this is a slightly slower gettimeofday (by a
dozen or two cycles), but that increase is quite small to pay for a
really-going-forward tsc counter.

Signed-off-by: default avatarArjan van de Ven <arjan@linux.intel.com>
Signed-off-by: default avatarAndi Kleen <ak@suse.de>
parent e496a0da
Loading
Loading
Loading
Loading
+4 −1
Original line number Original line Diff line number Diff line
@@ -860,7 +860,10 @@ static void __cpuinit init_intel(struct cpuinfo_x86 *c)
		set_bit(X86_FEATURE_CONSTANT_TSC, &c->x86_capability);
		set_bit(X86_FEATURE_CONSTANT_TSC, &c->x86_capability);
	if (c->x86 == 6)
	if (c->x86 == 6)
		set_bit(X86_FEATURE_REP_GOOD, &c->x86_capability);
		set_bit(X86_FEATURE_REP_GOOD, &c->x86_capability);
	if (c->x86 == 15)
		set_bit(X86_FEATURE_SYNC_RDTSC, &c->x86_capability);
		set_bit(X86_FEATURE_SYNC_RDTSC, &c->x86_capability);
	else
		clear_bit(X86_FEATURE_SYNC_RDTSC, &c->x86_capability);
 	c->x86_max_cores = intel_num_cpu_cores(c);
 	c->x86_max_cores = intel_num_cpu_cores(c);


	srat_detect_node();
	srat_detect_node();