]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blame - releases/2.6.32.17/fix-spinaphore-down_spin.patch
4.9-stable patches
[thirdparty/kernel/stable-queue.git] / releases / 2.6.32.17 / fix-spinaphore-down_spin.patch
CommitLineData
9880552d
GKH
1From b70f4e85bfc4d7000036355b714a92d5c574f1be Mon Sep 17 00:00:00 2001
2From: Tony Luck <tony.luck@intel.com>
3Date: Wed, 30 Jun 2010 10:46:16 -0700
4Subject: [IA64] Fix spinaphore down_spin()
5
6From: Tony Luck <tony.luck@intel.com>
7
8commit b70f4e85bfc4d7000036355b714a92d5c574f1be upstream.
9
10Typo in down_spin() meant it only read the low 32 bits of the
11"serve" value, instead of the full 64 bits. This results in the
12system hanging when the values in ticket/serve get larger than
1332-bits. A big enough system running the right test can hit this
14in a just a few hours.
15
16Broken since 883a3acf5b0d4782ac35981227a0d094e8b44850
17 [IA64] Re-implement spinaphores using ticket lock concepts
18
19Reported via IRC by Bjorn Helgaas
20
21Signed-off-by: Tony Luck <tony.luck@intel.com>
22Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
23
24---
25 arch/ia64/mm/tlb.c | 2 +-
26 1 file changed, 1 insertion(+), 1 deletion(-)
27
28--- a/arch/ia64/mm/tlb.c
29+++ b/arch/ia64/mm/tlb.c
30@@ -120,7 +120,7 @@ static inline void down_spin(struct spin
31 ia64_invala();
32
33 for (;;) {
34- asm volatile ("ld4.c.nc %0=[%1]" : "=r"(serve) : "r"(&ss->serve) : "memory");
35+ asm volatile ("ld8.c.nc %0=[%1]" : "=r"(serve) : "r"(&ss->serve) : "memory");
36 if (time_before(t, serve))
37 return;
38 cpu_relax();