|
@@ -68,6 +68,7 @@
|
|
|
#include <linux/delay.h>
|
|
|
#include <linux/sound.h>
|
|
|
#include <linux/slab.h>
|
|
|
+#include <linux/smp_lock.h>
|
|
|
#include <linux/soundcard.h>
|
|
|
#include <linux/ac97_codec.h>
|
|
|
#include <linux/pci.h>
|
|
@@ -1534,6 +1535,7 @@ static int cs4297a_open_mixdev(struct inode *inode, struct file *file)
|
|
|
CS_DBGOUT(CS_FUNCTION | CS_OPEN, 4,
|
|
|
printk(KERN_INFO "cs4297a: cs4297a_open_mixdev()+\n"));
|
|
|
|
|
|
+ lock_kernel();
|
|
|
list_for_each(entry, &cs4297a_devs)
|
|
|
{
|
|
|
s = list_entry(entry, struct cs4297a_state, list);
|
|
@@ -1544,6 +1546,8 @@ static int cs4297a_open_mixdev(struct inode *inode, struct file *file)
|
|
|
{
|
|
|
CS_DBGOUT(CS_FUNCTION | CS_OPEN | CS_ERROR, 2,
|
|
|
printk(KERN_INFO "cs4297a: cs4297a_open_mixdev()- -ENODEV\n"));
|
|
|
+
|
|
|
+ unlock_kernel();
|
|
|
return -ENODEV;
|
|
|
}
|
|
|
VALIDATE_STATE(s);
|
|
@@ -1551,6 +1555,7 @@ static int cs4297a_open_mixdev(struct inode *inode, struct file *file)
|
|
|
|
|
|
CS_DBGOUT(CS_FUNCTION | CS_OPEN, 4,
|
|
|
printk(KERN_INFO "cs4297a: cs4297a_open_mixdev()- 0\n"));
|
|
|
+ unlock_kernel();
|
|
|
|
|
|
return nonseekable_open(inode, file);
|
|
|
}
|
|
@@ -2369,7 +2374,7 @@ static int cs4297a_release(struct inode *inode, struct file *file)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static int cs4297a_open(struct inode *inode, struct file *file)
|
|
|
+static int cs4297a_locked_open(struct inode *inode, struct file *file)
|
|
|
{
|
|
|
int minor = iminor(inode);
|
|
|
struct cs4297a_state *s=NULL;
|
|
@@ -2486,6 +2491,16 @@ static int cs4297a_open(struct inode *inode, struct file *file)
|
|
|
return nonseekable_open(inode, file);
|
|
|
}
|
|
|
|
|
|
+static int cs4297a_open(struct inode *inode, struct file *file)
|
|
|
+{
|
|
|
+ int ret;
|
|
|
+
|
|
|
+ lock_kernel();
|
|
|
+ ret = cs4297a_open(inode, file);
|
|
|
+ unlock_kernel();
|
|
|
+
|
|
|
+ return ret;
|
|
|
+}
|
|
|
|
|
|
// ******************************************************************************************
|
|
|
// Wave (audio) file operations struct.
|