Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7b900c12 authored by Stefan Richter's avatar Stefan Richter
Browse files

dv1394: remove BKL contention



Purges the one remaining call to lock_kernel() from the 1394 subsystem.

Signed-off-by: default avatarStefan Richter <stefanr@s5r6.in-berlin.de>
parent 75dcf5dc
Loading
Loading
Loading
Loading
+3 −11
Original line number Diff line number Diff line
@@ -1536,28 +1536,21 @@ 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;
}