From: Marcin Slusarz <marcin.slusarz@gmail.com>
To: video4linux-list@redhat.com, LKML <linux-kernel@vger.kernel.org>
Cc: Mauro Carvalho Chehab <mchehab@infradead.org>
Subject: [RFC PATCH] v4l: saa7134: fix multiple clients access (and oops)
Date: Sun, 8 Jun 2008 00:48:40 +0200 [thread overview]
Message-ID: <20080607224835.GA25025@joi> (raw)
While looking for a reason of multiple oopses in empress_querycap as reported
by kerneloops.org I noticed that only first open of device initializes
struct_file->private_data properly. (Closing the device was broken too).
So initialize private_date and free all resources on last close.
I think this change will fix oops in empress_querycap.
http://kerneloops.org/guilty.php?guilty=empress_querycap&version=2.6.25-release&start=1671168&end=1703935&class=oops
Signed-off-by: Marcin Slusarz <marcin.slusarz@gmail.com>
Cc: Mauro Carvalho Chehab <mchehab@infradead.org>
Cc: video4linux-list@redhat.com
---
Compile tested only. Please test on real hardware.
---
drivers/media/video/saa7134/saa7134-empress.c | 23 +++++++++++++----------
1 files changed, 13 insertions(+), 10 deletions(-)
diff --git a/drivers/media/video/saa7134/saa7134-empress.c b/drivers/media/video/saa7134/saa7134-empress.c
index 81431ee..e543074 100644
--- a/drivers/media/video/saa7134/saa7134-empress.c
+++ b/drivers/media/video/saa7134/saa7134-empress.c
@@ -96,11 +96,11 @@ static int ts_open(struct inode *inode, struct file *file)
saa_writeb(SAA7134_AUDIO_MUTE_CTRL,
saa_readb(SAA7134_AUDIO_MUTE_CTRL) & ~(1 << 6));
- dev->empress_users++;
- file->private_data = dev;
err = 0;
done_up:
+ dev->empress_users++;
+ file->private_data = dev;
mutex_unlock(&dev->empress_tsq.vb_lock);
done:
return err;
@@ -110,16 +110,19 @@ static int ts_release(struct inode *inode, struct file *file)
{
struct saa7134_dev *dev = file->private_data;
- videobuf_stop(&dev->empress_tsq);
- videobuf_mmap_free(&dev->empress_tsq);
- dev->empress_users--;
+ mutex_lock(&dev->empress_tsq.vb_lock);
+ if (--dev->empress_users == 0) {
+ videobuf_stop(&dev->empress_tsq);
+ videobuf_mmap_free(&dev->empress_tsq);
- /* stop the encoder */
- ts_reset_encoder(dev);
+ /* stop the encoder */
+ ts_reset_encoder(dev);
- /* Mute audio */
- saa_writeb(SAA7134_AUDIO_MUTE_CTRL,
- saa_readb(SAA7134_AUDIO_MUTE_CTRL) | (1 << 6));
+ /* Mute audio */
+ saa_writeb(SAA7134_AUDIO_MUTE_CTRL,
+ saa_readb(SAA7134_AUDIO_MUTE_CTRL) | (1 << 6));
+ }
+ mutex_unlock(&dev->empress_tsq.vb_lock);
return 0;
}
--
1.5.4.5
next reply other threads:[~2008-06-07 22:49 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-06-07 22:48 Marcin Slusarz [this message]
2008-06-08 6:31 ` [RFC PATCH] v4l: saa7134: fix multiple clients access (and oops) Marcin Slusarz
2008-06-08 10:32 ` Mauro Carvalho Chehab
2008-06-08 10:32 ` Mauro Carvalho Chehab
2008-06-08 11:01 ` Marcin Slusarz
2008-06-09 19:08 ` [PATCH] v4l: saa7134: fix race between opening and closing the device Marcin Slusarz
2008-06-08 10:29 ` [RFC PATCH] v4l: saa7134: fix multiple clients access (and oops) Mauro Carvalho Chehab
2008-06-08 10:29 ` Mauro Carvalho Chehab
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20080607224835.GA25025@joi \
--to=marcin.slusarz@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mchehab@infradead.org \
--cc=video4linux-list@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.