]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blob - 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
1 From b70f4e85bfc4d7000036355b714a92d5c574f1be Mon Sep 17 00:00:00 2001
2 From: Tony Luck <tony.luck@intel.com>
3 Date: Wed, 30 Jun 2010 10:46:16 -0700
4 Subject: [IA64] Fix spinaphore down_spin()
5
6 From: Tony Luck <tony.luck@intel.com>
7
8 commit b70f4e85bfc4d7000036355b714a92d5c574f1be upstream.
9
10 Typo 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
12 system hanging when the values in ticket/serve get larger than
13 32-bits. A big enough system running the right test can hit this
14 in a just a few hours.
15
16 Broken since 883a3acf5b0d4782ac35981227a0d094e8b44850
17 [IA64] Re-implement spinaphores using ticket lock concepts
18
19 Reported via IRC by Bjorn Helgaas
20
21 Signed-off-by: Tony Luck <tony.luck@intel.com>
22 Signed-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();