|
@@ -2429,8 +2429,7 @@ static unsigned int vwsnd_audio_poll(struct file *file,
|
|
|
return mask;
|
|
|
}
|
|
|
|
|
|
-static int vwsnd_audio_do_ioctl(struct inode *inode,
|
|
|
- struct file *file,
|
|
|
+static int vwsnd_audio_do_ioctl(struct file *file,
|
|
|
unsigned int cmd,
|
|
|
unsigned long arg)
|
|
|
{
|
|
@@ -2446,8 +2445,8 @@ static int vwsnd_audio_do_ioctl(struct inode *inode,
|
|
|
int ival;
|
|
|
|
|
|
|
|
|
- DBGEV("(inode=0x%p, file=0x%p, cmd=0x%x, arg=0x%lx)\n",
|
|
|
- inode, file, cmd, arg);
|
|
|
+ DBGEV("(file=0x%p, cmd=0x%x, arg=0x%lx)\n",
|
|
|
+ file, cmd, arg);
|
|
|
switch (cmd) {
|
|
|
case OSS_GETVERSION: /* _SIOR ('M', 118, int) */
|
|
|
DBGX("OSS_GETVERSION\n");
|
|
@@ -2885,17 +2884,19 @@ static int vwsnd_audio_do_ioctl(struct inode *inode,
|
|
|
return -EINVAL;
|
|
|
}
|
|
|
|
|
|
-static int vwsnd_audio_ioctl(struct inode *inode,
|
|
|
- struct file *file,
|
|
|
+static long vwsnd_audio_ioctl(struct file *file,
|
|
|
unsigned int cmd,
|
|
|
unsigned long arg)
|
|
|
{
|
|
|
vwsnd_dev_t *devc = (vwsnd_dev_t *) file->private_data;
|
|
|
int ret;
|
|
|
|
|
|
+ lock_kernel();
|
|
|
mutex_lock(&devc->io_mutex);
|
|
|
- ret = vwsnd_audio_do_ioctl(inode, file, cmd, arg);
|
|
|
+ ret = vwsnd_audio_do_ioctl(file, cmd, arg);
|
|
|
mutex_unlock(&devc->io_mutex);
|
|
|
+ unlock_kernel();
|
|
|
+
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
@@ -3049,7 +3050,7 @@ static const struct file_operations vwsnd_audio_fops = {
|
|
|
.read = vwsnd_audio_read,
|
|
|
.write = vwsnd_audio_write,
|
|
|
.poll = vwsnd_audio_poll,
|
|
|
- .ioctl = vwsnd_audio_ioctl,
|
|
|
+ .unlocked_ioctl = vwsnd_audio_ioctl,
|
|
|
.mmap = vwsnd_audio_mmap,
|
|
|
.open = vwsnd_audio_open,
|
|
|
.release = vwsnd_audio_release,
|
|
@@ -3211,8 +3212,7 @@ static int mixer_write_ioctl(vwsnd_dev_t *devc, unsigned int nr, void __user *ar
|
|
|
|
|
|
/* This is the ioctl entry to the mixer driver. */
|
|
|
|
|
|
-static int vwsnd_mixer_ioctl(struct inode *ioctl,
|
|
|
- struct file *file,
|
|
|
+static long vwsnd_mixer_ioctl(struct file *file,
|
|
|
unsigned int cmd,
|
|
|
unsigned long arg)
|
|
|
{
|
|
@@ -3223,6 +3223,7 @@ static int vwsnd_mixer_ioctl(struct inode *ioctl,
|
|
|
|
|
|
DBGEV("(devc=0x%p, cmd=0x%x, arg=0x%lx)\n", devc, cmd, arg);
|
|
|
|
|
|
+ lock_kernel();
|
|
|
mutex_lock(&devc->mix_mutex);
|
|
|
{
|
|
|
if ((cmd & ~nrmask) == MIXER_READ(0))
|
|
@@ -3233,13 +3234,14 @@ static int vwsnd_mixer_ioctl(struct inode *ioctl,
|
|
|
retval = -EINVAL;
|
|
|
}
|
|
|
mutex_unlock(&devc->mix_mutex);
|
|
|
+ unlock_kernel();
|
|
|
return retval;
|
|
|
}
|
|
|
|
|
|
static const struct file_operations vwsnd_mixer_fops = {
|
|
|
.owner = THIS_MODULE,
|
|
|
.llseek = no_llseek,
|
|
|
- .ioctl = vwsnd_mixer_ioctl,
|
|
|
+ .unlocked_ioctl = vwsnd_mixer_ioctl,
|
|
|
.open = vwsnd_mixer_open,
|
|
|
.release = vwsnd_mixer_release,
|
|
|
};
|