[kernel] r15202 - in dists/lenny/linux-2.6/debian: . patches/bugfix/all patches/series
Moritz Muehlenhoff
jmm at alioth.debian.org
Thu Feb 18 22:24:54 UTC 2010
Author: jmm
Date: Thu Feb 18 22:24:49 2010
New Revision: 15202
Log:
Fix deadlock in saa7134-empress driver
Added:
dists/lenny/linux-2.6/debian/patches/bugfix/all/saa7134-fix-deadlock.patch
Modified:
dists/lenny/linux-2.6/debian/changelog
dists/lenny/linux-2.6/debian/patches/series/22
Modified: dists/lenny/linux-2.6/debian/changelog
==============================================================================
--- dists/lenny/linux-2.6/debian/changelog Thu Feb 18 18:27:12 2010 (r15201)
+++ dists/lenny/linux-2.6/debian/changelog Thu Feb 18 22:24:49 2010 (r15202)
@@ -6,7 +6,10 @@
* [openvz] ddbec37 inotify: unblock umounting. (closes: #513537)
* ALSA: cs4232: fix crash during chip PNP detection. (closes: #529697)
* matroxfb: fix problems with display stability. (closes: #479652)
-
+
+ [ Moritz Muehlenhoff ]
+ * Fix deadlock in saa7134-empress driver (Closes: #499671)
+
[ Ben Hutchings ]
* via-velocity: Give RX descriptors to the NIC later on open or MTU change
(Closes: #508527)
Added: dists/lenny/linux-2.6/debian/patches/bugfix/all/saa7134-fix-deadlock.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/lenny/linux-2.6/debian/patches/bugfix/all/saa7134-fix-deadlock.patch Thu Feb 18 22:24:49 2010 (r15202)
@@ -0,0 +1,80 @@
+From: Hans Verkuil <hverkuil at xs4all.nl>
+Date: Sat, 26 Jul 2008 12:01:24 +0000 (-0300)
+Subject: V4L/DVB (8505): saa7134-empress.c: fix deadlock
+X-Git-Tag: v2.6.27-rc1~31^2~36
+X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Fnext%2Flinux-next.git;a=commitdiff_plain;h=1052efe0fc69130d9d6a44bc9ceecd229221d9a1
+
+V4L/DVB (8505): saa7134-empress.c: fix deadlock
+
+ts_release() locked a mutex that videobuf_stop() also tried to obtain.
+But ts_release() shouldn't hold that mutex at all.
+
+Make empress_users atomic as well to prevent possible race condition.
+
+Signed-off-by: Hans Verkuil <hverkuil at xs4all.nl>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at infradead.org>
+---
+
+diff --git a/drivers/media/video/saa7134/saa7134-empress.c b/drivers/media/video/saa7134/saa7134-empress.c
+index 8b3f951..2ecfbd1 100644
+--- a/drivers/media/video/saa7134/saa7134-empress.c
++++ b/drivers/media/video/saa7134/saa7134-empress.c
+@@ -89,14 +89,14 @@ static int ts_open(struct inode *inode, struct file *file)
+ err = -EBUSY;
+ if (!mutex_trylock(&dev->empress_tsq.vb_lock))
+ goto done;
+- if (dev->empress_users)
++ if (atomic_read(&dev->empress_users))
+ goto done_up;
+
+ /* Unmute audio */
+ saa_writeb(SAA7134_AUDIO_MUTE_CTRL,
+ saa_readb(SAA7134_AUDIO_MUTE_CTRL) & ~(1 << 6));
+
+- dev->empress_users++;
++ atomic_inc(&dev->empress_users);
+ file->private_data = dev;
+ err = 0;
+
+@@ -110,8 +110,6 @@ static int ts_release(struct inode *inode, struct file *file)
+ {
+ struct saa7134_dev *dev = file->private_data;
+
+- mutex_lock(&dev->empress_tsq.vb_lock);
+-
+ videobuf_stop(&dev->empress_tsq);
+ videobuf_mmap_free(&dev->empress_tsq);
+
+@@ -122,9 +120,7 @@ static int ts_release(struct inode *inode, struct file *file)
+ saa_writeb(SAA7134_AUDIO_MUTE_CTRL,
+ saa_readb(SAA7134_AUDIO_MUTE_CTRL) | (1 << 6));
+
+- dev->empress_users--;
+-
+- mutex_unlock(&dev->empress_tsq.vb_lock);
++ atomic_dec(&dev->empress_users);
+
+ return 0;
+ }
+@@ -447,7 +443,7 @@ static void empress_signal_update(struct work_struct *work)
+ ts_reset_encoder(dev);
+ } else {
+ dprintk("video signal acquired\n");
+- if (dev->empress_users)
++ if (atomic_read(&dev->empress_users))
+ ts_init_encoder(dev);
+ }
+ }
+diff --git a/drivers/media/video/saa7134/saa7134.h b/drivers/media/video/saa7134/saa7134.h
+index ade4e19..ed20dd5 100644
+--- a/drivers/media/video/saa7134/saa7134.h
++++ b/drivers/media/video/saa7134/saa7134.h
+@@ -561,7 +561,7 @@ struct saa7134_dev {
+ /* SAA7134_MPEG_EMPRESS only */
+ struct video_device *empress_dev;
+ struct videobuf_queue empress_tsq;
+- unsigned int empress_users;
++ atomic_t empress_users;
+ struct work_struct empress_workqueue;
+ int empress_started;
+
Modified: dists/lenny/linux-2.6/debian/patches/series/22
==============================================================================
--- dists/lenny/linux-2.6/debian/patches/series/22 Thu Feb 18 18:27:12 2010 (r15201)
+++ dists/lenny/linux-2.6/debian/patches/series/22 Thu Feb 18 22:24:49 2010 (r15202)
@@ -17,3 +17,4 @@
+ bugfix/all/megaraid_sas-add-readl-to-force-PCI-posting-flush.patch
+ bugfix/all/megaraid_sas-add-the-shutdown-DCMD-cmd.patch
+ features/all/megaraid_sas-add-new-controllers-0x78-0x79.patch
++ bugfix/all/saa7134-fix-deadlock.patch
\ No newline at end of file
More information about the Kernel-svn-changes
mailing list