aboutsummaryrefslogtreecommitdiff
path: root/drivers/media/dvb/dvb-core/dvb_frontend.c
diff options
context:
space:
mode:
authorMarkus Rechberger <markus.rechberger@amd.com>2007-04-14 10:19:18 -0300
committerMauro Carvalho Chehab <mchehab@infradead.org>2007-04-27 15:45:31 -0300
commit57861b432bda77f8bfafda2fb6f5a922d5f3aef1 (patch)
tree3d24d6caf70909ee9d6f59dbc6fb7d425e83a94e /drivers/media/dvb/dvb-core/dvb_frontend.c
parentca5be9cd0516629cb8ee335b7dad076e66d72a22 (diff)
V4L/DVB (5511): Fix 2/3 for bug 7819: demux and dvr
fixing hotplug issue for demux[n] and dvr[n] Signed-off-by: Michal CIJOML Semler <cijoml@volny.cz> Signed-off-by: Markus Rechberger <markus.rechberger@amd.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
Diffstat (limited to 'drivers/media/dvb/dvb-core/dvb_frontend.c')
-rw-r--r--drivers/media/dvb/dvb-core/dvb_frontend.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/drivers/media/dvb/dvb-core/dvb_frontend.c b/drivers/media/dvb/dvb-core/dvb_frontend.c
index 9783d392b7d..f4e4ca2dcad 100644
--- a/drivers/media/dvb/dvb-core/dvb_frontend.c
+++ b/drivers/media/dvb/dvb-core/dvb_frontend.c
@@ -607,10 +607,6 @@ static void dvb_frontend_stop(struct dvb_frontend *fe)
kthread_stop(fepriv->thread);
- if (fepriv->dvbdev->users < -1)
- wait_event_interruptible(fepriv->dvbdev->wait_queue,
- fepriv->dvbdev->users==-1);
-
init_MUTEX (&fepriv->sem);
fepriv->state = FESTATE_IDLE;
@@ -1043,7 +1039,7 @@ static int dvb_frontend_release(struct inode *inode, struct file *file)
if (dvbdev->users==-1 && fepriv->exit==1) {
fops_put(file->f_op);
file->f_op = NULL;
- wake_up_interruptible (&dvbdev->wait_queue);
+ wake_up(&dvbdev->wait_queue);
}
return ret;
}
@@ -1104,7 +1100,14 @@ int dvb_unregister_frontend(struct dvb_frontend* fe)
struct dvb_frontend_private *fepriv = fe->frontend_priv;
dprintk ("%s\n", __FUNCTION__);
+ mutex_lock(&frontend_mutex);
dvb_frontend_stop (fe);
+ mutex_unlock(&frontend_mutex);
+
+ if (fepriv->dvbdev->users < -1)
+ wait_event(fepriv->dvbdev->wait_queue,
+ fepriv->dvbdev->users==-1);
+
mutex_lock(&frontend_mutex);
dvb_unregister_device (fepriv->dvbdev);