Signed-off-by: Andreas Oberritter <obi@xxxxxxxxxxx> --- 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 majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html