summaryrefslogtreecommitdiff
path: root/sound/core/sound.c
diff options
context:
space:
mode:
authorJonathan Corbet <corbet@lwn.net>2008-05-15 16:39:03 -0600
committerJonathan Corbet <corbet@lwn.net>2008-06-20 14:05:50 -0600
commit78a3c3d7c6b89085610edfe86f7790144afc737e (patch)
treeb3f4937a220655b7a6a5221bf8d544c8e62d19f7 /sound/core/sound.c
parentfc7f687a6878e19f7ce58cb8a65659cd2730b586 (diff)
downloadlwn-78a3c3d7c6b89085610edfe86f7790144afc737e.tar.gz
lwn-78a3c3d7c6b89085610edfe86f7790144afc737e.zip
sound: cdev lock_kernel() pushdown
Signed-off-by: Jonathan Corbet <corbet@lwn.net>
Diffstat (limited to 'sound/core/sound.c')
-rw-r--r--sound/core/sound.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/sound/core/sound.c b/sound/core/sound.c
index 812f91b3de5b..65b66fa6f97e 100644
--- a/sound/core/sound.c
+++ b/sound/core/sound.c
@@ -21,6 +21,7 @@
#include <linux/init.h>
#include <linux/slab.h>
+#include <linux/smp_lock.h>
#include <linux/time.h>
#include <linux/device.h>
#include <linux/moduleparam.h>
@@ -121,7 +122,7 @@ void *snd_lookup_minor_data(unsigned int minor, int type)
EXPORT_SYMBOL(snd_lookup_minor_data);
-static int snd_open(struct inode *inode, struct file *file)
+static int __snd_open(struct inode *inode, struct file *file)
{
unsigned int minor = iminor(inode);
struct snd_minor *mptr = NULL;
@@ -163,6 +164,18 @@ static int snd_open(struct inode *inode, struct file *file)
return err;
}
+
+/* BKL pushdown: nasty #ifdef avoidance wrapper */
+static int snd_open(struct inode *inode, struct file *file)
+{
+ int ret;
+
+ lock_kernel();
+ ret = __snd_open(inode, file);
+ unlock_kernel();
+ return ret;
+}
+
static const struct file_operations snd_fops =
{
.owner = THIS_MODULE,