[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>
This commit is contained in:
committed by
Linus Torvalds
parent
d9e5b6bf9c
commit
5e976d5557
@@ -448,14 +448,14 @@ int tpm_release(struct inode *inode, struct file *file)
|
|||||||
{
|
{
|
||||||
struct tpm_chip *chip = file->private_data;
|
struct tpm_chip *chip = file->private_data;
|
||||||
|
|
||||||
file->private_data = NULL;
|
|
||||||
|
|
||||||
spin_lock(&driver_lock);
|
spin_lock(&driver_lock);
|
||||||
|
file->private_data = NULL;
|
||||||
chip->num_opens--;
|
chip->num_opens--;
|
||||||
del_singleshot_timer_sync(&chip->user_read_timer);
|
del_singleshot_timer_sync(&chip->user_read_timer);
|
||||||
atomic_set(&chip->data_pending, 0);
|
atomic_set(&chip->data_pending, 0);
|
||||||
|
|
||||||
pci_dev_put(chip->pci_dev);
|
pci_dev_put(chip->pci_dev);
|
||||||
|
kfree(chip->data_buffer);
|
||||||
|
spin_unlock(&driver_lock);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -665,10 +665,14 @@ dev_num_search_complete:
|
|||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
spin_lock(&driver_lock);
|
||||||
|
|
||||||
pci_set_drvdata(pci_dev, chip);
|
pci_set_drvdata(pci_dev, chip);
|
||||||
|
|
||||||
list_add(&chip->list, &tpm_chip_list);
|
list_add(&chip->list, &tpm_chip_list);
|
||||||
|
|
||||||
|
spin_unlock(&driver_lock);
|
||||||
|
|
||||||
sysfs_create_group(&pci_dev->dev.kobj, chip->vendor->attr_group);
|
sysfs_create_group(&pci_dev->dev.kobj, chip->vendor->attr_group);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
Reference in New Issue
Block a user