aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDevin Heitmueller <dheitmueller@kernellabs.com>2009-04-28 13:35:27 -0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2009-06-16 18:14:13 -0400
commit06f837cadbcdedb45f0702cb57c99c404ae921e6 (patch)
tree2c6496c058143c8379190e0cebde8d8cf345b86d
parentb02064caebd9b1d73dd29ebb6e75f487c5f0dbc5 (diff)
V4L/DVB (11784): cx88: Fix race condition between cx8800 startup and hald
A power management fix to properly put the xc5000 into low power mode revealed a race condition where hald could detect the creation of the device file and connect to the device while the initial device configuration is still in progress. Lock the core structure so that video_release cannot be called and put the tuner to sleep in the middle of the initial call to cx88_set_tvnorm() in cx8800_initdev() Thanks to Michael Krufky for discovering the issue and providing an environment to test in. Cc: Michael Krufky <mkrufky@linuxtv.org> Signed-off-by: Devin Heitmueller <dheitmueller@kernellabs.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
-rw-r--r--drivers/media/video/cx88/cx88-video.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/drivers/media/video/cx88/cx88-video.c b/drivers/media/video/cx88/cx88-video.c
index b993d42fe73c..d6d6d13a6a6b 100644
--- a/drivers/media/video/cx88/cx88-video.c
+++ b/drivers/media/video/cx88/cx88-video.c
@@ -926,8 +926,10 @@ static int video_release(struct file *file)
926 file->private_data = NULL; 926 file->private_data = NULL;
927 kfree(fh); 927 kfree(fh);
928 928
929 mutex_lock(&dev->core->lock);
929 if(atomic_dec_and_test(&dev->core->users)) 930 if(atomic_dec_and_test(&dev->core->users))
930 call_all(dev->core, tuner, s_standby); 931 call_all(dev->core, tuner, s_standby);
932 mutex_unlock(&dev->core->lock);
931 933
932 return 0; 934 return 0;
933} 935}