aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKylene Hall <kjhall@us.ibm.com>2005-06-24 01:02:03 -0400
committerLinus Torvalds <torvalds@ppc970.osdl.org>2005-06-24 03:05:26 -0400
commit5e976d5557d3dd1e835b8be52e6201556dcfa052 (patch)
tree73f77bc349364eedbd2e3ceae8e9bf219f5bbd69
parentd9e5b6bf9cf19e6e9f2825228136ea17bc9a051a (diff)
[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>
-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);
447int tpm_release(struct inode *inode, struct file *file) 447int tpm_release(struct inode *inode, struct file *file)
448{ 448{
449 struct tpm_chip *chip = file->private_data; 449 struct tpm_chip *chip = file->private_data;
450
451 file->private_data = NULL;
452 450
453 spin_lock(&driver_lock); 451 spin_lock(&driver_lock);
452 file->private_data = NULL;
454 chip->num_opens--; 453 chip->num_opens--;
455 del_singleshot_timer_sync(&chip->user_read_timer); 454 del_singleshot_timer_sync(&chip->user_read_timer);
456 atomic_set(&chip->data_pending, 0); 455 atomic_set(&chip->data_pending, 0);
457
458 pci_dev_put(chip->pci_dev); 456 pci_dev_put(chip->pci_dev);
457 kfree(chip->data_buffer);
458 spin_unlock(&driver_lock);
459 return 0; 459 return 0;
460} 460}
461 461
@@ -665,10 +665,14 @@ dev_num_search_complete:
665 return -ENODEV; 665 return -ENODEV;
666 } 666 }
667 667
668 spin_lock(&driver_lock);
669
668 pci_set_drvdata(pci_dev, chip); 670 pci_set_drvdata(pci_dev, chip);
669 671
670 list_add(&chip->list, &tpm_chip_list); 672 list_add(&chip->list, &tpm_chip_list);
671 673
674 spin_unlock(&driver_lock);
675
672 sysfs_create_group(&pci_dev->dev.kobj, chip->vendor->attr_group); 676 sysfs_create_group(&pci_dev->dev.kobj, chip->vendor->attr_group);
673 677
674 return 0; 678 return 0;