[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