Commit b70f4e85 authored by Tony Luck's avatar Tony Luck

[IA64] Fix spinaphore down_spin()

Typo in down_spin() meant it only read the low 32 bits of the
"serve" value, instead of the full 64 bits. This results in the
system hanging when the values in ticket/serve get larger than
32-bits. A big enough system running the right test can hit this
in a just a few hours.

Broken since 883a3acf
    [IA64] Re-implement spinaphores using ticket lock concepts

Reported via IRC by Bjorn Helgaas
Signed-off-by: default avatarTony Luck <tony.luck@intel.com>
parent 984bc960
...@@ -121,7 +121,7 @@ static inline void down_spin(struct spinaphore *ss) ...@@ -121,7 +121,7 @@ static inline void down_spin(struct spinaphore *ss)
ia64_invala(); ia64_invala();
for (;;) { for (;;) {
asm volatile ("ld4.c.nc %0=[%1]" : "=r"(serve) : "r"(&ss->serve) : "memory"); asm volatile ("ld8.c.nc %0=[%1]" : "=r"(serve) : "r"(&ss->serve) : "memory");
if (time_before(t, serve)) if (time_before(t, serve))
return; return;
cpu_relax(); cpu_relax();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment