aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/char/tpm/tpm.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/char/tpm/tpm.c')
-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;