use mutex instead of semaphore in TPM driver
PATCH 1/1 use mutex instead of semaphore in TPM driver
the TPM driver uses two semaphores as mutexes. use the mutex API instead of the (binary) semaphores
Signed-off-by Matthias Kaehlcke <[email protected]>
--
drivers/char/tpm/tpm.c +11 -11
@@ -328,10 +328,10 @@ static void timeout_work(struct work_struct *work) { struct tpm_chip *chip = container_of(work, struct tpm_chip, work); -down (&chip->buffer_mutex); +mutex_lock (&chip->buffer_mutex);atomic_set (&chip->data_pending,0 );memset (chip->data_buffer,0 ,TPM_BUFSIZE ); -up (&chip->buffer_mutex); +mutex_unlock (&chip->buffer_mutex); }/*
@@ -380,7 +380,7 @@ static ssize_t tpm_transmit(struct tpm_chip *chip, const char *buf,return -E2BIG ; } -down (&chip->tpm_mutex); +mutex_lock (&chip->tpm_mutex);if ((rc = chip->vendor.send (chip, (u8 *) buf, count)) <0 ) { dev_err(chip->dev,
@@ -419,7 +419,7 @@ out_recv:dev_err (chip->dev,"tpm_transmit: tpm_recv: error %zd\n" , rc); out: -up (&chip->tpm_mutex); +mutex_unlock (&chip->tpm_mutex);return rc; }
@@ -966,14 +966,14 @@ ssize_t tpm_write(struct file *file, const char __user *buf,while (atomic_read (&chip->data_pending) !=0 )msleep (TPM_TIMEOUT ); -down (&chip->buffer_mutex); +mutex_lock (&chip->buffer_mutex);if (in_size >TPM_BUFSIZE ) in_size =TPM_BUFSIZE ;if (copy_from_user (chip->data_buffer, (void __user *) buf, in_size)) { -up (&chip->buffer_mutex); +mutex_unlock (&chip->buffer_mutex);return -EFAULT ; }
@@ -981,7 +981,7 @@ ssize_t tpm_write(struct file *file, const char __user *buf, out_size =tpm_transmit (chip, chip->data_buffer,TPM_BUFSIZE );atomic_set (&chip->data_pending, out_size); -up (&chip->buffer_mutex); +mutex_unlock (&chip->buffer_mutex);/* Set a timeout by which the reader must come claim the result */ mod_timer (&chip->user_read_timer, jiffies + (60 *HZ ));
@@ -1004,10 +1004,10 @@ ssize_t tpm_read(struct file *file, char __user *buf,if (size < ret_size) ret_size = size; -down (&chip->buffer_mutex); +mutex_lock (&chip->buffer_mutex);if (copy_to_user (buf, chip->data_buffer, ret_size)) ret_size = -EFAULT ; -up (&chip->buffer_mutex); +mutex_unlock (&chip->buffer_mutex); }return ret_size;
@@ -1100,8 +1100,8 @@ struct tpm_chip *tpm_register_hardware(struct device *dev, const struct tpm_vendif (chip ==NULL )return NULL ; -init_MUTEX (&chip->buffer_mutex); -init_MUTEX (&chip->tpm_mutex); +mutex_init (&chip->buffer_mutex); +mutex_init (&chip->tpm_mutex);INIT_LIST_HEAD (&chip->list);INIT_WORK (&chip->work, timeout_work);
drivers/char/tpm/tpm.h +2 -2
@@ -95,11 +95,11 @@ struct tpm_chip {/* Data passed to and from the tpm via the read/write calls */ u8 *data_buffer;atomic_t data_pending; -struct semaphore buffer_mutex; +struct mutex buffer_mutex;struct timer_list user_read_timer;/* user needs to claim result */ struct work_struct work; -struct semaphore tpm_mutex;/* tpm is processing */ +struct mutex tpm_mutex;/* tpm is processing */ struct tpm_vendor_specific vendor;
Signature · 10 lines
Matthias Kaehlcke
Linux Application Developer
Barcelona
Dreams and reality are opposites. Action synthesizes them
(Assata Shakur)
.''`.
using free software / Debian GNU/Linux | http://debian.org : :' :
`. `'`
gpg --keyserver pgp.mit.edu --recv-keys 47D8E5D4 `-