Signed-off-by: Andreas Oberritter <[email protected]>
---
drivers/media/dvb/dvb-core/dvb_frontend.c | 23 +++++++++++------------
1 files changed, 11 insertions(+), 12 deletions(-)
diff --git a/drivers/media/dvb/dvb-core/dvb_frontend.c
b/drivers/media/dvb/dvb-core/dvb_frontend.c
index a716627..f433a88 100644
--- a/drivers/media/dvb/dvb-core/dvb_frontend.c
+++ b/drivers/media/dvb/dvb-core/dvb_frontend.c
@@ -31,7 +31,6 @@
#include <linux/wait.h>
#include <linux/slab.h>
#include <linux/poll.h>
-#include <linux/semaphore.h>
#include <linux/module.h>
#include <linux/list.h>
#include <linux/freezer.h>
@@ -108,7 +107,7 @@ struct dvb_frontend_private {
struct dvb_frontend_parameters parameters_in;
struct dvb_frontend_parameters parameters_out;
struct dvb_fe_events events;
- struct semaphore sem;
+ struct mutex lock;
struct list_head list_head;
wait_queue_head_t wait_queue;
struct task_struct *thread;
@@ -190,12 +189,12 @@ static int dvb_frontend_get_event(struct dvb_frontend *fe,
if (flags & O_NONBLOCK)
return -EWOULDBLOCK;
- up(&fepriv->sem);
+ mutex_unlock(&fepriv->lock);
ret = wait_event_interruptible (events->wait_queue,
events->eventw !=
events->eventr);
- if (down_interruptible (&fepriv->sem))
+ if (mutex_lock_interruptible(&fepriv->lock))
return -ERESTARTSYS;
if (ret < 0)
@@ -556,7 +555,7 @@ static int dvb_frontend_thread(void *data)
set_freezable();
while (1) {
- up(&fepriv->sem); /* is locked when we enter the
thread... */
+ mutex_unlock(&fepriv->lock); /* is locked when we enter
the thread... */
restart:
timeout = wait_event_interruptible_timeout(fepriv->wait_queue,
dvb_frontend_should_wakeup(fe) || kthread_should_stop()
@@ -572,7 +571,7 @@ restart:
if (try_to_freeze())
goto restart;
- if (down_interruptible(&fepriv->sem))
+ if (mutex_lock_interruptible(&fepriv->lock))
break;
if (fepriv->reinitialise) {
@@ -704,7 +703,7 @@ static void dvb_frontend_stop(struct dvb_frontend *fe)
kthread_stop(fepriv->thread);
- sema_init(&fepriv->sem, 1);
+ mutex_init(&fepriv->lock);
fepriv->state = FESTATE_IDLE;
/* paranoia check in case a signal arrived */
@@ -773,7 +772,7 @@ static int dvb_frontend_start(struct dvb_frontend *fe)
if (signal_pending(current))
return -EINTR;
- if (down_interruptible (&fepriv->sem))
+ if (mutex_lock_interruptible(&fepriv->lock))
return -EINTR;
fepriv->state = FESTATE_IDLE;
@@ -786,7 +785,7 @@ static int dvb_frontend_start(struct dvb_frontend *fe)
if (IS_ERR(fe_thread)) {
ret = PTR_ERR(fe_thread);
printk("dvb_frontend_start: failed to start kthread (%d)\n",
ret);
- up(&fepriv->sem);
+ mutex_unlock(&fepriv->lock);
return ret;
}
fepriv->thread = fe_thread;
@@ -1535,7 +1534,7 @@ static int dvb_frontend_ioctl(struct file *file,
cmd == FE_DISEQC_RECV_SLAVE_REPLY))
return -EPERM;
- if (down_interruptible (&fepriv->sem))
+ if (mutex_lock_interruptible(&fepriv->lock))
return -ERESTARTSYS;
if ((cmd == FE_SET_PROPERTY) || (cmd == FE_GET_PROPERTY))
@@ -1545,7 +1544,7 @@ static int dvb_frontend_ioctl(struct file *file,
err = dvb_frontend_ioctl_legacy(file, cmd, parg);
}
- up(&fepriv->sem);
+ mutex_unlock(&fepriv->lock);
return err;
}
@@ -2115,7 +2114,7 @@ int dvb_register_frontend(struct dvb_adapter* dvb,
}
fepriv = fe->frontend_priv;
- sema_init(&fepriv->sem, 1);
+ mutex_init(&fepriv->lock);
init_waitqueue_head (&fepriv->wait_queue);
init_waitqueue_head (&fepriv->events.wait_queue);
mutex_init(&fepriv->events.mtx);
--
1.7.2.5
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html