sound: cdev lock_kernel() pushdown
Signed-off-by: Jonathan Corbet <corbet@lwn.net>
This commit is contained in:
@@ -21,6 +21,7 @@
|
|||||||
|
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
|
#include <linux/smp_lock.h>
|
||||||
#include <linux/time.h>
|
#include <linux/time.h>
|
||||||
#include <linux/device.h>
|
#include <linux/device.h>
|
||||||
#include <linux/moduleparam.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);
|
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);
|
unsigned int minor = iminor(inode);
|
||||||
struct snd_minor *mptr = NULL;
|
struct snd_minor *mptr = NULL;
|
||||||
@@ -163,6 +164,18 @@ static int snd_open(struct inode *inode, struct file *file)
|
|||||||
return err;
|
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 =
|
static const struct file_operations snd_fops =
|
||||||
{
|
{
|
||||||
.owner = THIS_MODULE,
|
.owner = THIS_MODULE,
|
||||||
|
@@ -37,6 +37,7 @@
|
|||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
|
#include <linux/smp_lock.h>
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/fs.h>
|
#include <linux/fs.h>
|
||||||
@@ -464,6 +465,8 @@ int soundcore_open(struct inode *inode, struct file *file)
|
|||||||
struct sound_unit *s;
|
struct sound_unit *s;
|
||||||
const struct file_operations *new_fops = NULL;
|
const struct file_operations *new_fops = NULL;
|
||||||
|
|
||||||
|
lock_kernel ();
|
||||||
|
|
||||||
chain=unit&0x0F;
|
chain=unit&0x0F;
|
||||||
if(chain==4 || chain==5) /* dsp/audio/dsp16 */
|
if(chain==4 || chain==5) /* dsp/audio/dsp16 */
|
||||||
{
|
{
|
||||||
@@ -511,9 +514,11 @@ int soundcore_open(struct inode *inode, struct file *file)
|
|||||||
file->f_op = fops_get(old_fops);
|
file->f_op = fops_get(old_fops);
|
||||||
}
|
}
|
||||||
fops_put(old_fops);
|
fops_put(old_fops);
|
||||||
|
unlock_kernel();
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
spin_unlock(&sound_loader_lock);
|
spin_unlock(&sound_loader_lock);
|
||||||
|
unlock_kernel();
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user