]> git.karo-electronics.de Git - karo-tx-linux.git/commit
IA64: fix siglock
authorTony Luck <tony.luck@intel.com>
Thu, 9 Sep 2010 22:16:56 +0000 (15:16 -0700)
committerGreg Kroah-Hartman <gregkh@suse.de>
Mon, 27 Sep 2010 00:21:29 +0000 (17:21 -0700)
commite3c0109cdf6b0656887364b6dd435cb5e7d30b15
tree34607155df4815310960d2d86096a9bab1405d8d
parentacf5fad61bc0f2c28e58ccfe21511ff242ea80e4
IA64: fix siglock

commit f574c843191728d9407b766a027f779dcd27b272 upstream.

When ia64 converted to using ticket locks, an inline implementation
of trylock/unlock in fsys.S was missed.  This was not noticed because
in most circumstances it simply resulted in using the slow path because
the siglock was apparently not available (under old spinlock rules).

Problems occur when the ticket spinlock has value 0x0 (when first
initialised, or when it wraps around). At this point the fsys.S
code acquires the lock (changing the 0x0 to 0x1. If another process
attempts to get the lock at this point, it will change the value from
0x1 to 0x2 (using new ticket lock rules). Then the fsys.S code will
free the lock using old spinlock rules by writing 0x0 to it. From
here a variety of bad things can happen.

Signed-off-by: Tony Luck <tony.luck@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
arch/ia64/kernel/fsys.S