From d924b0e42f94d005cad766279e5be1dceb120a3d Mon Sep 17 00:00:00 2001 From: Chris Wright Date: Fri, 15 Dec 2006 10:10:10 -0800 Subject: [PATCH] core2 rdtsc sync fix from arjan for 2.6.18 also --- queue-2.6.18/series | 1 + ...sync-only-for-netburst-not-for-core2.patch | 44 +++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 queue-2.6.18/x86-64-mark-rdtsc-as-sync-only-for-netburst-not-for-core2.patch diff --git a/queue-2.6.18/series b/queue-2.6.18/series index b21cdc17bb5..9a9121825c7 100644 --- a/queue-2.6.18/series +++ b/queue-2.6.18/series @@ -22,3 +22,4 @@ softirq-remove-bug_ons-which-can-incorrectly-trigger.patch m32r-make-userspace-headers-platform-independent.patch forcedeth-disable-intx-when-enabling-msi-in-forcedeth.patch bluetooth-add-packet-size-checks-for-capi-messages.patch +x86-64-mark-rdtsc-as-sync-only-for-netburst-not-for-core2.patch diff --git a/queue-2.6.18/x86-64-mark-rdtsc-as-sync-only-for-netburst-not-for-core2.patch b/queue-2.6.18/x86-64-mark-rdtsc-as-sync-only-for-netburst-not-for-core2.patch new file mode 100644 index 00000000000..e766b53785b --- /dev/null +++ b/queue-2.6.18/x86-64-mark-rdtsc-as-sync-only-for-netburst-not-for-core2.patch @@ -0,0 +1,44 @@ +From stable-bounces@linux.kernel.org Mon Dec 11 13:26:59 2006 +From: Arjan van de Ven +To: stable@kernel.org +Date: Mon, 11 Dec 2006 21:45:01 +0100 +Message-Id: <1165869901.27217.439.camel@laptopd505.fenrus.org> +Subject: 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: Arjan van de Ven +Signed-off-by: Andi Kleen +[chrisw: backported to 2.6.18] +Signed-off-by: Chris Wright +--- +Commit: f3d73707a1e84f0687a05144b70b660441e999c7 +Author: Arjan van de Ven +Date: Thu Dec 7 02:14:12 2006 +0100 + + arch/x86_64/kernel/setup.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +--- linux-2.6.18.5.orig/arch/x86_64/kernel/setup.c ++++ linux-2.6.18.5/arch/x86_64/kernel/setup.c +@@ -1010,7 +1010,10 @@ static void __cpuinit init_intel(struct + if ((c->x86 == 0xf && c->x86_model >= 0x03) || + (c->x86 == 0x6 && c->x86_model >= 0x0e)) + set_bit(X86_FEATURE_CONSTANT_TSC, &c->x86_capability); +- set_bit(X86_FEATURE_SYNC_RDTSC, &c->x86_capability); ++ if (c->x86 == 15) ++ 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); + + srat_detect_node(); -- 2.47.3