diff options
author | Arnd Bergmann <arnd@arndb.de> | 2008-05-20 21:16:51 +0400 |
---|---|---|
committer | Jonathan Corbet <corbet@lwn.net> | 2008-07-03 01:06:25 +0400 |
commit | 25368ca579905efe7f7dda43c252eb7b371de98c (patch) | |
tree | 084b749627c5087456b26bcb85b48017f5dbf38c | |
parent | 09de36137c3794786bc75682c0e1ce45182c1772 (diff) | |
download | linux-25368ca579905efe7f7dda43c252eb7b371de98c.tar.xz |
tpm-tpm: BKL pushdown
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
-rw-r--r-- | drivers/char/tpm/tpm.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/drivers/char/tpm/tpm.c b/drivers/char/tpm/tpm.c index a5d8bcb40000..e1fc193d9396 100644 --- a/drivers/char/tpm/tpm.c +++ b/drivers/char/tpm/tpm.c @@ -26,6 +26,7 @@ #include <linux/poll.h> #include <linux/mutex.h> #include <linux/spinlock.h> +#include <linux/smp_lock.h> #include "tpm.h" @@ -897,6 +898,7 @@ int tpm_open(struct inode *inode, struct file *file) int rc = 0, minor = iminor(inode); struct tpm_chip *chip = NULL, *pos; + lock_kernel(); spin_lock(&driver_lock); list_for_each_entry(pos, &tpm_chip_list, list) { @@ -926,16 +928,19 @@ int tpm_open(struct inode *inode, struct file *file) if (chip->data_buffer == NULL) { chip->num_opens--; put_device(chip->dev); + unlock_kernel(); return -ENOMEM; } atomic_set(&chip->data_pending, 0); file->private_data = chip; + unlock_kernel(); return 0; err_out: spin_unlock(&driver_lock); + unlock_kernel(); return rc; } EXPORT_SYMBOL_GPL(tpm_open); |