Spinlocks may be broken.

Started by Alfred Perlsteinabout 25 years ago3 messages
#1Alfred Perlstein
bright@wintelcom.net

I'm debugging some code here where I get problems related to
spinlocks, anyhow, while running through the files I noticed
that the UNLOCK code seems sort of broken.

What I mean is that on machines that have loosely ordered
memory models you can have problems because of data that's
supposed to be protected by the lock not getting flushed
out to main memory until possibly after the unlock happens.

I'm pretty sure you guys need memory barrier ops.

--
-Alfred Perlstein - [bright@wintelcom.net|alfred@freebsd.org]
"I have the heart of a child; I keep it in a jar on my desk."

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Alfred Perlstein (#1)
Re: Spinlocks may be broken.

Alfred Perlstein <bright@wintelcom.net> writes:

I'm pretty sure you guys need memory barrier ops.

On a machine that requires such a thing, the assembly code for UNLOCK
should include it. Want to provide a patch?

regards, tom lane

#3Alfred Perlstein
bright@wintelcom.net
In reply to: Tom Lane (#2)
Re: Spinlocks may be broken.

* Tom Lane <tgl@sss.pgh.pa.us> [001205 07:24] wrote:

Alfred Perlstein <bright@wintelcom.net> writes:

I'm pretty sure you guys need memory barrier ops.

On a machine that requires such a thing, the assembly code for UNLOCK
should include it. Want to provide a patch?

My assembler is extremely rusty, you can probably find such code
in the NetBSD or Linux kernel for all the archs you want to do.
I wouldn't feel confident providing a patch, all I have is x86
hardware.

--
-Alfred Perlstein - [bright@wintelcom.net|alfred@freebsd.org]
"I have the heart of a child; I keep it in a jar on my desk."