Skip to content

Commit

Permalink
sound: cdev lock_kernel() pushdown
Browse files Browse the repository at this point in the history
Signed-off-by: Jonathan Corbet <[email protected]>
  • Loading branch information
Jonathan Corbet committed Jun 20, 2008
1 parent fc7f687 commit 78a3c3d
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 1 deletion.
15 changes: 14 additions & 1 deletion sound/core/sound.c
Original file line number Diff line number Diff line change
Expand Up @@ -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>
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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,
Expand Down
5 changes: 5 additions & 0 deletions sound/sound_core.c
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
#include <linux/module.h>
#include <linux/init.h>
#include <linux/slab.h>
#include <linux/smp_lock.h>
#include <linux/types.h>
#include <linux/kernel.h>
#include <linux/fs.h>
Expand Down Expand Up @@ -464,6 +465,8 @@ int soundcore_open(struct inode *inode, struct file *file)
struct sound_unit *s;
const struct file_operations *new_fops = NULL;

lock_kernel ();

chain=unit&0x0F;
if(chain==4 || chain==5) /* dsp/audio/dsp16 */
{
Expand Down Expand Up @@ -511,9 +514,11 @@ int soundcore_open(struct inode *inode, struct file *file)
file->f_op = fops_get(old_fops);
}
fops_put(old_fops);
unlock_kernel();
return err;
}
spin_unlock(&sound_loader_lock);
unlock_kernel();
return -ENODEV;
}

Expand Down

0 comments on commit 78a3c3d

Please sign in to comment.