powerpc/spufs: Use state_mutex for switch_log locking, and prevent multiple openers
authorJeremy Kerr <jk@ozlabs.org>
Wed, 15 Oct 2008 23:03:46 +0000 (10:03 +1100)
committerJeremy Kerr <jk@ozlabs.org>
Tue, 21 Oct 2008 00:13:19 +0000 (11:13 +1100)
commitf5ed0eb6fe131e8f3847323b4aa569a6f7b36f56
tree7da2dc8897685843430e61c10a0921ed7a8a499d
parente869446bb6db209e6092f7cba6cdfc2a5e637177
powerpc/spufs: Use state_mutex for switch_log locking, and prevent multiple openers

Currently, we use ctx->mapping_lock and ctx->switch_log->lock for the
context switch log. The mapping lock only prevents concurrent open()s,
so we require the switch_lock->lock for reads.

Since writes to the switch log buffer occur on context switches, we're
better off synchronising with the state_mutex, which is held during a
switch. Since we're serialised througout the buffer reads and writes,
we can use the state mutex to protect open and release too, and
can now kfree() the log buffer on release. This allows us to perform
the switch log notify without taking any extra locks.

Because the buffer is only present while the file is open, we can use
it to prevent multiple simultaneous openers.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
arch/powerpc/platforms/cell/spufs/file.c
arch/powerpc/platforms/cell/spufs/run.c
arch/powerpc/platforms/cell/spufs/spufs.h