diff options
Diffstat (limited to 'drivers/char/tpm/tpm.c')
-rw-r--r-- | drivers/char/tpm/tpm.c | 24 |
1 files changed, 6 insertions, 18 deletions
diff --git a/drivers/char/tpm/tpm.c b/drivers/char/tpm/tpm.c index 2035c15ffcce..f7fa3c3a51bd 100644 --- a/drivers/char/tpm/tpm.c +++ b/drivers/char/tpm/tpm.c | |||
@@ -434,16 +434,7 @@ int tpm_release(struct inode *inode, struct file *file) | |||
434 | 434 | ||
435 | spin_lock(&driver_lock); | 435 | spin_lock(&driver_lock); |
436 | chip->num_opens--; | 436 | chip->num_opens--; |
437 | spin_unlock(&driver_lock); | 437 | del_singleshot_timer_sync(&chip->user_read_timer); |
438 | |||
439 | down(&chip->timer_manipulation_mutex); | ||
440 | if (timer_pending(&chip->user_read_timer)) | ||
441 | del_singleshot_timer_sync(&chip->user_read_timer); | ||
442 | else if (timer_pending(&chip->device_timer)) | ||
443 | del_singleshot_timer_sync(&chip->device_timer); | ||
444 | up(&chip->timer_manipulation_mutex); | ||
445 | |||
446 | kfree(chip->data_buffer); | ||
447 | atomic_set(&chip->data_pending, 0); | 438 | atomic_set(&chip->data_pending, 0); |
448 | 439 | ||
449 | pci_dev_put(chip->pci_dev); | 440 | pci_dev_put(chip->pci_dev); |
@@ -481,13 +472,7 @@ ssize_t tpm_write(struct file * file, const char __user * buf, | |||
481 | up(&chip->buffer_mutex); | 472 | up(&chip->buffer_mutex); |
482 | 473 | ||
483 | /* Set a timeout by which the reader must come claim the result */ | 474 | /* Set a timeout by which the reader must come claim the result */ |
484 | down(&chip->timer_manipulation_mutex); | 475 | mod_timer(&chip->user_read_timer, jiffies + (60 * HZ)); |
485 | init_timer(&chip->user_read_timer); | ||
486 | chip->user_read_timer.function = user_reader_timeout; | ||
487 | chip->user_read_timer.data = (unsigned long) chip; | ||
488 | chip->user_read_timer.expires = jiffies + (60 * HZ); | ||
489 | add_timer(&chip->user_read_timer); | ||
490 | up(&chip->timer_manipulation_mutex); | ||
491 | 476 | ||
492 | return in_size; | 477 | return in_size; |
493 | } | 478 | } |
@@ -617,9 +602,12 @@ int tpm_register_hardware(struct pci_dev *pci_dev, | |||
617 | 602 | ||
618 | init_MUTEX(&chip->buffer_mutex); | 603 | init_MUTEX(&chip->buffer_mutex); |
619 | init_MUTEX(&chip->tpm_mutex); | 604 | init_MUTEX(&chip->tpm_mutex); |
620 | init_MUTEX(&chip->timer_manipulation_mutex); | ||
621 | INIT_LIST_HEAD(&chip->list); | 605 | INIT_LIST_HEAD(&chip->list); |
622 | 606 | ||
607 | init_timer(&chip->user_read_timer); | ||
608 | chip->user_read_timer.function = user_reader_timeout; | ||
609 | chip->user_read_timer.data = (unsigned long) chip; | ||
610 | |||
623 | chip->vendor = entry; | 611 | chip->vendor = entry; |
624 | 612 | ||
625 | chip->dev_num = -1; | 613 | chip->dev_num = -1; |