Messages in this thread | | | Date | Fri, 10 May 2002 08:58:47 -0400 (EDT) | From | "Richard B. Johnson" <> | Subject | spin-locks |
| |
Greetings lock wizards
I have discovered some things that I don't understand.
First, if I create a spin-lock in the ".data" segment it doesn't work on a SMP machine with two CPUs. I know I am supposed to use the macros, but I have some high-speed stuff written in assembly that needs a spin-lock. The 'doesn't work' is that the spin-lock seems to dead-lock, i.e., they loop forever with the interrupts disabled. I think what's really happening is that .data was paged and can't be paged back in with the interrupts off. I don't know. This stuff used to work....
In earlier versions of Linux, the locks were in .text_lock. Now they are in : _text_lock_KBUILD_BASENAME
So, what is special about this area that allows locks to work? And, what is special about .data that prevents them from working?
Also, there is a potential bug (ducks and hides under the desk) in the existing spin-lock unlocking. To unlock, the lock is simply set to 1. This works if you have two CPUs, but what about more?
Shouldn't the lock/unlock just be incremented/decremented so 'N' CPUs can pound on it?
Cheers, Dick Johnson
Penguin : Linux version 2.4.18 on an i686 machine (797.90 BogoMips).
Windows-2000/Professional isn't.
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |