aboutsummaryrefslogtreecommitdiffstats
path: root/sound
diff options
context:
space:
mode:
Diffstat (limited to 'sound')
-rw-r--r--sound/core/pcm_native.c8
-rw-r--r--sound/core/sound.c15
-rw-r--r--sound/sound_core.c5
3 files changed, 25 insertions, 3 deletions
diff --git a/sound/core/pcm_native.c b/sound/core/pcm_native.c
index 61f5d425b630..c49b9d9e303c 100644
--- a/sound/core/pcm_native.c
+++ b/sound/core/pcm_native.c
@@ -22,6 +22,7 @@
22#include <linux/mm.h> 22#include <linux/mm.h>
23#include <linux/file.h> 23#include <linux/file.h>
24#include <linux/slab.h> 24#include <linux/slab.h>
25#include <linux/smp_lock.h>
25#include <linux/time.h> 26#include <linux/time.h>
26#include <linux/pm_qos_params.h> 27#include <linux/pm_qos_params.h>
27#include <linux/uio.h> 28#include <linux/uio.h>
@@ -3249,14 +3250,17 @@ static int snd_pcm_fasync(int fd, struct file * file, int on)
3249 struct snd_pcm_file * pcm_file; 3250 struct snd_pcm_file * pcm_file;
3250 struct snd_pcm_substream *substream; 3251 struct snd_pcm_substream *substream;
3251 struct snd_pcm_runtime *runtime; 3252 struct snd_pcm_runtime *runtime;
3252 int err; 3253 int err = -ENXIO;
3253 3254
3255 lock_kernel();
3254 pcm_file = file->private_data; 3256 pcm_file = file->private_data;
3255 substream = pcm_file->substream; 3257 substream = pcm_file->substream;
3256 snd_assert(substream != NULL, return -ENXIO); 3258 snd_assert(substream != NULL, goto out);
3257 runtime = substream->runtime; 3259 runtime = substream->runtime;
3258 3260
3259 err = fasync_helper(fd, file, on, &runtime->fasync); 3261 err = fasync_helper(fd, file, on, &runtime->fasync);
3262out:
3263 unlock_kernel();
3260 if (err < 0) 3264 if (err < 0)
3261 return err; 3265 return err;
3262 return 0; 3266 return 0;
diff --git a/sound/core/sound.c b/sound/core/sound.c
index 6c8ab48c689a..62e057a94653 100644
--- a/sound/core/sound.c
+++ b/sound/core/sound.c
@@ -21,6 +21,7 @@
21 21
22#include <linux/init.h> 22#include <linux/init.h>
23#include <linux/slab.h> 23#include <linux/slab.h>
24#include <linux/smp_lock.h>
24#include <linux/time.h> 25#include <linux/time.h>
25#include <linux/device.h> 26#include <linux/device.h>
26#include <linux/moduleparam.h> 27#include <linux/moduleparam.h>
@@ -121,7 +122,7 @@ void *snd_lookup_minor_data(unsigned int minor, int type)
121 122
122EXPORT_SYMBOL(snd_lookup_minor_data); 123EXPORT_SYMBOL(snd_lookup_minor_data);
123 124
124static int snd_open(struct inode *inode, struct file *file) 125static int __snd_open(struct inode *inode, struct file *file)
125{ 126{
126 unsigned int minor = iminor(inode); 127 unsigned int minor = iminor(inode);
127 struct snd_minor *mptr = NULL; 128 struct snd_minor *mptr = NULL;
@@ -163,6 +164,18 @@ static int snd_open(struct inode *inode, struct file *file)
163 return err; 164 return err;
164} 165}
165 166
167
168/* BKL pushdown: nasty #ifdef avoidance wrapper */
169static int snd_open(struct inode *inode, struct file *file)
170{
171 int ret;
172
173 lock_kernel();
174 ret = __snd_open(inode, file);
175 unlock_kernel();
176 return ret;
177}
178
166static const struct file_operations snd_fops = 179static const struct file_operations snd_fops =
167{ 180{
168 .owner = THIS_MODULE, 181 .owner = THIS_MODULE,
diff --git a/sound/sound_core.c b/sound/sound_core.c
index 46daca175502..dcfc1d5ce631 100644
--- a/sound/sound_core.c
+++ b/sound/sound_core.c
@@ -37,6 +37,7 @@
37#include <linux/module.h> 37#include <linux/module.h>
38#include <linux/init.h> 38#include <linux/init.h>
39#include <linux/slab.h> 39#include <linux/slab.h>
40#include <linux/smp_lock.h>
40#include <linux/types.h> 41#include <linux/types.h>
41#include <linux/kernel.h> 42#include <linux/kernel.h>
42#include <linux/fs.h> 43#include <linux/fs.h>
@@ -464,6 +465,8 @@ int soundcore_open(struct inode *inode, struct file *file)
464 struct sound_unit *s; 465 struct sound_unit *s;
465 const struct file_operations *new_fops = NULL; 466 const struct file_operations *new_fops = NULL;
466 467
468 lock_kernel ();
469
467 chain=unit&0x0F; 470 chain=unit&0x0F;
468 if(chain==4 || chain==5) /* dsp/audio/dsp16 */ 471 if(chain==4 || chain==5) /* dsp/audio/dsp16 */
469 { 472 {
@@ -511,9 +514,11 @@ int soundcore_open(struct inode *inode, struct file *file)
511 file->f_op = fops_get(old_fops); 514 file->f_op = fops_get(old_fops);
512 } 515 }
513 fops_put(old_fops); 516 fops_put(old_fops);
517 unlock_kernel();
514 return err; 518 return err;
515 } 519 }
516 spin_unlock(&sound_loader_lock); 520 spin_unlock(&sound_loader_lock);
521 unlock_kernel();
517 return -ENODEV; 522 return -ENODEV;
518} 523}
519 524