summaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorKylene Hall <kjhall@us.ibm.com>2005-06-23 22:02:03 -0700
committerLinus Torvalds <torvalds@ppc970.osdl.org>2005-06-24 00:05:26 -0700
commit5e976d5557d3dd1e835b8be52e6201556dcfa052 (patch)
tree73f77bc349364eedbd2e3ceae8e9bf219f5bbd69 /drivers
parentd9e5b6bf9cf19e6e9f2825228136ea17bc9a051a (diff)
downloadlinux-stable-5e976d5557d3dd1e835b8be52e6201556dcfa052.tar.gz
linux-stable-5e976d5557d3dd1e835b8be52e6201556dcfa052.tar.bz2
linux-stable-5e976d5557d3dd1e835b8be52e6201556dcfa052.zip
[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')
-rw-r--r--drivers/char/tpm/tpm.c10
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;