--- linux/drivers/media/dvb/dvb-core/dvbdev.c 2011-05-17 18:43:04.000000000 +0300
+++ linux/drivers/media/dvb/dvb-core/dvbdev.c 2011-05-23 22:48:40.514641108 +0300
@@ -36,7 +36,7 @@
#include <linux/smp_lock.h>
#include "dvbdev.h"
-static DEFINE_MUTEX(dvbdev_mutex);
+//static DEFINE_MUTEX(dvbdev_mutex);
static int dvbdev_debug;
module_param(dvbdev_debug, int, 0644);
@@ -70,7 +70,8 @@
{
struct dvb_device *dvbdev;
- mutex_lock(&dvbdev_mutex);
+ lock_kernel();
+ //mutex_lock(&dvbdev_mutex);
down_read(&minor_rwsem);
dvbdev = dvb_minors[iminor(inode)];
@@ -101,12 +102,13 @@
}
fops_put(old_fops);
up_read(&minor_rwsem);
- mutex_unlock(&dvbdev_mutex);
+ //mutex_unlock(&dvbdev_mutex);
+ unlock_kernel();
return err;
}
fail:
up_read(&minor_rwsem);
- mutex_unlock(&dvbdev_mutex);
+ //mutex_unlock(&dvbdev_mutex);
return -ENODEV;
}
@@ -169,6 +171,7 @@
unsigned int cmd, unsigned long arg)
{
struct dvb_device *dvbdev = file->private_data;
+ int ret;
if (!dvbdev)
return -ENODEV;
@@ -176,7 +179,12 @@
if (!dvbdev->kernel_ioctl)
return -EINVAL;
- return dvb_usercopy (file, cmd, arg, dvbdev->kernel_ioctl);
+ //return dvb_usercopy (file, cmd, arg, dvbdev->kernel_ioctl);
+ lock_kernel();
+ ret = dvb_usercopy(file, cmd, arg, dvbdev->kernel_ioctl);
+ unlock_kernel();
+
+ return ret;
}
EXPORT_SYMBOL(dvb_generic_ioctl);
@@ -441,10 +449,10 @@
}
/* call driver */
- mutex_lock(&dvbdev_mutex);
+ //mutex_lock(&dvbdev_mutex);
if ((err = func(file, cmd, parg)) == -ENOIOCTLCMD)
err = -EINVAL;
- mutex_unlock(&dvbdev_mutex);
+ //mutex_unlock(&dvbdev_mutex);
if (err < 0)
goto out;
smv1210 Wrote:http://www.tbsdtv.com/download/common/linux-tbs-drivers_110523.rar
Users browsing this forum: No registered users and 2 guests