dv1394: remove BKL contention
Purges the one remaining call to lock_kernel() from the 1394 subsystem. Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
This commit is contained in:
Родитель
75dcf5dc5a
Коммит
7b900c12cd
|
@ -1536,27 +1536,20 @@ static ssize_t dv1394_read(struct file *file, char __user *buffer, size_t count
|
|||
|
||||
static long dv1394_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
struct video_card *video;
|
||||
struct video_card *video = file_to_video_card(file);
|
||||
unsigned long flags;
|
||||
int ret = -EINVAL;
|
||||
void __user *argp = (void __user *)arg;
|
||||
|
||||
DECLARE_WAITQUEUE(wait, current);
|
||||
|
||||
lock_kernel();
|
||||
video = file_to_video_card(file);
|
||||
|
||||
/* serialize this to prevent multi-threaded mayhem */
|
||||
if (file->f_flags & O_NONBLOCK) {
|
||||
if (!mutex_trylock(&video->mtx)) {
|
||||
unlock_kernel();
|
||||
if (!mutex_trylock(&video->mtx))
|
||||
return -EAGAIN;
|
||||
}
|
||||
} else {
|
||||
if (mutex_lock_interruptible(&video->mtx)) {
|
||||
unlock_kernel();
|
||||
if (mutex_lock_interruptible(&video->mtx))
|
||||
return -ERESTARTSYS;
|
||||
}
|
||||
}
|
||||
|
||||
switch(cmd)
|
||||
|
@ -1780,7 +1773,6 @@ static long dv1394_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
|
|||
|
||||
out:
|
||||
mutex_unlock(&video->mtx);
|
||||
unlock_kernel();
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче