diff options
author | Parag Warudkar <pwarudkar@aol.com> | 2007-05-08 11:31:09 +0400 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-05-08 22:15:13 +0400 |
commit | 8e39c933b1b7df501dbb68879fb1640e277b8a5c (patch) | |
tree | 870bb5506fb670d0e44c00a7d330ee064239298b /include/asm-sparc64/pgtable.h | |
parent | 53ab97a1c1536015d4d6d900363ea96fece5ed97 (diff) | |
download | linux-8e39c933b1b7df501dbb68879fb1640e277b8a5c.tar.xz |
tpm: fix sleep-in-spinlock
flush_scheduled_work() can sleep, and we're calling it under spinlock.
AFAICS, moving flush_scheduled_work before spin_lock() should not cause any
problems.
Reason being - The only thing that can race against tpm_release is tpm_open
(tpm_release is called when last reference to the file is closed and only
thing that can happen after that is tpm_open??) and tpm_open acquires
driver_lock and more over it bails out with EBUSY if chip->num_opens is
greater than 0.
I also moved chip->num_pending-- to after deleting timer and setting data
pending as it looks more correct for the paranoid although it probably doesn't
matter as it is guarded by driver_lock. None the less this change should not
cause problems.
While I was at it I noticed a missing NULL check in tpm_register_hardware
which is fixed with this patch as well.
Signed-off-by: Parag Warudkar <parag.warudkar@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'include/asm-sparc64/pgtable.h')
0 files changed, 0 insertions, 0 deletions