diff options
author | Kylene Hall <kjhall@us.ibm.com> | 2005-06-24 09:02:03 +0400 |
---|---|---|
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-06-24 11:05:26 +0400 |
commit | 5e976d5557d3dd1e835b8be52e6201556dcfa052 (patch) | |
tree | 73f77bc349364eedbd2e3ceae8e9bf219f5bbd69 /drivers/char/tpm | |
parent | d9e5b6bf9cf19e6e9f2825228136ea17bc9a051a (diff) | |
download | linux-5e976d5557d3dd1e835b8be52e6201556dcfa052.tar.xz |
[PATCH] tpm: locking fixes
Add a missing lock in the register hardware and fix a misplaced lock release
release.
Signed-off-by: Kylene Hall <kjhall@us.ibm.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'drivers/char/tpm')
-rw-r--r-- | drivers/char/tpm/tpm.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/drivers/char/tpm/tpm.c b/drivers/char/tpm/tpm.c index e7c1dedfe448..c6d985b04b6d 100644 --- a/drivers/char/tpm/tpm.c +++ b/drivers/char/tpm/tpm.c @@ -447,15 +447,15 @@ EXPORT_SYMBOL_GPL(tpm_open); int tpm_release(struct inode *inode, struct file *file) { struct tpm_chip *chip = file->private_data; - - file->private_data = NULL; spin_lock(&driver_lock); + file->private_data = NULL; chip->num_opens--; del_singleshot_timer_sync(&chip->user_read_timer); atomic_set(&chip->data_pending, 0); - pci_dev_put(chip->pci_dev); + kfree(chip->data_buffer); + spin_unlock(&driver_lock); return 0; } @@ -665,10 +665,14 @@ dev_num_search_complete: return -ENODEV; } + spin_lock(&driver_lock); + pci_set_drvdata(pci_dev, chip); list_add(&chip->list, &tpm_chip_list); + spin_unlock(&driver_lock); + sysfs_create_group(&pci_dev->dev.kobj, chip->vendor->attr_group); return 0; |